首先在主函數裏執行發送中斷或者接收中斷函數:
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)函數。