在STM32F103中,使能接收中断也就使能了溢出中断,见
http://mp.weixin.qq.com/s/Qq4x0EmC5wc6RXf1JWbm_Q
当发生溢出时,如果不去读一下接收寄存器RDR,将无法清除溢出错误,串口将不能再接收数据。
想必ST也知道这是个设计bug,在STM32F0系列中,这个设计bug依然存在,但ST设计了另一个机制来避免这个bug:用户可以在配置串口时禁能溢出检测(UART寄存器的CR3有个OVRDIS位,设置为1时禁止溢出检测)!而在STM32F1系列中,UART是没有这个OVRDIS位的。
在不需要检测溢出的场合,直接禁止溢出检测就可以避免溢出导致串口不工作。 |