在hal库中uart的结构体中有一个gState全局变量用于判断是否在运行。
使用HAL_UART_Transmit_DMA函数时需要gState判断Tx操作是否正在运行,如果没有运行则gState设为忙,但是在函数结束时没有把gState设为准备好导致HAL_UART_Transmit_DMA函数只能运行一次
在HAL_UART_IRQHandler库函数中可以看到当函数结束时在UART_EndTransmit_IT函数中gState重新设为准备好
解决方法:
在不使用中断时在HAL_UART_Transmit_DMA结束后添加
huart->gState = HAL_UART_STATE_READY;
或者添加uart中断。