HAL_UART_Receive_DMA 只能接收最后一个数据问题解决办法

时间:2024-03-28 11:34:45

项目中要用到串口的DMA功能,但几天调试都不成功!

项目是用STM32CubeMX V5.4.0自动生成,MDK 5.27编译,运行 HAL_UART_Receive_DMA 只能接收最后一个数据。

HAL_UART_Receive_DMA 只能接收最后一个数据问题解决办法

HAL_UART_Receive_DMA 只能接收最后一个数据问题解决办法HAL_UART_Receive_DMA 只能接收最后一个数据问题解决办法

HAL_UART_Receive_DMA 只能接收最后一个数据问题解决办法

 

自动生成的程序代码后,初始化顺序要调整一下。

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  //MX_USART2_UART_Init();//这条关闭
  MX_DMA_Init();

  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
    
  MX_USART2_UART_Init();    //CubeMX自动生成的初始化顺序有问题,现将前面关闭了,最后串口初始化。
    //(原DMA故障现象是DMA中断后只接收到最后一字符)

HAL_UART_Receive_DMA 只能接收最后一个数据问题解决办法

故障造成原因:STM32 HAL库的DMA时钟配置跟串口,dma通道配置在两个文件里,结果先进行了串口配置,DMA通道配置,然后才是把DMA时钟打开了。