一、更新时间
2022.2.19
二、概念具体内容
1.ADC的概念
将模拟量转换为数字量。
2.STM3210X系列ADC特点
1.为12位逐次逼近型的模拟数字转换器;
2.支持单次和连续转换模式;
3.通道自动切换扫描;
4.采样间隔可以按通道编程;
5.转换结果支持左对齐或右对齐存储在16位数据寄存器;
6.ADC转换最大速率为1us
7.输入范围通常为0-3.3。
3.STM3210X系列ADC通道与引脚对应关系
规则通道从上到下执行,注入通道是跳转的,执行完后继续执行规则通道。
单次转换:ADC只执行一次转换。
连续转换:当前面ADC转换结束后立刻执行下一次。
扫描模式:在最后一个通道转换结束才会产生中断。
ADC时钟不要超过14M。最小采样时间为1us。
三、代码
1.开启对应引脚时钟,设置为模拟输入。
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
2.复位引脚,设置ADC时钟。
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_DeInit(ADC1);
3.初始化ADC参数。
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
4.使能ADC并校准。
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
5.配置规则通道参数。
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
6.开启软件转换。
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
7.等待转换完成,读取ADC值。
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}