观看学习上官可编程陈立臣老师的树莓派视频,
在其过程中所记录的学习笔记
一、串口通信概念
- 1、串口通信用于多机通信
- 2、串口通信属于全双工通信,即双方可以同时进行交流
半双工通信,一次只允许一方进行通信 - 3、树莓派进行串口通信一般要连接两根线TXD和RXD,
连接时要相反连接(即树莓派的TXD要与通信方的RXD相连,RXD与TXD相连) - 4、进行串口通信时,数据格式(数据位、停止位、奇偶校验位)和波特率,通信双方要保持一致
二、串口通信编程
- 树莓派的串口是/dev/ttyAmA0(Linux一切皆文件)
1、配置串口
- 修改/boot/cmdline.txt文件,将“console=ttyAMA0,115200”删除,
该语句作用为树莓派启动时用串口来打印调试信息,使用串口通信则需删除 - sudo reboot重启
2、连线
树莓派与USB转TTL相连
TXD —— RXD
RXD —— TXD
0 V —— GND
3、调用函数
#include <wiringPi.h>
int wiringPiSetup (void) 返回执行状态,0表示成功,-1表示失败
void delay (unsigned int howLong) 暂停指定的毫秒数
void delayMicroseconds (unsigned int howLong) 暂停指定的微妙数
#include <wiringSerial.h>
int serialOpen (char *device, int baud) 打开并初始化串口
void serialPutchar (int fd, unsigned char c) 发送一个字节的数据到串口
void serialPuts (int fd, char *s) 发送一个字符串到串口
int serialDataAvail (int fd) 获取串口缓存中可用的字节数
int serialGetchar (int fd) 从串口读取一个字节数据返回,读取前使用serialDataAvail判断
4、示例代码1(向串口发送数据)
#include <wiringSerial.h>
#include <wiringPi.h>
#include <stdio.h>
int main(){
int fd;
if(wiringPiSetup()==-1){
printf("初始化失败\n");
return -1;
}
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
// serialPutchar(fd,'c');
serialPuts(fd,"hello world\r\n"); // /r/n表示回车并换行
delayMicroseconds(1000000);//delay(1000);
}
return 0;
}
5、示例代码2(读取串口数据,终端输出相应语句)
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
int main(){
int fd;
int cmd;
if(wiringPiSetup()==-1){
printf("初始化失败\n");
return -1;
}
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
while(serialDataAvail(fd)!=-1){
cmd = serialGetchar(fd);
//printf("data: %d\n",cmd);
//printf("data: %c\n",cmd);
if(cmd=='2'){
serialPuts(fd,"data is 2\r\n");
}
if(cmd=='3'){
serialPuts(fd,"data is 3\r\n");
}
if(cmd=='4'){
serialPuts(fd,"data is 4\r\n");
}
}
}
return 0;
}
创作不易,动动小手点赞收藏