打印
[方案相关]

ADC相关寄存器全解读

[复制链接]
46|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qsrg51|  楼主 | 2025-5-23 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本篇系统梳理 小华 HC32A4A0 芯片的 ADC模块常用寄存器,讲解每个寄存器的功能、配置方式及注意事项,适合:

想要跳过 HAL 库直接访问寄存器的开发者;

想调试 ADC 异常问题(如采样不准、中断不触发);

想在 Bootloader、RTOS 或裸机场景灵活使用 ADC 的工程师。

ADC 常用寄存器总览
寄存器名称        地址偏移        功能简述
ADC_STR(采样时间配置)        0x00        每通道采样周期设置
ADC_CR0(控制寄存器0)        0x04        工作模式、触发选择
ADC_CR1(控制寄存器1)        0x08        数据对齐、转换开始等
ADC_CHSEL0/1(通道选择)        0x10/0x14        选择参与转换的通道
ADC_RESULTx(结果寄存器)        0x30~0x5C        每通道采样结果
ADC_SSTR0/1(序列采样时间)        0x20/0x24        各序列通道采样时间设置
ADC_ICLR(中断清除)        0x0C        清除 EOC/EOS 等标志位
ADC_ISR(中断状态)        0x28        判断转换是否完成
ADC_THx(上下限阈值)        0x60~0x6C        用于比较器判断/报警

常见寄存器用途详解
1.ADC_CR0:ADC 控制寄存器 0
c
复制
编辑
ADCx->CR0 =
    (1 << 0)  // ADEN:使能ADC模块
  | (1 << 1)  // CONT:连续转换模式
  | (0 << 2)  // ADST:软件触发
  | (3 << 8); // TRGSEL:触发源选择(如定时器)
2.ADC_CR1:ADC 控制寄存器 1
c
复制
编辑
ADCx->CR1 =
    (0 << 0)  // ALIGN:数据对齐(0: 右对齐)
  | (1 << 1); // SEQSTA:启动序列转换
3.ADC_STR:采样时间寄存器
c
复制
编辑
ADCx->STR = (0x30 << 0); // 设置采样周期,越大越稳定,推荐 ≥0x30
4.ADC_CHSEL0/1:通道选择
c
复制
编辑
ADCx->CHSEL0 = (1 << 0) | (1 << 1); // 开启通道0和通道1
5.ADC_RESULTx:转换结果寄存器
c
复制
编辑
uint16_t result = ADCx->RESULT0 & 0x0FFF; // 读取通道0的12位采样结果
6.ADC_ICLR / ADC_ISR:中断管理
c
复制
编辑
if (ADCx->ISR & (1 << 0)) { // 检查EOC标志
    ADCx->ICLR = (1 << 0);  // 清除EOC
}
7.ADC_SSTR0/1:每个通道的采样时间细化设置
c
复制
编辑
ADCx->SSTR0 = (0x30 << 0) | (0x30 << 8); // 通道0/1的采样时间
ADC初始化裸机模板代码(不依赖库)
c
复制
编辑
void ADC_Init_Bare(void) {
    // 1. 打开ADC时钟
    RCU->APB2EN |= (1 << 9); // 假设ADC挂在APB2

    // 2. 配置采样时间
    ADCx->STR = 0x30303030;  // 简化设置所有通道采样时间为0x30

    // 3. 启用通道
    ADCx->CHSEL0 = (1 << 0); // 使能通道0

    // 4. 设置数据对齐和触发模式
    ADCx->CR1 = 0x00000000; // 右对齐,软件触发

    // 5. 设置触发源、工作模式
    ADCx->CR0 = (1 << 0);   // 使能ADC模块

    // 6. 启动转换
    ADCx->CR1 |= (1 << 1);  // 设置SEQSTA启动序列
}
寄存器配置调试技巧
场景        检查点
无转换结果        ADC_CR0 是否启用、通道是否使能
值为0xFFF        模拟引脚是否浮空、VREF 是否配置
EOC 不触发        中断未开、ICLR 未清零
多通道交叉干扰        采样时间过短、通道配置过密

总结建议
理解 ADC_CR0/CR1 是配置核心;

所有通道采样时间建议 ≥ 0x30;

中断/标志位需手动清除(ICLR);

多通道建议使用序列采样 + DMA;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

413

帖子

4

粉丝