通过树莓派3b使用wiringPi接收串口数据,并对帧头帧尾进行判断,解析出符合帧协议的数据。
1. 帧头、帧尾、帧长度定义
我们在这里定义串口数据的帧头为 0x3A 0x3B,帧尾为 0x7E 0x7F,一帧最大的长度为 10个字节。
帧头帧尾格式可自行更改。
// 最大帧长度
#define MaxFrameLength 10 // 对最大帧长度加以限定,防止接收到过长的帧数据
// 完整的帧头,2个字节
#define Frame_Header1 0x3A // 串口接收消息包的帧头的第1个字节
#define Frame_Header2 0x3B // 串口接收消息包的帧头的第2个字节
// 完整的帧尾,2个字节
#define Frame_Tail1 0x7E // 串口接收消息包的帧尾的第1个字节
#define Frame_Tail2 0x7F // 串口接收消息包的帧尾的第2个字节
2. 用户处理代码
接收到符合帧协议的数据,用户处理在这里定义。
其中 /* */ 分割的地方为用户处理代码。
我写的是将接收到的数据发回去,并重新等待接收下一帧。用户可根据需求自行更改。
/* 用户处理代码 */
/* 将接收到符合帧定义的帧,原路发送回去 */
int i = 0;
for (i = 0; i < (tnum + 1); i++)
{
serialPutchar(hs1, chrtmp[i]); // 通过串口发送字节
}
/* 处理完用户代码,重新接收计数 */
tnum = 0;
3. 串口选择、波特率
这里对自己使用的串口进行更改,我使用的是USB串口,波特率115200,CP2102免驱。

本文介绍如何在树莓派3B上使用wiringPi库接收并解析串口数据,详细描述了帧头帧尾的定义、用户处理代码、串口选择与波特率设置,以及运行现象和串口通信应用实例。

809

被折叠的 条评论
为什么被折叠?



