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

2019-07-21 04:50发布

最近一直在用HAL库,发现HAL库开发UART真难用,尤其是接收,只能接收固定长度的数据流,而对于不定长数据的接收却很乏力!后来研究了下原子的例程,表面上看是能接收不定长了,但是依赖于帧尾为0x0D  0x0A这种带回车换行的结尾才行。想问一下万能的坛友,有没有更好的方法,能使用HAL库按字节接收数据,解决不定长数据的接收问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
holy404290384
1楼-- · 2019-07-22 01:25
F1的话用DMA+空闲中断的比较多;
F0的话有超时中断,这个非常好使;
接收不定长的数据,判断接收数据流时什么时候结束,这个是关键,一般用超时(可用定时器来做)判断。例如Modbus协议超时时间是3.5个bit单位时间。所以说这个时间是根据协议来定的。
接收缓冲区的大小是有限的,如果数据流一直传输,超过这个长度的数据,就要做相应处理了(超过范围的数据要么是缓冲大小设计不合理,要么是别人乱发的)。
风清扬丶
2楼-- · 2019-07-22 06:35
 精彩回答 2  元偷偷看……
风清扬丶
3楼-- · 2019-07-22 08:22
问题已解决,原来在使用UART的HAL库回调函数接收时,在接收期间不能动正在接收的数据,得等到接收完成之后,要么根据接收数据的帧尾判断结束或者根据超时判断结束后,才能再去处理接收完的数据。哈哈,现在感觉UART的HAL库接收还是很好用的嘛!很省事!

一周热门 更多>