HAL_UART_Transmit_DMA 只能发送1次 HAL_UART_STATE_BUSY_TX?
时间: 2023-09-10 15:14:57 浏览: 411
不准确,引用中提到,如果串口处于BUSY状态,HAL_UART_Transmit_DMA()函数不会进入发送程序,并且会直接返回HAL_BUSY。这意味着函数不能连续运行。而在引用和中提到,HAL_UART_Transmit_DMA()函数在发送之前会检查串口句柄的状态位gState,只有当gState为HAL_UART_STATE_READY时,函数才会正常进行发送。因此,HAL_UART_Transmit_DMA()函数可以多次发送数据,但是需要在每次发送之前确保串口处于空闲状态。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关问题
HAL_UART_Transmit_DMA 只能发送1次 HART_STATE_BUSY_TX?
HAL_UART_Transmit_DMA函数只能发送一次数据并返回状态码HAL_UART_STATE_BUSY_TX。此函数用于通过DMA发送数据,一旦数据发送完成,就会返回状态码HAL_UART_STATE_READY。如果需要连续发送数据,可以在发送完成的回调函数HAL_UART_TxCpltCallback中再次调用HAL_UART_Transmit_DMA函数来发送下一批数据。所以,HAL_UART_Transmit_DMA函数只能发送一次数据,如果需要连续发送,需要在回调函数中进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
HAL_UART_Transmit_DMA 显示HAL_UART_STATE_BUSY_TX
当调用HAL_UART_Transmit_DMA函数时,gState会被更改为HAL_UART_STATE_BUSY_TX状态,表示串口正在发送数据。 这个状态位会一直保持为HAL_UART_STATE_BUSY_TX,直到发送完成。 为了搞清楚gState保持不动的原因,我查看了代码并了解了状态位的重置机制。当执行HAL_UART_Transmit_DMA函数时,gState会被更改为HAL_UART_STATE_BUSY_TX状态。发送成功后,将触发串口中断,执行USART1_IRQHandler函数,然后再调用HAL_UART_IRQHandler函数。在HAL_UART_IRQHandler函数中,会调用UART_EndTransmit_IT函数,并在此函数中将标志位gState重置为HAL_UART_STATE_READY。只有在gState被重置为HAL_UART_STATE_READY的基础上,DMA发送函数HAL_UART_Transmit_DMA才能继续执行。 因此,如果在发送过程中gState保持为HAL_UART_STATE_BUSY_TX,那么HAL_UART_Transmit_DMA函数将无法连续运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文