在使用这两种函数之前先看看中断有没有打开。
HAL_UART_Transmit_IT:
无法连续使用。例如HAL_UART_Transmit_IT(...); HAL_UART_Transmit_IT(...);,一般都是只有第二条发出去了,至于为什么也不想细查。
总之HAL_UART_Transmit_IT在连续使用时要在后面加上while(huart1.gState != HAL_UART_STATE_READY);,或者使用while(HAL_UART_Transmit_IT(&huart1, &cChar, 1) != HAL_OK);,这两种方法不是一定起效的,不行就换着用。这两种都有人用,我推荐优先使用第一种,第二种不是每次都奏效,我嫌第一种字多才用第二种。
HAL_UART_Receive_IT:
直接自定义一个HAL_UART_RxCpltCallback函数,这个函数原本是弱函数,自定义后会将原来的覆盖掉。这个函数是作为函数指针被串口中断里的一个HAL开头的函数调用
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);
}
}
串口在初始化后就执行一遍HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);,否则中断不会开启,也就无法进入接收中断
不要把同一个外设的阻塞式和中断式的HAL函数同时使用,否则真的会阻塞。除非这两个函数不会同时使用,但在有操作系统的情况下则必须遵守。
这应该是这两个函数比较正式的用法了。