488|2

1041

帖子

3

资源

纯净的硅(中级)

【GD32E503评测】 ADC实验(续) [复制链接]

    测试过了内部温度及参考电压的ADC转换之后,随后便开始板上的ADC测试,厂家提供的与ADC有关的示例共用四个,第一个就是内部温度与参考电压的测试,另外三个分别是跟进模式、规则并行模式和通道差动模式(参见下图):

ADC_00.jpg

    我分别编译下载了上述三个模式的示例,但在运行示例代码时,无论怎样调整ADC测试的电位器,数值都不会相应变动(参见下图):

ADC_20.jpg

    下图为通道差动模式读取的数据:

ADC_24.jpg

 

      查看代码,三个示例中ADC启用的通道引脚均为PC2和PC3,而非电路图中给出的PA1和PA2引脚。下图为GPIO配置的代码截图:

ADC_18.jpg

    下图标注ADC1(连接电位器)是连接在PA1引脚上,可以外接输入(或连接DAC)是连接在PA2引脚上:

ADC_17.jpg

   我尝试在参考示例代码,在通过串口发送ADC转换数值的同时,在屏幕上显示出数值并通过图形显示出数值变化,由于ADC转换值仅有微小的变化,图形显示不直观(参见下图):

ADC_21.jpg

    我尝试通过修改代码来启用板上的ADC1和ADC2,先分析了ADC配置的相关函数(参见下图):

ADC_19.jpg

 

    首先将GPIO配置修改为PA1和PA2:

void gpio_config(void)
{
    /* configure the GPIO as analog mode */
//    gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_2|GPIO_PIN_3);
    gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_1|GPIO_PIN_2);
}

 

    同时打开了相应的时钟:

void rcu_config(void)
{

    /* enable GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOC|RCU_GPIOA);
    /* enable ADC0 clock */
    rcu_periph_clock_enable(RCU_ADC0);
    /* enable ADC1 clock */
    rcu_periph_clock_enable(RCU_ADC1);
    /* enable DMA0 clock */
    rcu_periph_clock_enable(RCU_DMA0);
    /* enable TIMER1 clock */
    rcu_periph_clock_enable(RCU_TIMER1);
    /* configure ADC clock */
    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6);
//    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV12);
}

 

    ADC的配置修改如下:

void adc_config(void)
{
    /* enable ADC continous function 启用ADC连续功能 */
    adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
    adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE);
//    adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);
//    adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, DISABLE);
    /* configure ADC data alignment 配置ADC数据对齐 */
    adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
//    adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);  
    /* configure ADC mode 配置ADC模式 */
    adc_mode_config(ADC_DAUL_REGULAL_FOLLOWUP_FAST);
    
    /* configure ADC channel length 配置ADC通道长度 */
    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);
//    adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 2);
    /* configure ADC regular channel 配置ADC常规通道 */
    adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
	adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
//    adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_12, ADC_SAMPLETIME_55POINT5);
//    adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_13, ADC_SAMPLETIME_55POINT5);
//    adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_13, ADC_SAMPLETIME_55POINT5);
//    adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_12, ADC_SAMPLETIME_55POINT5);
    /* configure ADC trigger 配置ADC触发器 */
    adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_T1_CH1);
//    adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
    /* enable ADC external trigger 启用ADC外部触发器 */
    adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
//    adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);

    /* enable ADC interface 启用ADC接口 */
    adc_enable(ADC0);
    delay_1ms(1);
    /* ADC calibration and reset calibration ADC校准和复位校准 */
    adc_calibration_enable(ADC0);
    /* enable ADC interface 启用ADC接口 */
//    adc_enable(ADC1);
//    delay_1ms(1);
    /* ADC calibration and reset calibration ADC校准和复位校准 */
//    adc_calibration_enable(ADC1);

    /* enable ADC DMA function 启用ADC DMA功能 */
    adc_dma_mode_enable(ADC0);
	
}

 

    通过上述修改,编译烧录测试,通道1的ADC数值可以跟随电位器调节而变化了,至此,板上的ADC测试得到了成功,下图为测试的照片,屏幕中间靠右边的两组数据分别是ADC1和ADC2的值,ADC1的值随着电位器的旋转而变化,ADC2未连接,所以数值基本不变。

ADC_25.jpg

    下图为串口调试助手获得的数据:

ADC_26.jpg


回复

1041

帖子

3

资源

纯净的硅(中级)

    这是测试代码的压缩包,由于反复测试,有很多注释的代码尚未删除,因此代码有点杂乱。

MyTest.rar (385.36 KB, 下载次数: 0)


回复

134

帖子

0

资源

版主

解析代码确实很耗时间


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表