stm32stm32f4nucleocubemxstm32cubeide

Failing to receive data from UART in DMA mode


I am trying to receive 8 bytes from my pc on my NUCLEO F446RE stm32 board. Transmitting to the pc works. The problem is, I am unable to receive data using DMA. I saw an example with almost the same code and it has worked for the person. If I use the interrupt mode (just change HAL_UART_Receive_DMA to HAL_UART_Receive_IT, it does work and the RX Complete callback is being called.

Here is the complete main.c. DMA is in circular mode.

main.c

https://pastebin.com/1W4BCjxB


Solution

  • I got it solved, it is actually ridiculous.

    So, this is part of the code that CubeMX generates:

    MX_GPIO_Init();
    MX_USART2_UART_Init();
    MX_DMA_Init();
    

    If I order it as follows:

    MX_GPIO_Init();
    MX_DMA_Init();
    MX_USART2_UART_Init();
    

    It works!!!