尝试测试GD32E503开发板的ADC转换,编译下载了检测芯片温度及电压值的范例(如下图):
通过串口助手可以看到大约每隔2秒发送一次的MCU芯片温度及电压值的数据:
范例中的代码不长,就是简单的几句,主函数的代码如下:
int main(void)
{
/* peripheral clocks configuration */
rcu_config();
/* configure systick */
systick_config();
/* ADC configuration */
adc_config();
/* USART configuration */
gd_eval_com_init(EVAL_COM0);
while(1){
/* ADC software trigger enable */
adc_software_trigger_enable(ADC0, ADC_INSERTED_CHANNEL);
/* delay a time in milliseconds */
delay_1ms(2000);
/* value convert */
temperature = (1.43 - ADC_IDATA0(ADC0)*3.3/4096) * 1000 / 4.3 + 25;
vref_value = (ADC_IDATA1(ADC0) * 3.3 / 4096);
/* value print */
printf(" the temperature data is %2.0f degrees Celsius\r\n", temperature);
printf(" the reference voltage data is %5.3fV \r\n", vref_value);
printf(" \r\n");
}
}
将其中的代码移植到我的测试项目中,编译通过后,运行却没有得到正确的数据(参见下图):
反复查找了多次,仍然没有找到原因,移植的代码如下:
//ADC测试开始
/* ADC software trigger enable */
adc_software_trigger_enable(ADC0, ADC_INSERTED_CHANNEL);
/* delay a time in milliseconds */
delay_1ms(200);
/* value convert */
temperature = (1.43 - ADC_IDATA0(ADC0)*3.3/4096) * 1000 / 4.3 + 25;
vref_value = (ADC_IDATA1(ADC0) * 3.3 / 4096);
/* value print */
printf(" the temperature data is %2.0f degrees Celsius\r\n", temperature);
printf(" the reference voltage data is %5.3fV \r\n\r\n", vref_value);
lcd_value_display( 60, 185, 6, 3, vref_value, char_format);
//ADC测试结束
代码是直接拷贝粘贴的,除了增加了一行屏幕显示的代码,其他并未作任何改动,不知道为何转换的数据不正确,还在继续测试中。
|