-
gd32f470zit6ADC采集电压后与实际电压相差25%,求帮助
代码如下voidADC_init(void){//1.使能时钟rcu_periph_clock_enable(RCU_GPIOF);rcu_periph_clock_enable(RCU_ADC2);adc_clock_config(ADC_ADCCK_PCLK2_DIV8);//2.配置为模拟输入gpio_mode_set(GPIOF,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_6);//3.配置ADC基本参数adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);//独立模式/*ADCcontineousfunctiondisable*/adc_special_function_config(ADC2,ADC_CONTINUOUS_MODE,DISABLE);//单次转换/*ADCscanmodedisable*/adc_special_function_config(ADC2,ADC_SCAN_MODE,DISABLE);//不扫描adc_resolution_config(ADC2,ADC_RESOLUTION_12B);//12位分辨率adc_data_alignment_config(ADC2,ADC_DATAALIGN_RIGHT);//数据右对齐adc_channel_length_config(ADC2,ADC_ROUTINE_CHANNEL,1);//单次转换通道数adc_external_trigger_config(ADC2,ADC_ROUTINE_CHANNEL,EXTERNAL_TRIGGER_DISABLE);//外部触发禁止//4.设置采样时间和通道adc_routine_channel_config(ADC2,0,ADC_CHANNEL_4,ADC_SAMPLETIME_15);////配置ADC规则通道//5.启用ADC并校准adc_enable(ADC2);delay_2us(1000);adc_calibration_enable(ADC2);}uint16_tadc_channel_sample(void){/*ADCsoftwaretriggerenable*/adc_software_trigger_enable(ADC2,ADC_ROUTINE_CHANNEL);/*waittheendofconversionflag*/while(!adc_flag_get(ADC2,ADC_FLAG_EOC));/*cleartheendofconversionflag*/adc_flag_clear(ADC2,ADC_FLAG_EOC);/*returnregularchannelsamplevalue*/return(adc_routine_data_read(ADC2));}uint16_tadc_channel_value(void){uint32_tadc_value=0;uint32_ti=0;for(i=0;i<5;i++){adc_value+=adc_channel_sample();}return(adc_value/5);}转换ADC_value=adc_channel_value();adc=((double)(ADC_value*3.3)/4096);printf("adc:%.2lfVVINSampledvalues:%d\r\n",adc,ADC_value);
2025-04-15 5