在 DMA 中接收 UART 消息

Receive UART messages in DMA

我正在尝试在 STM32L432KCU 上以 DMA 模式接收消息。引脚 PA2 和 PA3 配置为 DMA 引脚。波特率为 115200,USART2 的全局中断已打开。在主函数中,我有外设的初始化:

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

,后面是开启DMA空闲接收模式和禁止半传输中断的函数:

HAL_UARTEx_ReceiveToIdle_DMA(&huart2, UART2_rxBuffer, 12);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);

我这里有回调:

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
    if(huart->Instance == USART2){
         memcpy(mainbuff, UART2_rxBuffer, Size);
         HAL_UARTEx_ReceiveToIdle_DMA(&huart2, UART2_rxBuffer, 12);
         __HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
     }
 } 

它检查是否从第二个 uart 接收到消息,然后将其复制到存储所有数据的主缓冲区中。再次启用接收并禁用半传输中断。不幸的是,当我尝试调试时,回调中的断点永远不会被击中。我也尝试显示消息。它没有用。什么可能导致此问题?

尝试更改初始化程序的顺序。

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

在使用 UART 之前需要初始化 DMA。