Skip to main content
zhausq
Associate III
Feb 9, 2020 11:24 AM UTC
Solved

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

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?

This topic has been closed for replies.
zhausq
zhausqBest answer
Associate III
Feb 9, 2020 12:36 PM UTC

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

4 replies

Piranha
Principal III
Feb 9, 2020 11:49 AM UTC

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
Visitor II
Feb 9, 2020 11:51 AM UTC

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
zhausqAuthorBest answer
Associate III
Feb 9, 2020 12:36 PM UTC

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

Amel NASRI
ST Technical Moderator
Feb 24, 2020 1:30 PM UTC

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 "Best Answer" on the reply which solved your issue or answered your question.