Skip to main content
zhausq
Associate III
February 9, 2020
Solved

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

  • February 9, 2020
  • 4 replies
  • 1185 views

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.
Best answer by zhausq

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
February 9, 2020

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
February 9, 2020

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
February 9, 2020

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
February 24, 2020

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.