原因
串口进入了OR(过载错误)中断
解决方法
必须添加if(UART1_GetITStatus(UART1_IT_RXNE )!= RESET)
,若不添加,会导致UART1->DR
被异常读取,不断进入中断处理函数
若UART的
RXNE
状态位已经被置1
,串口又收到数据,将会进入OR(过载错误)中断,需要先读取UART_SR
,再读取UART_DR
才可把OR
位中断状态清零,调用UART1_GetITStatus(UART1_IT_RXNE )
即是读取UART_SR
在调用UART1_ReceiveData8()
读取了UART1->DR
后即可清除中断UART1_IT_RXNE
标志位
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
if(UART1_GetITStatus(UART1_IT_RXNE )!= RESET)
UART1_ReceiveData8();
}