用STM32F103CB,USART接收数据采用查询方式,判断寄存器USART_SR寄存器的RXNE位为1时读数据,接收单个数据时正常,但是连续来两个数据时就不行了。用示波器看波形发现在接收到一个数据后会再延迟一个数据的时间RXNE位才会置1,刚好错过了后面一个数据(接收一个数据时也有延时,只是后面没有跟数据,不影响),而ORE位也没有置1.我改用中断接收就没问题,示波器测波形可知接收完一个数据后立即就进入了中断。 按理查询RXNE位不应该有一个数据的延迟(延迟时间随波特率变化而变化,确认是比一个数据时间多一点点),USART1和USART3都试过,都一样。有谁知道这是什么原因吗?有没有解决方法? |
应该是没有及时读取走数据导致丢失。建议还是用中断方式读取,这样减少丢失字符。 |
一直在判断RXNE位,变1立即读取数据,不存在没及时读取数据的问题。问题是RXNE位延时了一个数据(10bit)的时间后才变1 |
建议你接收数据用中断,STM32系列的接受没有FIFO,查询方式,查询周期长的话,会丢数据,实际应用,稍微复杂一点的应用,都无法用查询实现 |