Skip to main content
Visitor II
February 9, 2020
Solved

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

  • February 9, 2020
  • 3 replies
  • 1145 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

    3 replies

    Graduate II
    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.

    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.

    zhausqAuthorAnswer
    Visitor II
    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

    Technical Moderator
    February 24, 2020

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

    Thanks

    Amel