前提条件:
1.项目中要包含相对的库文件
2.GPIO引脚时钟已使能
void AdcInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 使能 ADC1 and GPIOC clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
//配置PC4为模拟输入(ADC Channel 8)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 配置ADC1, 不用DMA, 用软件自己触发
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;////独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //连续多通道模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//转换不受外界决定
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //扫描通道数
ADC_Init(ADC1, &ADC_InitStructure);
//将channel 8作为ADC1的规则配置通道
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE);// 使能 ADC1
ADC_ResetCalibration(ADC1); //重置指定的ADC1 的校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC1 重置校准寄存器的状态
ADC_StartCalibration(ADC1); //开始指定ADC1 的校准状态
while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC1 的校准程序结束
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//开始转换(连续转换)
}
uint16_t AdcGetVal(void)
{
return ADC_GetConversionValue(ADC1);//读取最近一次ADC1规则组的转换结果
}
|
|