HAL Library 32- DMA extension for USART on STM32Fxxx

USART DMA library allows you to send data via USART in non-blocking mode. It is designed only for TX mode, because my USART library already uses RX interrupts and DMA RX is not necessary for that purpose.

This library is extension for my USART library. It requires USART library as basic to make this to work.


Read more about HAL libraries


  • USART extension for non-blocking TX mode
  • Supports all U(S)ART peripherals on STM32F4 and STM32F7 device
  • Supports TX done interrupt processing
  • Allows you to start DMA transmissing and wait till done
    • This is handy when working with RTOS for example and when you have to wait transmissing


  • HAL
  • TM
    • STM32Fxxx HAL
    • defines.h configuration file
    • TM DMA
    • TM USART

Pinout, functions and enumerations

Pinout, list of functions and its enumerations can be found on USART library API and USART DMA library API.


USART DMA example is available on my Github account.


Owner of this site. Also electronic enthusiasts, web developer, 3D printer fan, handball player and more. Big fan of STM32F4 devices. In anticipation of the new Discovery board for STM32F7 lines.

You may also like...

Read before commenting!

Before you make a new comment, make sure you agree with things listed below:

  • - Read post to make sure if it is already posted what you are asking for,
  • - Make sure you have the latest version of libraries used in your project,
  • - Make a clean and grammatically correct written message,
  • - Report as many details as possible, including what have you done so far,
  • - Do NOT post any code here. Use Pastebin,
  • - Do NOT post any error codes here. Use Pastebin,
  • - Specify STM32Fxxx family and used Discovery/EVAL/Nucleo or custom made board,
  • - Make sure your clock is set correct for PLL,
  • - If you are using my HAL drivers, please check this post how to start.
Comment will be deleted on breaking these rules without notification!
  • Evgeni

    Correct define in file tm_stm32f4_usart_dma.h for USART6 (change DMA1_Stream6 to DMA2_Stream6)
    /* Default DMA Stream and Channel for USART6 */
    #ifndef USART6_DMA_TX_STREAM
    #define USART6_DMA_TX_STREAM DMA2_Stream6
    #define USART6_DMA_TX_CHANNEL DMA_Channel_5

    • I’ve correct mistake. Was actually ok in comments but wrong in implementation.
      Thanks for notify this.