【求助】关于232通信协议用数组判断头尾校验帧,求一个完整有详细注解的例程,真的有困难!

2019-08-17 07:29发布

找了很久资料,真的难学,感觉要炸了
希望原子哥能够加上 如何自制串口协议的教程!真的很有必要,不搞协议的232等于没搞,现在随便什么通信都要有协议保证稳定
真的学了好久 还没搞懂!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
EDA3rd
1楼-- · 2019-08-19 02:13
都有帧尾了,为什么要用时间来判断帧结束?时间是用来判断超时的,超过一定时间丢弃当前帧,当然,如果你硬要设计成永久等待帧尾也行,不过实际开发中很少这么做,至于超时时间,用计数就搞定了。

论坛都有类似的帖子了:
http://www.openedv.com/posts/list/53066.htm
yinqirui9
2楼-- · 2019-08-19 07:12
enan 发表于 2017-6-11 12:45
不是上位机间隔10ms发送数据,你这完全是崭新的新手啊

是说的这个10ms是两帧数据之间的最小间隔10ms ...

那打开定时器是 用定时中断 来扫描吗?
enan
3楼-- · 2019-08-19 09:35
yinqirui9 发表于 2017-6-11 13:00
那打开定时器是 用定时中断 来扫描吗?

是滴,当收到第一个字节打开一个定时器,之后每次收到一个字节重新手动装填定时器,如果发生中断了就是表示接收完成了。
不过一般不会用硬件定时器来做,如果有8个串口要开8个定时器,一般自己写个软件定时器
enan
4楼-- · 2019-08-19 14:38
 精彩回答 2  元偷偷看……
一个爱做梦的人
5楼-- · 2019-08-19 19:20
自己定通信协议啊,比如:
序号        字段名称        位宽        字段功能
0        起始标志        1        约定为fa
1        长度                1      表示操作命令+内容的长度
2        操作命令         1        00h(设置) / 01h(获取) /02h(返回)
3        内容                n       
4        校验字节        1        除字头字尾外的所有字节ODD校验
5        结束标志位        1        约定为0xFB


这样在串口中断里收到头后,开始计数,等收到尾字节后判断(计数-4)和长度是否相等,判断自己计算的校验和校验字节是否相等,然后做相应处理,是丢弃,继续接受,还是保存
EDA3rd
6楼-- · 2019-08-19 21:41
一个爱做梦的人 发表于 2017-6-11 13:12
自己定通信协议啊,比如:
序号        字段名称        位宽        字段功能
0        起始标志        1        约定为fa

同意楼上,帧头+命令+数据+帧尾+校验和,这是标准做法。
enan提出的超时判断帧结束,个人感觉不如帧尾+校验的判断方法实用。
用帧间隔来判断帧结束,又如何能保证数据完整性呢?

一周热门 更多>