STM32 ADC配置基本流程:
1.开启对应的GPIO口时钟和ADC时钟
2.开启ADC时钟,分频使得ADCCLK小于14MHz
3.对对应端口的GPIO口进行初始化,定义GPIO结构体,初始化GPIO配置,设为模拟输入模式
4.选择规则组输入通道
5.定义ADC结构体,初始化ADC配置
6.如果需要进行中断和看门狗配置
7.使能ADC
8.ADC校准
具体代码如下
#include "stm32f10x.h" // Device header
void AD_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); /*使得CLK小于14MHz*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;/*失能连续转换*/
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/*ADC数据右对齐*/
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/*外部触发源:None为使用内部软件触发*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /*ADC工作模式:独立模式*/
ADC_InitStructure.ADC_NbrOfChannel = 1;/*通道数目1*/
ADC_InitStructure.ADC_ScanConvMode = DISABLE;/*失能扫描转换模式*/
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);/*开启ADC1*/
ADC_ResetCalibration(ADC1);/*复位校准*/
while (ADC_GetResetCalibrationStatus(ADC1) == SET);/*等待复位校准完成,如果校准位一直为1则死等*/
ADC_StartCalibration(ADC1);/*开始校准*/
while (ADC_GetCalibrationStatus(ADC1) == SET);/*等待校准完成,如果校准位一直为1则死等*/
}
uint16_t AD_GetValue(uint8_t CH)
{
ADC_RegularChannelConfig(ADC1,CH,1,ADC_SampleTime_55Cycles5);/*选择规则组输入通道,通道CH,序列1*/
ADC_SoftwareStartConvCmd(ADC1,ENABLE);/*软件触发转换*/
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);/*等待转换完成,如果EOC一直为0则还在转换一直死等*/
return ADC_GetConversionValue(ADC1);/*获取ADC值0-4095*/
}