介绍
串口是十分常用的一个资源, 每次需要进行处理串口数据, 但是 PC 上的串口存在缓冲区机制, 导致串口跟我们在单片机中的使用方式可能有所不同,
每次拿到缓冲区数据之后,判断是否满足帧头,进而开始新的一帧数据计数存储, 最终满足一帧数据之后 将数据发送出来.
原理
我们使用自定义的存储结果 作为自己的存储结果, 一般来说在项目中使用就是帧数据长度是一致的, 我们的程序也是基于这个原理的
class SerialData
{
public:
uchar *data_; ///< 帧数据
uchar *head_; ///< 帧头数据
int dat_len_; ///< 数据帧长度
}
我们需要根据自己的协议初始化数据长度和数据帧头内容 假设我们的数据为 14 个字节 包括 一般使用串口通信的数据都是按照这种格式进行的数据发送,
[帧头] [长度] [地址] [指令] [数据] [校验]
00 01 02 03 04 05 06 07 08 09 10 11 12 13
68 0D 00 84 00 04 09 11 79 45 00 81 13 01
frame_len = 14;
data_ = new uchar[frame_len]; ///< 存储数据
head_ = new uchar[4]{
0x68,0x0D,0x00,0x84 }; ///< 旧版协议头
实际上我们确定通信协议之后,PC不存在命令之类的解析

本文介绍了如何处理PC上的串口数据,由于串口存在缓冲区机制,处理时需判断帧头开始新的一帧数据计数存储。文章阐述了基于固定长度帧数据的通信协议,包括帧头、数据长度、地址、指令、数据和校验部分,并提出在接收到帧头时开始存储数据,通过校验确保数据完整性的方法。该方法适用于串口通信数据处理,且提供了测试方案,如使用VSPD虚拟串口进行模拟测试。
最低0.47元/天 解锁文章
1809

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



