moreking 发表于 2015-7-2 09:48:58

USART查询方式接收数据时RXNE位存在延时的疑问

用STM32F103CB,USART接收数据采用查询方式,判断寄存器USART_SR寄存器的RXNE位为1时读数据,接收单个数据时正常,但是连续来两个数据时就不行了。用示波器看波形发现在接收到一个数据后会再延迟一个数据的时间RXNE位才会置1,刚好错过了后面一个数据(接收一个数据时也有延时,只是后面没有跟数据,不影响),而ORE位也没有置1.我改用中断接收就没问题,示波器测波形可知接收完一个数据后立即就进入了中断。
按理查询RXNE位不应该有一个数据的延迟(延迟时间随波特率变化而变化,确认是比一个数据时间多一点点),USART1和USART3都试过,都一样。有谁知道这是什么原因吗?有没有解决方法?

发表于 2015-7-2 10:36:12

应该是没有及时读取走数据导致丢失。建议还是用中断方式读取,这样减少丢失字符。

moreking 发表于 2015-7-2 11:00:01

一直在判断RXNE位,变1立即读取数据,不存在没及时读取数据的问题。问题是RXNE位延时了一个数据(10bit)的时间后才变1

ningzb 发表于 2015-7-3 09:27:31

建议你接收数据用中断,STM32系列的接受没有FIFO,查询方式,查询周期长的话,会丢数据,实际应用,稍微复杂一点的应用,都无法用查询实现
页: [1]
查看完整版本: USART查询方式接收数据时RXNE位存在延时的疑问