STM32F0 HAL庫的串口中斷調用順序

首先在主函數裏執行發送中斷或者接收中斷函數:

HAL_UART_Receive_IT(&UartHandle, (uint8_t *)RxBuf, 1);
HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)TxBuf, 14);
      

這兩個函數主要是設置UartHandle結構體變量

當真正發生串口發送或接收中斷時,首先執行的是_it.c文件的

void USARTx_IRQHandler(void)
{
  HAL_UART_IRQHandler(&UartHandle);
}
這裏可以看到,他調用的是HAL_UART_IRQHandler(&UartHandle);這個函數

然後在這個函數裏判斷是執行接收中斷函數:UART_Receive_IT(huart); 或者是執行發送中斷函數:UART_Transmit_IT(huart); 或者是執行串口出錯中斷函數:HAL_UART_ErrorCallback(huart);

比如執行的是接收中斷函數UART_Receive_IT(huart); 這個函數會把接收到到數據保存到開始HAL_UART_Receive_IT(&UartHandle, (uint8_t *)RxBuf, 1);函數設置的緩衝區裏,保存完之後調用接收完成回調函數:HAL_UART_RxCpltCallback(huart);

 

而這個回調函數是用戶通常處理接收到的數據用的函數。執行完這個函數,一次中斷就完成了。如果已經接收完了當初HAL_UART_Receive_IT(&UartHandle, (uint8_t *)RxBuf, 1);中設定的個數的數據,就不再執行接收中斷了,如果還想接收數據,就要再次執行HAL_UART_Receive_IT(&UartHandle, (uint8_t *)RxBuf, 1)函數。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章