5249|4

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

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

 

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

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

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

 

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

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

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

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

 

    首先将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未连接,所以数值基本不变。

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

最新回复

感谢分享   详情 回复 发表于 2021-7-18 17:56
点赞 关注
 
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 

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

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

 
 
 

回复

142

帖子

0

TA的资源

版主

板凳
 

解析代码确实很耗时间

 
 
 

回复

659

帖子

0

TA的资源

纯净的硅(初级)

4
 

谢谢分享

 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 

感谢分享

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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