ST意法半导体
直播中

算一挂

8年用户 875经验值
私信 关注
[问答]

HAL_UART_Transmit_DMA传输问题求解

目前我正在研究 UART DMA,在通过 DMA UART 传输数据后遇到了问题。在 1 次成功的数据传输后,状态标志保持为 BUSY。经过搜索,我最终找到了这个线程,这解决了问题。
线
  • static
  • void
  • UART_DMATransmitCplt(DMA_HandleTypeDef *hdma)
  • {
  • UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
  • /* DMA Normal mode*/
  • if
  • ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) )
  • {
  • huart->TxXferCount = 0;
  • /* Disable the DMA transfer for transmit request by setting the DMAT bit
  • in the UART CR3 register */
  • CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);
  • /* Enable the UART Transmit Complete Interrupt */
  • __HAL_UART_ENABLE_IT(huart, UART_IT_TC);
  • huart->State=HAL_UART_STATE_READY;
  • //<--- i add this line to solve the //problem
  • }
  • /* DMA Circular mode */
  • else
  • {
  • HAL_UART_TxCpltCallback(huart);
  • }
  • }
代码片段中的第 31 行
但是,这是一个很好的解决方案(并且应该在 STM32f3 库中实现)还是我遗漏了导致只有 1 次成功传输的问题的东西?






更多回帖

发帖
×
20
完善资料,
赚取积分