19_ADC多通道

1、硬件 

ADC原理与单通类似,仅多增加了3通道,分别增加了红外传感器、热敏传感器与光敏传感器,均接VCC、GND与AO模拟口

2、接线图

3、软件程序

3、多通道ADC模块程序

 

 1 #include "stm32f10x.h"
 2 
 3 
 4 void adc_init(void)
 5 {
 6     /*开启RCC时钟*/
 7     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//本实验使用PA0,开启GPIOA时钟
 8     RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//本实验使用ADC1,开启ADC1时钟
 9     RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADCCLK分频器采用6分频,频率为12Mhz
10     /*配置GPIO结构体*/
11     GPIO_InitTypeDef GPIO_InitStructure;
12     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//选择模拟输入
13     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//选择PA0
14     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
15     GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO结构体
16     /*配置ADC转换器*/
17     ADC_InitTypeDef ADC_InitStructure;//定义一个ADC结构体
18     ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//选择独立模式,本实验仅涉及1个ADC
19     ADC_InitStructure.ADC_ScanConvMode=DISABLE;//选择单通道模式
20     ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//选择单模式还是连续模式,本实验选择单模式
21     ADC_InitStructure.ADC_ExternalTrigConv =ADC_ExternalTrigConv_None;//触发源选择软件触发
22     ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//选择右对齐
23     ADC_InitStructure.ADC_NbrOfChannel=1;//选择1通道
24     ADC_Init( ADC1, &ADC_InitStructure);
25     /*使能ADC1*/
26     ADC_Cmd(ADC1,ENABLE);
27     /*ADC校准*/
28     ADC_ResetCalibration(ADC1);
29     while( ADC_GetResetCalibrationStatus(ADC1)==SET);
30     ADC_StartCalibration( ADC1);
31     while(ADC_GetCalibrationStatus(ADC1)==SET);
32 }
33 
34 uint16_t get_adcvalue(uint8_t ADC_Channel)
35 {
36     ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);
37     ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件触发ADC
38     while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET );//如果转换完毕,则可获取最终的结构,状态标志位在数据获取后自动置0
39     return ADC_GetConversionValue(ADC1);
40 
41 
42 }

 

posted @ 2023-12-06 20:49  菜腿慕  阅读(55)  评论(0)    收藏  举报