使用超时检测处理单片机串口数据接收

在用单片机接收串口数据时,当接收数据不定长时 ,需要判断出何时接收完成,之前我写的一个文章是在QT中处理如何判断接收完成的,在单片机中的思路其实是一样的,只不过在QT中实例化了一个定时器,在未超时接收到数据时再重新定时,到接收完成不再接收时,达到超时时间,之后去处理相关的数据包,可以参考这个链接:
https://blog.csdn.net/snowmcu20132514/article/details/100739937。
在单片机中,我在STM32的单片机中这样做,有点问题,因为我用的是库开发,我并未找到怎么重新加载计数器的计数值。因此,我将定时的计数更新中断设置成了1ms,我的数据帧的长度是10个字节,115200的波特率,接收完成大概在1ms,我把超时时间设置为5ms,5ms没更新超时就认为接收完成了,之后就可以去解析数据包,从数据包中的数据正确的数据帧。主要是两个部分:
其一:串口中断,设置接收一个字节就进入中断一次,如果进入中断就重新设置超时时间为5ms,这样只要进入接收中断,那么超时时间就一直为5ms,并将接收的数据放入缓存,可以是数据或者队列,并设置一个全局变量设置串口在接收状态;
其二 :定时器更新中断,设置为1ms更新一次,如果串口在接收状态,每次将超时时间递减一,如果递减到0,说明已经超时,认为串口接收完成了,将前面设置的的全局变量设置为非接收状态,此时,就可以将这个数据包拿去解析了。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值