HAL_UART_Transmit_DMA 只能发送1次
时间: 2023-10-06 14:11:20 浏览: 246
HAL_UART_Transmit_DMA函数在中断中只能发送一次的原因可能是因为在每次发送完成后,需要重新配置DMA传输相关的寄存器和状态。为了解决这个问题,可以参考以下几个引用内容中的建议:
引用中提到,HAL_UART_Transmit_DMA函数在主函数中没有此现象,这可能是因为在主函数中没有中断的干扰。因此,可以考虑在中断处理函数中重新配置DMA和UART的状态。
引用中建议,在HAL_UART_Transmit_DMA函数之前加上extern DMA_HandleTypeDef hdma_usart1_tx。这样做可以确保在中断处理函数中可以访问到DMA句柄hdma_usart1_tx。
引用中给出了一种解决方法,即在HAL_UART_Transmit_DMA函数的最后添加以下代码:
huart->gState = HAL_UART_STATE_READY;
hdma_usart1_tx.State = HAL_DMA_STATE_READY;
__HAL_UNLOCK(&hdma_usart1_tx);
这样可以将UART和DMA的状态重新设置为就绪状态,以便下次传输。
综上所述,为了解决HAL_UART_Transmit_DMA只能发送一次的问题,可以尝试在中断处理函数中重新配置DMA和UART的状态,以及在HAL_UART_Transmit_DMA函数的最后添加代码来重新设置UART和DMA的状态。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文