我使用的MCU型号是GD32F103CBT6,我的目的是使用ADC0的CH0,CH1通道采集电压数据,电路没有隔离也没有特殊处理也就是直接连接的。现在出现一个问题:
我用万用表测量电压,发现出现两种结果。
第一、如果不开启电压检测,则我测量的输入电压是1.27V,这个很正常。也就是程序没有设置PA5、PA6引脚,默认状态。
第二、开启电压检测,则我测量的输入电压是3.31V,这个不知道为什么?按理说引脚为输入状态了,引脚电压不应该随输入变化吗?关键是该测量值变化范围很大,CH0 0x29D~0x2ED ,CH1 0x263~0x26A。
程序中的函数 void adc_inserted_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time)中参数rank是什么意思
rank: the inserted group sequencer rank,this parameter must be between 0 to 3 怎么理解?
程序如下:
void adc_gpio(void)
{
/* enable ADC0 clock */
rcu_periph_clock_enable(RCU_ADC0);
/* config ADC clock */
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV12);
/* config the GPIO as analog mode */
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_5|GPIO_PIN_6);
}
void adc_config(void)
{
/* ADC SCAN function enable */
adc_special_function_config(ADC0, ADC_SCAN_MODE,ENABLE);
/* ADC trigger config */
adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_2_EXTTRIG_INSERTED_NONE);
/* ADC data alignment config */
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
/* ADC mode config */
adc_mode_config(ADC_MODE_FREE);
/* ADC channel length config */
adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 2);
/* ADC temperature sensor channel config */
adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_239POINT5);
/* ADC internal reference voltage channel config */
adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_239POINT5);
/* ADC external trigger enable */
adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL,ENABLE);
/* enable ADC interface */
adc_enable(ADC0);
delay_1ms(1);
/* ADC calibration and reset calibration */
adc_calibration_enable(ADC0);
}
主程序中的处理
//初始化部分
adc_gpio();
adc_config();
//while 循环执行部分
/* ADC software trigger enable */
adc_software_trigger_enable(ADC0, ADC_INSERTED_CHANNEL);
/* value convert */
adc0c0_value = ADC_IDATA0(ADC0);
adc0c1_value = ADC_IDATA1(ADC0);
adcdif = adc0c0_value - adc0c1_value;
if(adcdif > 0 )
{
model = 2;//model
}
adc0c0_value =0;
adc0c1_value =0;
有高手看看程序是否有错
|