非DMA模式(配置16个通道)
- void adc_gpio_init(void)
- {
- GPIO_InitTypeDef t_gpio;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);//使能 GPIOA GPIOB GPIOC 时钟
- t_gpio.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//GPIOA
- t_gpio.GPIO_Mode=GPIO_Mode_AIN;//模拟输入模式
- GPIO_Init(GPIOA,&t_gpio);//初始化GPIOA
-
- t_gpio.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//GPIOB
- GPIO_Init(GPIOB,&t_gpio);//初始化GPIOB
-
- t_gpio.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//GPIOC
- GPIO_Init(GPIOC,&t_gpio);//初始化GPIOC
- }
-
-
- void adc_init(void)
- {
- ADC_InitTypeDef t_adc;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//使能ADC1时钟
-
- t_adc.ADC_Mode = ADC_Mode_Independent; //独立模式:ADC1与ADC2独立
- t_adc.ADC_ScanConvMode = DISABLE; //禁用通道扫描
- t_adc.ADC_ContinuousConvMode = DISABLE; //禁用连续转换
- t_adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不使用外部触发
- t_adc.ADC_DataAlign = ADC_DataAlign_Right; //数据位右对齐
- t_adc.ADC_NbrOfChannel = 1; //转换通道数为1
- ADC_Init(ADC1,&t_adc); //初始化ADC1
-
- RCC_ADCCLKConfig(RCC_PCLK2_Div8);//配置ADC时钟为PCLK2的8分频
-
- ADC_Cmd(ADC1,ENABLE); //使能ADC1
-
- ADC_ResetCalibration(ADC1);
- while(ADC_GetResetCalibrationStatus(ADC1));
- ADC_StartCalibration(ADC1); //校准
- while(ADC_GetCalibrationStatus(ADC1)){};
- }
-
- uint16_t read_adc_value(uint8_t ch)
- {
- uint16_t adc_value = 0;
-
- ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_7Cycles5 ); //设置ADC1通道ch的转换周期为7.5个采样周期,采样次序为1
-
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能软件触发
-
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )){};//等待转换完成
-
- adc_value = ADC_GetConversionValue(ADC1); //获取转换值
-
- return adc_value;
- }
|