天天看點

STM32系列 USART中斷接收 注意事項 (USART_IT_ORE)

ZHL學習筆記

STM32系列USART中斷接受注意事項 之 USART_IT_ORE

  1. USART_IT_ORE含義:接收溢出,尚未處理上一拍就迎來了下一拍資料;
  2. USART_IT_ORE使能:該中斷使能是在USART_IT_RXNE使能同時有效;
  3. USART_IT_ORE檢測:

    1)未開啟USART_IT_ERR時,隻能由 USART_GetFlagStatus(USARTx,USART_Flag_ORE) 檢測到;

    2)在開啟USART_IT_ERR後,才能被 USART_GetITStatus(USARTx,USART_IT_ORE) 檢測到;

正确的USART接收中斷函數使用方法:

void USARTx_IRQHandler(void)
{
  uint8_t RxData = 0;
  if(USART_GetITStatus(USARTx,USART_IT_RXNE)!=Bit_RESET) //檢查 USART 是否發生中斷
  {
      USART_ClearITPendingBit(USARTx,USART_IT_RXNE); // 清中斷标志
      RxData = USART_ReceiveData(USARTx);
      // save RxData at here.
  }
  if(USART_GetFlagStatus(USARTx,USART_FLAG_ORE) == SET) // 檢查 ORE 标志
  {
      USART_ClearFlag(USARTx,USART_FLAG_ORE);
      USART_ReceiveData(USARTx);
  }
}
           

STM官方給出的範例沒有較長的描述此問題:

void USARTx_IRQHandler(void)
{
  uint8_t RxData = 0;
  USART_ClearFlag(USARTx,USART_FLAG_TC ); //清除中斷标志
  if(USART_GetITStatus(USARTx,USART_IT_RXNE)!=Bit_RESET)//檢查指定的usart是否發生了中斷
  {
     RxData = USART_ReceiveData(USARTx);
     // do something at here;
  }
}