[G32R] 【极海G32R430 TinyBoard】+ADC

[复制链接]
89|1
meiyaolei 发表于 2026-5-24 11:49 | 显示全部楼层 |阅读模式
极海 G32R430 TinyBoard 的 ADC16 模块,我整理了一份从硬件准备到代码调试的完整落地计划。
这套流程基于官方 DDL 库,重点解决了 16 位 ADC 的时钟配置、参考源选择以及数据对齐等易错点。

一、硬件与引脚规划
硬件接线方案
单端输入(推荐):使用板载 J12 排针的 A1~A5(对应 PA1~PA5),信号接 ADCxP,GND 接 AGND。
差分输入,使用 J11 专用模拟排针(AD1P/AD1M, AD2P/AD2M),注意差分电压范围需在 VREF-至 VREF+之间。
参考电压,TinyBoard V1.2 板载 REF3333(3.3V)作为外部参考源,比内部参考更稳定,建议优先启用外部参考。
抗干扰措施
模拟部分电源尽量使用 LDO 单独供电,避免开关电源噪声。
信号线远离时钟线和数字 GPIO,必要时在 ADC 输入端并联 100pF 电容滤波。

二、工程环境搭建
基础工程准备
SDK:使用 G32R430_DDL_SDK_V1.0.2或更高版本,直接复用 Examples/Board_G32R430_Tiny/ADC16下的例程骨架。
调试通道:配置 USART2(115200bps)通过板载调试器输出采样数据,便于实时验证。
关键宏定义
在 ddl_conf.h中确认以下配置已开启:
  1. #define ADC16_UNIT1_ENABLE  DDL_ON  // 使能 ADC1
  2. #define ADC16_UNIT2_ENABLE  DDL_ON  // 使能 ADC2(若需双ADC同步)
  3. #define DDL_ADC16_ROUTINE   DDL_ON  // 使能 ADC16 常规转换
ADC 初始化步骤(单通道轮询)
这是最基础的验证流程,适合快速上手。
时钟与 GPIO 初始化
  1. DDL_ADC12_InitTypeDef ADC_InitStruct = {0U};
  2.     DDL_ADC12_REG_InitTypeDef ADC_REG_InitStruct = {0U};

  3.     /* Config Clock */
  4.     DDL_RCM_Unlock();

  5.     /* Set ADC3 clock source to SYSCLK */
  6.     DDL_RCM_ADC_SetAdcAnalogClkSource(DDL_RCM_ADCACLK_SYSCLK);

  7.     /* Set ADC3 Clock Division */
  8.     DDL_RCM_ADC_SetAdc12AnalogClkDivision(DDL_RCM_ADC12ACLK_DIV_8);
  9.     DDL_RCM_EnableAHBPeripheral(DDL_RCM_AHB_PERIPHERAL_GPIO);
  10.     DDL_RCM_EnableAHBPeripheral(DDL_RCM_AHB_PERIPHERAL_ADC3);
  11.     DDL_RCM_Lock();

  12.     ADC_InitStruct.DataAlignment = DDL_ADC12_ALIGNMENT_RIGHT;
  13.     DDL_ADC12_Init(ADC3, &ADC_InitStruct);

  14.     /* Config ADC3 */
  15.     ADC_REG_InitStruct.TriggerSource    = DDL_ADC12_REG_TRIG_SOFTWARE;
  16.     ADC_REG_InitStruct.SequencerLength  = DDL_ADC12_REG_SEQ_SCAN_DISABLE;
  17.     ADC_REG_InitStruct.SequencerDiscont = DDL_ADC12_REG_SEQ_DISCONT_DISABLE;
  18.     ADC_REG_InitStruct.ContinuousMode   = DDL_ADC12_REG_CONV_CONTINUOUS;
  19.     ADC_REG_InitStruct.DMATransfer      = DDL_ADC12_REG_DMA_TRANSFER_DISABLE;
  20.     DDL_ADC12_REG_Init(ADC3, &ADC_REG_InitStruct);

  21.     /* Set the sampling time of ADC3 */
  22.     DDL_ADC12_SetChannelSamplingTime(ADC3, DDL_ADC12_CHANNEL_15, DDL_ADC12_SAMPLINGTIME_128CYCLES);
  23.     DDL_ADC12_REG_SetSequencerLength(ADC3, DDL_ADC12_REG_SEQ_SCAN_DISABLE);
  24.     DDL_ADC12_REG_SetSequencerRanks(ADC3, DDL_ADC12_REG_RANK_1, DDL_ADC12_CHANNEL_15);

  25.     /* Enable Interrupt */
  26.     DDL_ADC12_EnableIT_EOC(ADC3);

  27.     DDL_Interrupt_Register(ADC3_IRQn, ADC_Isr);
  28.     DDL_NVIC_EnableIRQRequest(ADC3_IRQn, 1, 0);

  29.     DDL_ADC12_Enable(ADC3);
  30.     while (DDL_RCM_ADC_IsAdc12AnalogClkRDY() == RESET);

  31.     /* ADC start conversion */
  32.     DDL_ADC12_REG_StartConversion(ADC3);


三,了解AD与AD的框架
169026a127293a31f7.png
16 位分辨率, ENOB13.5bit
( 2) 内置高精度参考源: 1.65V±2mV(25℃ )
( 3) 16bit 分辨率下最大采样率达到 1Msps
( 4) 支持单端和差分模式输入,采样通道数(差分/单端): 最多 6 对差分/12
个单端
( 5) 支持规则序列、注入序列、单次、连续采样模式
( 6) 两个 ADC 支持主从模式,配置主从时候保持采样同步

( 7) 支持最高 16 倍过采样
( 8) 触发方式:可通过软件、硬件触发双 ADC 同步采样。支持多个内部或外
部触发输入,每个 ADC 模块有触发方式选择:
片上定时器信号触发
外部引脚信号触发
软件触发
( 9) 支持外部参考电压引脚,允许输入电压范围独立于供电电源
( 10) 高度通用的配置
单次或连续/不连续序列的扫描模式,每个 ADC 可以转换多个通道或
扫描一个通道序列
ADC 转换结果可以存储在 16/32 位结果寄存器或通过 DMA 直接传输
到 RAM 中
数据预处理:每通道偏移补偿
通道可编程采样时间,灵活的采样时间控制
模拟看门狗,用于自动电压监测、生成中断和所选计时器的触发器



实现效果
686536a1274f9556c2.png


逆鳞风暴 发表于 2026-8-6 22:00 | 显示全部楼层
关于工程环境搭建部分,能否详细解释一下如何配置USART2进行数据输出?我在这方面遇到了一些困难。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

300

主题

943

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部
0