串口接收延时问题
求助一个问题,简单描述一下,我现在通过串口1发送一个数据出去,同时开启定时器,在五分钟内如果有数据返回,表示通讯成功,如果没有表示通讯失败,现在有一个疑问,我如果开启定时器以后,单片机是执行定时器去了,还是一直循环接收?这个需要你将代码具体贴出来分析,要不然你画流程图出来也行
因为有很多细节没有交代清楚 思路没问题的,配置好定时器之后,就可以不用在while循环里面管定时器的事情了,然后定时器中断到来的时候你再做处理就行 用中断接收,然后检测是否收到应答数据,再做超时判断。 如果别的事情都不干,一直等待接收也可以。
或者,你可以不用循环中等待。可以定期或不定期去查询是否接收到数据。
当然,中断也是可以的。 去执行什么取决于你的程序是怎么样的逻辑,你可以while(1)里定周期的去查询串口和定时器状态,如果使用中断的话这部分逻辑也可以放到中断处理函数里来处理。
用时间片轮大法 stm1024 发表于 2018-11-20 09:06
思路没问题的,配置好定时器之后,就可以不用在while循环里面管定时器的事情了,然后定时器中断到来的时候 ...
我现在设置了一个500ms的定时器,如果不管这个定时器的话,500ms就会中断一次,计数器加1,等计数器到达我需要的时间后,执行跳出循环,同时停止失能定时器,清除中断标记,如果在我规定的时间内有数据返回,显示返回的数据并失能定时器,清除中断标记。等待下一次按键发送数据,发送完数据后开启定时器 安 发表于 2018-11-20 09:09
用中断接收,然后检测是否收到应答数据,再做超时判断。
因为我接收数据是要在5分钟内的任意时刻都可以,不能用中断的,需要一直检查有没有收到数据 数据读取不及时,会有溢出的风险,所以还是用中断接收放入缓冲区,其他地方再对缓冲区进行判断处理。如果能够保证数据很快读取走,可以做逻辑处理
if(systick-a<300*1000)
{
//判断串口接收标志位
//接收数据,并处理
}