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 }

浙公网安备 33010602011771号