解决stm8会卡在串口中断的问题

原因

串口进入了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();
}

你可能感兴趣的:(嵌入式软件)