STM32
直播中

江左盟

8年用户 1408经验值
擅长:电源/新能源
私信 关注
[问答]

STM32F0 HAL库的串口中断调用顺序是什么样的?

STM32F0 HAL库的串口中断调用顺序是什么样的?

回帖(1)

陈英

2021-12-8 10:18:16

首先在主函数里执行发送中断或者接收中断函数:


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

更多回帖

发帖
×
20
完善资料,
赚取积分