项目中要用到串口的DMA功能,但几天调试都不成功!
项目是用STM32CubeMX V5.4.0自动生成,MDK 5.27编译,运行 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中断后只接收到最后一字符)
故障造成原因:STM32 HAL库的DMA时钟配置跟串口,dma通道配置在两个文件里,结果先进行了串口配置,DMA通道配置,然后才是把DMA时钟打开了。