STM32 串口空闲中断的问题

2019-12-18 18:47发布

目前在做一款无线模块通信的设备,需要使用AT指令进行模块的初始化和数据的传输,在网上看到有用串口空闲中断来判断一帧数据,然后对这一帧数据进行处理;但是我有一个疑问,如果设置了模块有一个周期性的数据需要发送,然后我这边也会有AT指令发出,有没有可能数据会同时在一帧里面让STM32接收到数据,如果这样,那我就会漏掉一组数据,不知道有没有人测试过??或者有没有什么好的方式!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
venus5712
1楼-- · 2019-12-20 07:48
发送从 TX 线走 ,   接收 从RX 线走.
全双工 同时收发.
fuu
2楼-- · 2019-12-20 11:53
楼主的意思是模块发了连续的两包数据,stm当成一包数据接收了,软件只处理一包数据,所有说会漏掉一包没处理。
解决方法是每收到一包数据,搜索 的位置是否在包尾,如果是表示只收到一包,如果不是则表示收到了两包以上,以 符号为界手动分包再处理。(一般AT指令以 做结尾标识)
nzk123
3楼-- · 2019-12-20 14:21
明白楼主意思,就是接收的数据有粘包,两包回复合在了一起了。首先,用空闲中断来判断一包结束这种方法并不可靠,用过很多设备,回复过来的数据根本就没法保证完全不断,你想想,设备总不可能只有1个发送中断吧,如果有多个中断,而且发送中断优先级不是最高,就有可能一包数据没有发完就产生了空闲。其次,最好的方法就是接收过来的数据按照空闲判断先放在接收缓存,然后再从接收缓存中一个字节一个字节取出解析,解析过程中必然会有帧头帧尾,这样就能保证一包数据不会分成两包而不被识别,同样也能解决两包数据粘包而不能被分开的情况。
zchong
4楼-- · 2019-12-20 20:07
 精彩回答 2  元偷偷看……
SC-Electronic
5楼-- · 2019-12-20 20:43
串口一般不做总线用呀,兄弟。你想2组数据在一条串口线上传输,你肯定要带总线冲突的检测,不然数据肯定乱七八糟的。
ywlzh
6楼-- · 2019-12-20 23:48
讲道理 模块有两组数据要发给串口,中间一般不会连续发,帧结束标志,隔一段时间再发之后的数据,队列模式。

如果连续发了,那必须要在数据里能判断出哪些数据是一包,哪些数据是另一包。

这个时候 楼主就直接判断吧,也别用空闲中断了。

一周热门 更多>