2017-10-22 07:13 AM
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.
#uart #dma #hal #stm32f12018-08-10 09:32 AM
Sorry, bumping old zombie unanswered threads off my feed
2024-01-11 05:52 AM
It's because you forgot to enable the interrupt of the UART that you work with in Cubemx.
2024-01-11 12:00 PM - edited 2024-01-11 12:02 PM
Did you assign a DMA channel to the Tx?
Edit: Dang this is an old thread, lol.