AnsweredAssumed Answered

HAL_UART_Transmit_DMA() only work one time

Question asked by HanCheng Liu on Oct 22, 2017

I want to use  " HAL_UART_Transmit_DMA(); " to send data in DMA mode like this :

    char str_Hello[]="Hello\n";
    HAL_UART_Transmit_DMA(&huart1,(unsigned char *)str_Hello,strlen(str_Hello));
    HAL_Delay(500);

But transimit function only work one time(DMA is working under normal mode).

I found these in the definition of function "HAL_UART_Transmit_DMA()" in "stm32f1xx_hal_uart.c"

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
{
  uint32_t *tmp;

  /* Check that a Tx process is not already ongoing */
  if(huart->gState == HAL_UART_STATE_READY)

{

......

huart->gState = HAL_UART_STATE_BUSY_TX;

.....

}

}

So, I try to manually set "huart->gState" in my while loop like this

  char str_Hello[]="Hello\n";
  HAL_UART_Transmit_DMA(&huart1,(unsigned char *)str_Hello,strlen(str_Hello));
  HAL_Delay(500);

  huart1.gState = HAL_UART_STATE_READY

Although the problem was solved , but i think that it may not the correct way to solve this issue.

Anyone know how to handle it?

Thanks.

Outcomes