STM32的USART中断接收死机问题

2019-08-19 16:38发布

用STM32的串口中断接收数据流时,偶尔会出现死机现象 ,查找原因和资料发现,开启串口中断接收 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE)  时,同时也打开了串口ORE中断。一般大家都是在中断服务程序中判断USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)时来接收数据,这样会在接收大量数据流时,会出现死机现象,就是一直处于串口中断状态。后把串口接收中断服务程序改成如下程序,成功解决死机现象

void USART2_IRQHandler(void)  
{
    if ((USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)||USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
    {
          USART_ClearITPendingBit(USART2, USART_FLAG_ORE);
          USART_ClearITPendingBit(USART2,USART_IT_ORE); //清除中断标志

          buff =USART_ReceiveData(USART2); //读取接收到的数据

         .................
    
    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。