关于stm32的HAL库接收不定长数据问题!

2019-07-21 04:50发布

最近一直在用HAL库,发现HAL库开发UART真难用,尤其是接收,只能接收固定长度的数据流,而对于不定长数据的接收却很乏力!后来研究了下原子的例程,表面上看是能接收不定长了,但是依赖于帧尾为0x0D  0x0A这种带回车换行的结尾才行。想问一下万能的坛友,有没有更好的方法,能使用HAL库按字节接收数据,解决不定长数据的接收问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
sammy902583
1楼-- · 2019-07-21 08:49
1. 改自己的代码, 每次只收1个byte. 可以搭配数组储存接受到的资料, 直到某种条件发生时(如帧尾为0x0D  0x0A)再进行处理.
2. 绕过全部或部分HAL代码, 自己存取寄存器, 做出符合自己需求的动作.
edmund1234
2楼-- · 2019-07-21 11:20
IDLE, 它是利用接收数据与接收数据之间的停顿时间所产生事件, 可以产生中断
风清扬丶
3楼-- · 2019-07-21 13:40
 精彩回答 2  元偷偷看……
lvkanger
4楼-- · 2019-07-21 17:23
串口空闲中断,中断产生说明已经接收完一个完整的数据流
风清扬丶
5楼-- · 2019-07-21 20:37
lvkanger 发表于 2019-2-26 13:15
串口空闲中断,中断产生说明已经接收完一个完整的数据流

这个方法不靠谱啊。如果1包数据很大,大到UART的数据寄存器溢出,等产生空闲中断时数据依然会丢!
lvkanger
6楼-- · 2019-07-21 20:40
风清扬丶 发表于 2019-2-26 20:58
这个方法不靠谱啊。如果1包数据很大,大到UART的数据寄存器溢出,等产生空闲中断时数据依然会丢!

UART数据寄存器只能接收1个字节啊,要自己开辟一个缓冲区啊,缓冲区当然得根据你实际情况来开了,保证同时接收几包最大包不丢。一直这么用,还没出过问题。

一周热门 更多>