cancel
Showing results for 
Search instead for 
Did you mean: 

HAL_UART_Transmit_DMA(), only works with inline defined string and fails with globaly defined array

zhausq
Associate III

why does this work:

HAL_UART_Transmit_DMA(&huart6, (uint8_t *)"stm32\n", 6); // works and sends data

and this doesnt:

ALIGN_32BYTES (uint8_t aTxBuffer[]) = "stm32\n";

HAL_UART_Transmit_DMA(&huart6, (uint8_t *)aTxBuffer, 6) // doesnt send any data

what am i missing?

1 ACCEPTED SOLUTION

Accepted Solutions
zhausq
Associate III

solved! appreciate the quick responses, thank you!

for anyone whose reading this and having the same issue: this is what you're looking for https://community.st.com/s/article/FAQ-DMA-is-not-working-on-STM32H7-devices

View solution in original post

4 REPLIES 4
Piranha
Chief II

Most likely aTxBuffer is located in DTCM, to which only the MDMA has access in H7 series. Take a look at AN4891 figure 1.

hs2
Senior

DMA buffers must be located in (the appropriate) RAM. Fixed strings or other constant data are usually stored in ROM (flash).

You should verify/ensure that the data is provided on stack / RAM.

zhausq
Associate III

solved! appreciate the quick responses, thank you!

for anyone whose reading this and having the same issue: this is what you're looking for https://community.st.com/s/article/FAQ-DMA-is-not-working-on-STM32H7-devices

Glad to know that your question is answered. Please mark the article as helpful in this case.

Thanks

Amel

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.