ZHL學習筆記
STM32系列USART中斷接受注意事項 之 USART_IT_ORE
- USART_IT_ORE含義:接收溢出,尚未處理上一拍就迎來了下一拍資料;
- USART_IT_ORE使能:該中斷使能是在USART_IT_RXNE使能同時有效;
-
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;
}
}