概述
在用单片机接收串口数据时,当接收数据不定长时 ,需要判断出何时接收完成,之前我写的一个文章是在QT中处理如何判断接收完成的,在单片机中的思路其实是一样的,只不过在QT中实例化了一个定时器,在未超时接收到数据时再重新定时,到接收完成不再接收时,达到超时时间,之后去处理相关的数据包,可以参考这个链接:
https://blog.csdn.net/snowmcu20132514/article/details/100739937。
在单片机中,我在STM32的单片机中这样做,有点问题,因为我用的是库开发,我并未找到怎么重新加载计数器的计数值。因此,我将定时的计数更新中断设置成了1ms,我的数据帧的长度是10个字节,115200的波特率,接收完成大概在1ms,我把超时时间设置为5ms,5ms没更新超时就认为接收完成了,之后就可以去解析数据包,从数据包中的数据正确的数据帧。主要是两个部分:
其一:串口中断,设置接收一个字节就进入中断一次,如果进入中断就重新设置超时时间为5ms,这样只要进入接收中断,那么超时时间就一直为5ms,并将接收的数据放入缓存,可以是数据或者队列,并设置一个全局变量设置串口在接收状态;
其二 :定时器更新中断,设置为1ms更新一次,如果串口在接收状态,每次将超时时间递减一,如果递减到0,说明已经超时,认为串口接收完成了,将前面设置的的全局变量设置为非接收状态,此时,就可以将这个数据包拿去解析了。
最后
以上就是迷你电话为你收集整理的使用超时检测处理单片机串口数据接收的全部内容,希望文章能够帮你解决使用超时检测处理单片机串口数据接收所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复