在CubeMX里进行设置时,发现STM32F103和STM32F302之间在出现的设置界面上有些差异,照搬F103的设置并不能使多通道的ADC和DMA传输正常工作。经过多番研究和尝试,终于找到了正确的设置方式,做个记录分享和留存。
芯片:STM32F302
CubeMX版本: 6.5.0
以下给出了四通道ADC实现DMA传输的CubeMX设置页面。其中需要特别注意(有别于STM32F103)的地方如下:
- Clock Prescaler,这个设置在F103里是没有的。
- DMA Continuous Requests,这个设置必须为Enabled,否则只会产生一次DMA传输。
- End of Conversion Selection,对于多通道ADC采集需要选择为End of sequence of conversion,否则只会有第一通道转换的结果,而不是四个通道的转换结果。
除了以上设置需要注意外,在自动生成的代码里还存在一个bug:它会先初始化ADC,然后再初始化DMA,而这样的顺序也会导致程序工作不正常。一定要在ADC初始化之前进行DMA初始化,否则也无法正常工作,正确的代码片段如下:
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_DAC_Init();