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)函数。

 

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