STM32 ADC 模数转换器详解:原理、配置与应用
STM32 ADC 模数转换器详解:原理、配置与应用
在嵌入式系统中,模数转换(ADC)是实现传感器信号采集、信号处理等任务的关键环节。STM32 微控制器作为一款功能强大的 32 位微控制器,其内置的 ADC 模块为开发者提供了高效、灵活的模数转换解决方案。本文将深入探讨 STM32 ADC 的工作原理、配置方法以及典型应用场景,帮助读者全面掌握这一关键外设的使用技巧。
一、STM32 ADC 原理概述
STM32 的 ADC(模数转换器)是一个 12 位分辨率的模数转换器,它能够将模拟信号转换为数字信号。ADC 的工作原理基于逐次逼近寄存器(SAR)技术,通过对输入模拟信号进行采样、保持和量化,最终输出对应的数字值。
从功能上看,STM32 ADC 支持多种工作模式,包括单次转换模式和连续转换模式。单次转换模式下,ADC 完成一次转换后自动停止;而连续转换模式则会持续不断地进行模数转换,适用于需要实时监测信号变化的场景。此外,STM32 ADC 还具备多种触发方式,如软件触发、外部事件触发等,可灵活满足不同应用场景的需求。
二、STM32 ADC 硬件架构
STM32 内部集成了多个 ADC 模块,不同系列的 STM32 微控制器在 ADC 的数量和通道数量上有所差异。例如,STM32F1 系列通常配备 1 个或 2 个 ADC 模块,每个 ADC 模块拥有 16 个外部通道(可连接多达 16 个外部模拟信号源)以及 4 个内部通道(用于采集内部参考电压、温度传感器等信号)。
每个 ADC 模块的通道可以配置为不同的采样时间,以适应不同频率的模拟信号输入,确保采样精度。ADC 的输入信号范围通常是 0 到 VDDA(模拟电源电压),超范围的输入信号可能会导致转换结果不准确甚至损坏芯片。
三、STM32 ADC 配置步骤
-
开启时钟与 GPIO 配置
- 首先,需要通过调用
__HAL_RCC_ADC_CLK_ENABLE()
函数开启 ADC 模块的时钟,确保 ADC 能正常工作。 - 然后,配置 GPIO 引脚为模拟模式(
GPIO_MODE_ANALOG
),以便将外部模拟信号输入到 ADC 通道。例如,若使用 PA0 引脚作为 ADC 输入通道 0,则开启 GPIOA 时钟,并将 PA0 配置为模拟模式。
- 首先,需要通过调用
-
ADC 初始化
- 调用
HAL_ADC_Init()
函数对 ADC 进行初始化。在初始化结构体中,需设置 ADC 的分辨率(如 12 位)、扫描方向(单通道或多通道扫描)、连续转换模式等参数。例如,设置 ADC 分辨率为 12 位,开启连续转换模式,以便持续采集模拟信号。
- 调用
-
ADC 通道配置
- 使用
HAL_ADC_ConfigChannel()
函数配置 ADC 通道。指定通道号(如 ADC_CHANNEL_0)、采样时间(如 ADC_SAMPLETIME_3CYCLES)等参数。采样时间决定了 ADC 对输入信号采样的时间长度,较长的采样时间有助于提高采样精度,但会降低转换速度。
- 使用
-
启动 ADC 转换
- 根据触发方式的不同,可以选择通过软件触发(
HAL_ADC_Start()
)或外部事件触发(如定时器触发)来启动 ADC 转换。启动转换后,ADC 会按照配置的模式进行模数转换,并将结果存储在相应的数据寄存器中。
- 根据触发方式的不同,可以选择通过软件触发(
-
读取 ADC 转换结果
- 调用
HAL_ADC_GetValue()
函数获取 ADC 转换的结果值,该值为 12 位无符号整数(范围 0 - 4095),对应输入模拟信号的量化值。可以根据需要对转换结果进行进一步处理,如数据滤波、单位换算等。
- 调用
四、示例代码与解析
#include "stm32f1xx_hal.h"ADC_HandleTypeDef hadc1;void ADC1_Init(void)
{// ADC 时钟配置__HAL_RCC_ADC1_CLK_ENABLE();// GPIO 配置GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_0;GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// ADC 初始化hadc1.Instance = ADC1;hadc1.Init.ScanConvMode = DISABLE; // 单通道模式hadc1.Init.ContinuousConvMode = ENABLE; // 启用连续转换模式hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐hadc1.Init.NbrOfConversion = 1; // 转换次数HAL_ADC_Init(&hadc1);// ADC 通道配置ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = ADC_CHANNEL_0; // 通道 0sConfig.Rank = ADC_REGULAR_RANK_1; // 排名sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; // 采样时间HAL_ADC_ConfigChannel(&hadc1, &sConfig);// 启动 ADC 转换HAL_ADC_Start(&hadc1);
}uint16_t Read_ADC_Value(void)
{// 等待 ADC 转换完成if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK){return HAL_ADC_GetValue(&hadc1); // 获取转换结果}return 0;
}int main(void)
{HAL_Init();SystemClock_Config();ADC1_Init();while (1){uint16_t adc_value = Read_ADC_Value(); // 读取 ADC 值// 可在此添加对 adc_value 的处理代码}
}
在示例代码中,我们首先配置了 GPIOA 的 PA0 引脚为模拟模式,用于输入模拟信号。然后初始化 ADC1 模块,设置其为单通道模式、连续转换模式,并通过软件触发启动转换。接着配置 ADC 通道 0 的采样时间等参数。最后,在主循环中持续读取 ADC 转换结果,并可对结果进行后续处理。
五、典型应用场景
-
传感器信号采集
- 在温度传感器、压力传感器等模拟信号输出的传感器应用中,STM32 ADC 可实时采集传感器输出的模拟信号,并将其转换为数字信号,便于微控制器进行数据处理和分析。例如,通过 ADC 采集热敏电阻的电压变化,计算出当前环境温度。
-
音频信号处理
- 在音频信号采集与处理领域,ADC 可将麦克风等音频传感器输出的模拟音频信号转换为数字信号,为后续的音频信号滤波、编码等处理提供数据基础。STM32 ADC 的高分辨率和灵活配置特性,能够满足音频信号的高质量采集需求。
-
电源监测与电池管理
- 利用 ADC 监测电源电压、电流等参数,可实现电源状态监测和电池管理系统。例如,通过采集电池电压信号,实时判断电池电量状态,为设备的电源管理提供依据。
六、注意事项与调试技巧
-
采样时间选择
- 根据输入信号的频率和特性,合理选择 ADC 通道的采样时间。对于高频信号,可能需要较长的采样时间以确保采样精度;而对于低频信号,较短的采样时间可提高转换速度。
-
参考电压稳定性
- 确保 ADC 的参考电压(VREF)稳定,这是保证模数转换精度的关键。可使用外部稳压芯片或内部参考电压源为 ADC 提供稳定的参考电压。
-
信号完整性
- 注意模拟信号输入线路的布线,避免线路过长、与其他数字信号线交叉等,以减少干扰,保证模拟信号的完整性。必要时可使用滤波电容等元件对输入信号进行滤波。
-
调试工具使用
- 使用示波器或逻辑分析仪观察 ADC 输入信号的波形和特性,有助于排查信号采集过程中的问题。同时,通过修改 ADC 配置参数,观察转换结果的变化,快速定位配置错误。
掌握 STM32 ADC 的原理、配置与应用,能够为嵌入式系统开发中的模拟信号采集与处理任务提供坚实的技术支持,助力开发者实现更多创新性的项目应用。
相关文章:
STM32 ADC 模数转换器详解:原理、配置与应用
STM32 ADC 模数转换器详解:原理、配置与应用 在嵌入式系统中,模数转换(ADC)是实现传感器信号采集、信号处理等任务的关键环节。STM32 微控制器作为一款功能强大的 32 位微控制器,其内置的 ADC 模块为开发者提供了高效…...

[目标检测] YOLO系列算法讲解
前言 目标检测就是做到给模型输入一张图片或者视频,模型可以迅速判断出视频和图片里面感兴趣的目标所有的位置和它 的类别,而当前最热门的目标检测的模型也就是YOLO系列了。 YOLO系列的模型的提出,是为了解决当时目标检测的模型帧率太低而提…...
React 中,闭包陷阱
文章目录 前言1. 经典闭包陷阱示例过期状态问题 2. 解决方案2.1 正确声明依赖数组2.2 使用 useRef 捕获最新值**2.3 使用函数式更新(针对状态更新)****2.4 使用 useCallback 冻结闭包** **3. 异步操作中的闭包陷阱****事件监听示例** **4. 自定义 Hooks …...

.NET NativeAOT 指南
目录 1. 引言 2. 什么是 .NET NativeAOT? 2.1 NativeAOT 的定义 2.2 NativeAOT 与传统 JIT 的对比 2.3 NativeAOT 的适用场景 3. NativeAOT 的核心优势 3.1 性能提升 3.2 简化部署 3.3 更小的应用体积 3.4 知识产权保护 4. NativeAOT 的基本用法 4.1 环境…...

uniapp-商城-57-后台 新增商品(弹窗属性数据添加父级)
后台增加商品,需要添加相关的数据信息,这里还要添加属性,前面已经对相关的界面布局继续了编写。这里还要对页面添加的数据,置入到云数据库,继续永久保存,便于后期的使用。这里主要是讲属性数据 父级信息的添…...

摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程
摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…...
matlab多智能体网络一致性研究
一个基于连续时间多智能体系统(Multi-Agent Systems, MAS)的一阶一致性协议的MATLAB仿真代码,包含网络拓扑建模、一致性协议设计和收敛性分析。代码支持固定拓扑和时变拓扑,适用于学术研究。 1. 基础模型与代码框架 (1) 网络拓扑…...

Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
一、URP渲染管线 渲染管线是一系列渲染操作的集合,Unity提供了内置渲染管线(Built-In)和可编程渲染管线(SRP)两类渲染管线。内置渲染管线是Unity的默认渲染管线,其自定义选项有限。而可编程渲染管线可以通…...
C语言:在 Win 10 上,gcc 如何编译 gtk 应用程序
在 Windows 10 上使用 g(或 gcc)编译基于 GTK 的 C 语言程序是完全可行的,且相比 Tcc 更为推荐,因为 g(GNU 编译器套件)对 GTK 的支持更加完善,配置也更简单。以下是详细步骤和注意事项…...
阿里云CMH镜像迁移与SMC整机迁移对比及功能详解(同地域跨主体账号场景)
文章目录 一、核心功能对比二、CMH镜像迁移操作流程1.资源调研2.镜像共享3.迁移验证4.限制: 三、SMC整机迁移操作流程1.迁移源导入2.任务配置3.增量同步4.应用验证…...
用vue和go实现登录加密
前端使用CryptoJS默认加密方法: var pass CryptoJS.AES.encrypt(formData.password, key.value).toString()使用 CryptoJS.AES.encrypt() 时不指定加密模式和参数时,CryptoJS 默认会执行以下操作 var encrypted CryptoJS.AES.encrypt("明文&quo…...
政府数据开放试点企业如何抢占特许经营协议黄金席位
首席数据官高鹏律师团队 《中共中央办公厅 国务院办公厅关于 加快公共数据资源开发利用的意见》的落地,标志着数据从“封闭管理的行政资源”正式转变为“可流通的市场要素”。但机遇与风险从来是一枚硬币的两面——特许经营协议的黄金席位背后,隐藏着…...
CSS 锚点滑动效果的技术
CSS 锚点滑动效果的技术 引言 介绍锚点滑动效果的概念及其在网页设计中的重要性。简要说明 基本锚点链接 如何使用HTML中的<a>标签创建基本的锚点链接。示例代码: <a href"#section1">跳转到第一部分</a> <div id"section…...

mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题
因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置,如下图: 2. 然后打开终端,输入: sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源,还遇到已损坏…...

Echart地图数据源获取
DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...

GNSS数据自动化下载系统的设计与实现
摘要 本文详细介绍了三种不同设计的GNSS数据自动化下载系统,分别针对IGS观测数据、GRACE-FO Level-1B数据以及通过代理服务器获取数据的需求场景。系统采用Python实现,具备断点续传、完整性校验、异常处理和进度显示等核心功能。实验结果表明࿰…...
MySQL 中 JOIN 和子查询的区别与使用场景
目录 一、JOIN:表连接1.1 INNER JOIN:内连接1.2 LEFT JOIN:左连接1.3 RIGHT JOIN:右连接1.4 FULL JOIN:全连接二、子查询:嵌套查询2.1 WHERE 子句中的子查询2.2 FROM 子句中的子查询2.3 SELECT 子句中的子查询三、JOIN 和子查询的区别3.1 功能差异3.2 性能差异3.3 使用场…...
【深度学习-Day 12】从零认识神经网络:感知器原理、实现与局限性深度剖析
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
谈谈未来iOS越狱或巨魔是否会消失
2024年10月的预测,先说结论: 巨魔iOS17.1消失概率为99%。 因为巨魔强依赖的漏洞就是一个签名漏洞,攻击面有限又经过2轮修复,第3次出现漏洞的概率极低。而越狱的话由于系统组件和服务较多,所以出现漏洞概率高攻击面多&…...

Unity3D仿星露谷物语开发43之农作物生长
1、目标 把防风草种子种在地里,并展示植物种子,防风草种子将随着时间变化而生长成植株。 2、创建Crop.cs脚本 在Assets -> Scripts下创建新的目录命名为Crop,在其下创建新的脚本命名为Crop.cs。 代码如下: using System.C…...

从0到1上手Kafka:开启分布式消息处理之旅
目录 一、Kafka 是什么 二、Kafka 的基础概念 2.1 核心术语解读 2.2 工作模式剖析 三、Kafka 的应用场景 四、Kafka 与其他消息队列的比较 五、Kafka 的安装与配置 5.1 环境准备 5.2 安装步骤 5.3 常见问题及解决 六、Kafka 的基本操作 6.1 命令行工具使用 6.1.1 …...
GTS-400 系列运动控制器板卡介绍(三十四)---运动程序多线程累加求和
运动控制器函数库的使用 运动控制器驱动程序、dll 文件、例程、Demo 等相关文件请通过固高科技官网下载,网 址为:www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提前下载运动…...

Python爬虫如何应对网站的反爬加密策略?
在当今的互联网环境中,网络爬虫已经成为数据采集的重要工具之一。然而,随着网站安全意识的不断提高,反爬虫技术也越来越复杂,尤其是数据加密策略的广泛应用,给爬虫开发者带来了巨大的挑战。本文将详细介绍Python爬虫如…...

第一次经历项目上线
这几天没写csdn,因为忙着项目上线的问题,我这阶段改了非常多的前端bug哈哈哈哈,说几个比较好的bug思想! 这个页面算是我遇到的比较大的bug,因为我一开始的逻辑都写好了,询价就是在点击快递公司弹出弹框的时…...

Conda配置完全指南——Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南
本文同步发布在个人博客: Conda配置完全指南Conda 是一个开源的跨平台包管理与环境管理工具,广泛应用于数据科学、机器学习及 Python 开发领域。它不仅能帮助用户快速安装、更新和卸载第三方库,还能创建相互隔离的虚拟环境,解决不…...

Quasar组件 Carousel走马灯
通过对比两个q-carousel组件来,了解该组件的属性 官方文档请参阅:Carousel 预览 源代码 <template><div class"q-pa-md"><div class"q-gutter-md"><q-carouselv-model"slide"transition-prev&quo…...
AI日报 - 2024年5月17日
🌟 今日概览 (60秒速览) ▎🤖 大模型前沿 | OpenAI推出自主编码代理Codex;Google DeepMind发布Gemini驱动的编码代理AlphaEvolve,能设计先进算法;Meta旗舰AI模型Llama 4 Behemoth发布推迟。 Codex能并行处理多任务&…...
R语言数据框(datafram)数据的构建及简单分析
代码完成的功能: 创建数据集(数据框), 写入到文件中, 显示数据, 分组计算平均年龄, 在Rstudio中,创建R markdown或R notebook文件运行。以下是添加了注释的完整R代码࿰…...

风控域——风控决策引擎系统设计
摘要 本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具,可自动化、数据驱动地辅助或替代人工决策,广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能,包括自动化决策、动态规则管理、实时处…...

CAPL Class: TcpSocket (此类用于实现 TCP 网络通信 )
目录 Class: TcpSocketacceptopenclosebindconnectgetLastSocketErrorgetLastSocketErrorAsStringlistenreceivesendsetSocketOptionshutdown函数调用的基本流程服务器端的基本流程客户端的基本流程Class: TcpSocket学习笔记。来自CANoe帮助文档。 Class: TcpSocket accept /…...