stm32 ADC配置

  STM32 ADC 12 位逐次逼近型的模拟数字转换器,它有 18 个通道,可测量 16 个外部和 2 个内部信号源
各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐或右对齐方式存储在 16 数据
寄存器中。
  当ADC 通道 1 PA1 上时。

 1 //初始化 ADC
 2 //这里我们仅以规则通道为例
 3 //我们默认将开启通道 0~3
 4 void Adc_Init(void)
 5 {  ADC_InitTypeDef ADC_InitStructure;
 6   GPIO_InitTypeDef GPIO_InitStructure;
 7   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
 8   RCC_APB2Periph_ADC1 , ENABLE ); //使能 ADC1 通道时钟
 9   RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置 ADC 分频因子 6
10   //72M/6=12,ADC 最大时间不能超过 14M
11   //PA1 作为模拟通道输入引脚
12   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1;
13   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
14   GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.1
15   ADC_DeInit(ADC1); //复位 ADC1,将外设 ADC1 的全部寄存器重设为缺省值
16   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC 独立模式
17   ADC_InitStructure.ADC_ScanConvMode = DISABLE; //单通道模式
18   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换模式
19   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//转换由
20   //软件而不是外部触发启动
21   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC 数据右对齐
22   ADC_Init(ADC1, &ADC_InitStructure); //根据指定的参数初始化外设 ADCx
24   ADC_Cmd(ADC1, ENABLE); //使能指定的 ADC1
25   ADC_ResetCalibration(ADC1); //开启复位校准
26   while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
27   ADC_StartCalibration(ADC1); //开启 AD 校准
28   while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
29   }
30     //获得 ADC 值
31      //ch:通道值 0~3
32     u16 Get_Adc(u8 ch)
33   {
34   //设置指定 ADC 的规则组通道,设置它们的转化顺序和采样时间
35   ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
36   //通道 1,规则采样顺序值为 1,采样时间为 239.5 周期
37   ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能软件转换功能
38   while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
39   return ADC_GetConversionValue(ADC1); //返回最近一次 ADC1 规则组的转换结果
40   }
41     u16 Get_Adc_Average(u8 ch,u8 times)
42   {
43   u32 temp_val=0;
44   u8 t;
45   for(t=0;t<times;t++)
46   {   temp_val+=Get_Adc(ch);      //通过Get_Adc_Average函数,用于多次获取 ADC 值,取平均,用来提高准确度。 
47     delay_ms(5);
48   }
49   return temp_val/times;
50 }


知识来源:STM32F1 开发指南(库函数版)


原文地址:https://www.cnblogs.com/zengsf/p/7212429.html