STM32F10x UART多字节接收,程序卡死

问题


STM32F10x用一个UART接收多个字节连续发送的信息的时候,单步调试能正常接收,但全速运行之后会卡在中断服务函数,接收终止。

原因


发生了接收器的溢出错误,以下是STM32F10x参考手册
STM32F10x UART多字节接收,程序卡死_第1张图片
大致意思就是:RXNE为1的时候再往输入缓冲区读入新的字节会发生溢出错误。
那RXNE什么时候为1呢?答:在输入缓冲区非空的时候。
那怎么时候才能把RXNE复位为1呢:以下摘自STM32F10x参考手册STM32F10x UART多字节接收,程序卡死_第2张图片
也就是有两种方法:一种是把输入缓冲区的数据读出来,RXNE就自动复位了,还有一种就是主动把RXNE写成0(一般不推荐)

解决

在进入中断服务函数之后尽快读取接收到的数据(一般是在判断完RXNE位之后)

你可能感兴趣的:(技术)