野火的指南者,使用STM32CubeMX配置DMA进行ADC电压采集的例程。生成代码之后不能通过串口将采集到的数据发送到串口调试助手。
生成代码后再手动添加的仅有fputc等串口调试辅助代码,以及函数
HAL_ADC_Start_DMA()
该函数用于开启ADC的DMA传输。
关于MX_ADC1_Init
与HAL_ADC_MspInit
的关系
生成的MX_ADC1_Init
函数中HAL_ADC_Init
会调用HAL_ADC_MspInit
其他生成的外设代码调用逻辑大致相似。
所以上述提到的HAL_ADC_Start_DMA()
函数应添加到MX_ADC1_Init
中设置完毕ADC的通道之后,也即MX_ADC1_Init
的最后一行
另外还有一个问题,在使用STM32CubeMX生成代码时,设置使用DMA传输ADC数据时,DMA的NVIC不可取消,在野火的这个例程中,会导致DMA中断不断占用资源,main函数中的向上位机串口调试助手发送数据的语句不能执行,导致上位机无数据,需要在生成的MX_DMA_Init
中将NVIC的代码注释掉