采用Cube+STM32+ADC+DMA进行多通道数据采集,有两个问题:
一、CubeMX配置无法关闭DMA的中断问题
如上图,DMA2中断是灰色,无法取消选择,导致生成的代码会进中断,为了解决这个问题可以在生成的代码中加入该指令即可解决:
HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn); //手动关闭Cube的DMA中断
二、Cube+STM32+ADC+DMA生成的代码运行无法进入中断并且ADC无法采集(ADC采集的值没有更新)
为了解决了该问题需要将DMA初始化代码放到ADC初始化代码前面。另外串口的DMA初始化也类似,也需要将DMA的初始化放在UART初始化前面。
/* Initialize all configured peripherals */
MX_DMA_Init();
MX_GPIO_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();
MX_CAN2_Init();
MX_RTC_Init();
MX_SPI2_Init();
MX_SPI3_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_TIM8_Init();
MX_USART1_UART_Init();
MX_USART6_UART_Init();