hhhhhhhaa 发表于 2018-11-20 15:01
因为我接收数据是要在5分钟内的任意时刻都可以,不能用中断的,需要一直检查有没有收到数据 ...
可能我没表达清楚。
1.串口发送数据前,定时器配置好,但是未使能。
2.串口发送数据后,定时器使能,开启五分钟倒计时
3.while循环里面检查串口数据,如果:
3.1 5分钟内收到数据,则认为未超时,失能定时器,然后主循环做有应答的逻辑
3.2 5分钟后未收到数据,定时器中断被触发,修改标识超时的全局变量,失能定时器,主循环中做超时无应答的逻辑
为什么一定不能用中断呢?有其他原因吗?
我觉得可以这样处理,串口1数据输出数据后, 打开定时器,串口接收要使用中断接收,不要使用循环查询方式,否则会出现丢数据现象,使用中断不影响,在规定的时间内接收到数据后,把有关接收定时器的变量清零,没有接收到数据就去判断超时处理。
stm1024 发表于 2018-11-20 15:09
可能我没表达清楚。
1.串口发送数据前,定时器配置好,但是未使能。
2.串口发送数据后,定时器使能,开启 ...
额,定时器中断后,还是会继续啊,是不是要在中断里把定时器失能啊?因为我没用过定时器,现在也是找了一个例子
安 发表于 2018-11-20 15:05
数据读取不及时,会有溢出的风险,所以还是用中断接收放入缓冲区,其他地方再对缓冲区进行判断处理。如果能 ...
大神,你说的这个太高深,我看不懂,我初学这个。。。。
TLLED 发表于 2018-11-20 16:46
我觉得可以这样处理,串口1数据输出数据后, 打开定时器,串口接收要使用中断接收,不要使用循环查询方式, ...
嗯,我就是一直在查询接收的数据,和您说的差不多
hhhhhhhaa 发表于 2018-11-20 17:10
大神,你说的这个太高深,我看不懂,我初学这个。。。。
如果串口数据不能及时读取,后面来的数据就会导致串口产生溢出错误。
stm1024 发表于 2018-11-20 15:09
可能我没表达清楚。
1.串口发送数据前,定时器配置好,但是未使能。
2.串口发送数据后,定时器使能,开启 ...
定时器是不是开启以后,如果不停止就会一直进行下去?
安 发表于 2018-11-20 17:14
如果串口数据不能及时读取,后面来的数据就会导致串口产生溢出错误。
不懂啊,比如说一直给这个串口发命令,如果中断里没有读取的话,中断标志位也就不会清除,那是不是就是会一直在中断里死循环了?死循环以后还怎么溢出啊
是会产生中断,需要清除溢出标志位和读取数据寄存器,这个手册里面都写了的。
安 发表于 2018-11-21 08:54
是会产生中断,需要清除溢出标志位和读取数据寄存器,这个手册里面都写了的。 ...
嗯,这个再手册里看到了,我其实不太懂您说的意思啊,流程没搞懂O(∩_∩)O哈哈~