串口数据帧同步

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

介绍

串口是十分常用的一个资源, 每次需要进行处理串口数据, 但是 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不存在命令之类的解析

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值