首先在主函数里执行发送中断或者接收中断函数:
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)函数。
首先在主函数里执行发送中断或者接收中断函数:
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)函数。
举报