当前位置: 首页 > 工具软件 > transmit > 使用案例 >

HAL库的HAL_UART_Transmit_IT和HAL_UART_Receive_IT的用法

吴升
2023-12-01

在使用这两种函数之前先看看中断有没有打开。

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函数同时使用,否则真的会阻塞。除非这两个函数不会同时使用,但在有操作系统的情况下则必须遵守。

这应该是这两个函数比较正式的用法了。

 类似资料: