当前位置: 首页 > news >正文

二十一、STM32的ADC(一)(ADC介绍)

前言:在 STM32 系列单片机的外设中,ADC(Analog to Digital Converter,模数转换器)是最常用、也最基础的模块之一。它是 MCU 与现实世界传感器之间的桥梁。无论是温度、电压、电流,还是光照强度、声音信号,只要是模拟信号,最终都要通过 ADC 转换成数字信号,才能被 MCU 处理。

目录

一、ADC 是什么?为什么要用它?

二、STM32C8T6 的 ADC 模块概览

三、ADC 的基本结构与工作过程

四、ADC 的常见工作模式与应用场景

五、ADC 的代码编写思路

六、ADC 校准的重要性

七、总结


一、ADC 是什么?为什么要用它?

STM32 的 ADC 模块可以把0~3.3V 的连续模拟电压信号,转换成一个0~4095 的数字值(12 位精度)。
举个例子:

1.当输入电压为 0V 时,ADC 输出 0。

2.当输入电压为 3.3V 时,ADC 输出 4095。

3.当输入电压为 1.65V 时,输出大约 2048。

换句话说,ADC 就像一把把电压“刻度化”的尺子。
MCU 读到这个数字后,就能根据比例关系还原真实电压值,从而判断传感器的状态。

二、STM32C8T6 的 ADC 模块概览

STM32F103C8T6 内部集成了两路 12 位 ADC:

1.ADC1

2.ADC2

它们可以独立使用,也可以同时工作,用于同步采样或双模式采集。

主要特性如下:

三、ADC 的基本结构与工作过程

理解 ADC 的内部结构,有助于你在编写代码时更有方向感。
STM32 的 ADC 内部主要包括以下几个模块:

1.模拟多路选择器(MUX)
        负责在多个通道中选择要采样的输入信号,比如 PA0(通道0)或 PA1(通道1)。

2.采样保持电路(Sample & Hold)
        将瞬时电压“抓取”并保持,供后续转换使用。
        采样时间越长,精度越高,但转换速度越慢。

3.逐次逼近寄存器(SAR)
        通过比较器逐位确定输入信号对应的数字值,是 ADC 的核心。

4.数据寄存器(DR)
        保存转换结果,CPU 或 DMA 可直接读取。

在编写代码时,我们最终的目标,就是让 MCU:

1.选择合适的通道;

2.启动采样与转换;

3.等待或中断通知;

4.从 DR 寄存器读取转换结果。

四、ADC 的常见工作模式与应用场景

1. 单次转换模式

        一次启动,只转换一个通道一次。适合偶尔采样,如检测一次电池电压。

2. 连续转换模式

        启动后,ADC 自动连续采样。适合实时监控信号,如温度变化。

3. 扫描模式

        可以依次采集多个通道的数据。常用于多传感器场景,比如采集多个电位器或电压点。

4. 触发模式

        通过外部信号(如定时器、外部中断)启动采样。适合需要精准时间同步的应用。

5. DMA 模式

        自动把采样结果搬运到内存,不占用 CPU。
        在代码中,这通常需要配置 DMA 通道、数据长度和目标地址。

五、ADC 的代码编写思路

可以将 ADC 的编程步骤理解为 6 个阶段:

① 开启时钟

STM32 的外设必须先开启对应时钟。
在代码中,通常会为 GPIO 和 ADC 各自使能时钟。

 思路:
在编写代码时,记得先打开 RCC_APB2ENR 寄存器中对应位,例如开启 ADC1 和 GPIOA。

② 配置输入引脚

ADC 通道通常对应某些特定引脚(如 PA0 → ADC1_IN0)。
这些引脚必须配置为 模拟输入模式,不能是推挽输出或浮空输入。

思路:
配置 GPIO 模式寄存器为 Analog Input,这样引脚才能正确采样模拟信号。

③ 配置 ADC 参数

接着配置 ADC 的工作模式,如:

分辨率(默认 12 位)

转换模式(单次 / 连续 / 扫描)

数据对齐方式(右对齐/左对齐)

通道采样时间(决定速度与精度)

思路:
通过设置控制寄存器 ADC_CR1、ADC_CR2 和采样时间寄存器 ADC_SMPRx 实现。

④ 选择通道并设置转换顺序

STM32 的 ADC 支持多个通道采样。
通道选择与顺序由 ADC_SQRx 寄存器控制。

思路:
如果只采样一个通道,只需指定通道编号;
若是多通道扫描,就依次填入每个通道的序号。

⑤ 启动 ADC 并读取结果

代码中一般通过“软件启动”或“定时器触发”启动转换。
转换完成后,可以通过中断或查询状态标志来读取结果寄存器(DR)的值。

思路:
你可以选择“轮询法”定期读取,或者开启“EOC(转换结束中断)”自动处理。

⑥ 数据处理与转换

ADC 返回的是一个数字值(0~4095),你需要根据公式换算成实际电压或物理量:

思路:
在应用层代码中,把数字量转为工程量(例如温度、电流、电压等),再做后续逻辑处理。

六、ADC 校准的重要性

在正式开始采样前,STM32 的 ADC 通常需要进行校准(Calibration)。
校准的目的是消除内部偏差,让采样结果更接近真实值。

思路:
在代码中,初始化 ADC 时加一个“启动校准”的步骤,并等待校准完成标志位。

七、总结

STM32C8T6 的 ADC 模块结构灵活、精度高、速度快,是连接模拟世界与数字世界的关键外设。
只要你掌握了配置的逻辑,编写 ADC 代码就会变得非常自然:

“开时钟 → 配 GPIO → 配 ADC → 选通道 → 启动转换 → 读取结果”。

http://www.dtcms.com/a/569301.html

相关文章:

  • AWS helmchart包适CCE
  • 【LeetCode】98. 验证二叉搜索树
  • 摄影师网站html52017 wordpress宽屏主题
  • 【软件安全】什么是XSS(Cross-Site Scripting,跨站脚本)?
  • 2025年Java面试指南(持续更新)
  • leetcode 190. 颠倒二进制位 python
  • 网站用什么域名东莞网络营销策划
  • springboot 工具类 日期时间列表工具类详解:高效处理日期范围的利器
  • MYSQL第四次作业
  • 某游戏大厂分布式系统经典实战面试题解析
  • 某游戏大厂计算机网络面试问题深度解析(一)
  • C#基础:如何从现有类库复制一个新的类库,并且加入解决方案
  • C# 中 Entity Framework (EF) 和 EF Core 里的 `AsNoTracking` 方法
  • 基于视觉分析的加油站通话行为安全预警系统 构建加油安全新防线 通话行为模式识别 边缘计算通话动作监测设备
  • Traefik vs Spring Cloud:微服务架构的两种截然不同的技术路线
  • 郑州百度seo网站优广州网站开发外包哪家好
  • 高端网站建设推来客网络做seo推广公司
  • 数据挖掘6-AI总结
  • 网站首页域名如何设置访问快宿迁沭阳网站建设
  • 数据结构 —— 栈
  • 微信小程序开发案例 | 个人相册小程序(下)
  • 网站域名账号网址申请注册
  • 电商 API 数据交互最佳实践:JSON 格式优化、数据校验与异常处理
  • 重庆网站建设 沛宣织梦cms 官方网站
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十七)ELK日志分析模块--Elasticsearch介绍与配置
  • 如何使用elasticdump进行elasticsearch数据还原
  • 【运维记录】Centos 7 基础命令缺失
  • 手写 RPC 框架
  • etcd 高可用分布式键值存储
  • 【ETCD】ETCD单节点二进制部署(TLS)