(一),单通道ADC
1,使能DMA Continuous Requests与Continuous Conversion Mode
2,选择Circular ,World, height
3,中断等级为1
4,工程代码:
uint32_t ADC_Value[30];//即将采集30次
float adc;
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);//电压校准3.3V
HAL_ADC_Start_DMA(&hadc2,ADC_Value,30);//采集次数为30次,放置在数组中///////////////////////////需要大点,可能减缓CPU速度
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc2), HAL_ADC_STATE_REG_EOC))
{
for(int i = 1; i < 30; i++)//数据处理 与 DMA存值 不同步
{
adc+= ADC_Value[i];//把三十次的采集值依次累加
HAL_Delay(2);
}
adc= adc/30.0f;
}
5,打印adc即可。
(二),多通道ADC
1,STM32cubemx 配置与单通道一致,注意Number Of Conversion 为开启的通道数,Rank中注意各自的采集通道编号,并且将周期调大!!!
如双通道:5与11
uint32_t ADC_Value[20];//即将采集20次
float adc1;
float adc2;
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);//电压校准3.3V
HAL_ADC_Start_DMA(&hadc1,ADC_Value,20);//采集次数为30次,放置在数组中
for(int i=0;i<10;i+=2)//=================0,2,4,6,8;//=========================每个通道交替采集五次,需要错开相加
{
adc1+=adc_val[i];
}
adc1=adc1/5.0f/4095.0f*3.3f
for(int i=1;i<10;i+=2)//================1,3,5,7,9;//=========================每个通道交替采集五次,需要错开相加
{
adc2+=adc_val[i];
}
adc2=adc2/5.0f/4095.0f*3.3f;