一、基于面试的串口通信协议
1.串口通信一般使用在多机面试中:不管是软件还是硬件都有一种模块化的编程思想。
主要就是两根线:RXD和TXD
举例,语音识别模块与树莓派之间进行串口通信
语音模块的T连接树莓派上的R,语音模块上的R连接树莓派上的T。
2.串口通信是全双工的。
例:一个男孩跟一个女孩在吵架
全双工:男孩跟女孩可以互怼,不用顾忌
半双工:男孩骂女孩时,女孩闭嘴,女孩骂男孩时,男孩闭嘴。
两个人吵架要注意的两点就是语言跟语速,语言是两个人都听得懂得才行,语速也是两个人都能接受的才行。
那么对于串口通信来讲就是数据格式和波特率。数据格式包括数据位、停止位、奇偶校验位。如图:
![](https://img-blog.csdnimg.cn/img_convert/f2914d7c54feaebb1e2adc9beea864e3.png)
二、串口相关API
参考文章:树莓派wiringPi库详解
初次在树莓派使用串口通信时需要修改文件(cmdline.txt)内容
>cd /boot/
>sudo vim cmdline.txt
![](https://img-blog.csdnimg.cn/img_convert/60c6192065f14e402ffe193f2ea1abd1.png)
删除红色方框内容。
然后 sudo reboot重启。
使用串口时需包含头文件:#include<wiringSerial.h>
![](https://img-blog.csdnimg.cn/img_convert/190a088eee6d3bce755c5f6062cbd3d8.png)
![](https://img-blog.csdnimg.cn/img_convert/cd72c5f1d4a0735294841a5bd6573fc5.png)
串口通信的相关的API,记住在linux底下一切皆文件,所以串口在linux看来也是一个文件,所以serialOpen函数返回的是一个文件描述符,这个文件描述符就是串口的意思。
三、串口代码例子
#include<wiringSerial.h>
#include<wiringPi.h>
#include<stdio.h>
int main()
{
int fd;
int cmd;
wiringPiSetup();//硬件初始化
fd = serialOpen("/dev/ttyAMA0",9600);//打开串口
while(1)
{
while(serialDataAvail(fd) != -1){//这个函数不等于-1代表接收到数据
cmd = serialGetchar(fd);
//printf("cmd is %d\r\n",cmd);
if(cmd == '1'){
serialPuts(fd,"kaideng\r\n");
}
if(cmd == '2'){
serialPuts(fd,"guandeng\r\n");
}
if(cmd == '3'){
serialPuts(fd,"ok\r\n");
}
}
//serialPutchar(fd,'c');//发送一个字符
//serialPuts(fd,"QianRuShKaiFai\r\n");//发送字符串
//delayMicroseconds(1000000);//延时函数us为单位
}
return 0;
}
学习笔记,仅供参考