STM32F407 ADC 模式详解:单次转换、连续转换、扫描模式、非扫描模式

前言

在 STM32F407 中,ADC(模数转换器)模块常用于采集模拟信号,比如读取光敏电阻、电压、电流、温度传感器等。STM32 的 ADC 模式较多,初学者常常会混淆:

  • 单次转换和连续转换的区别
  • 扫描模式和非扫描模式分别用于什么场景

本篇文章将全面讲解 STM32F407 中 ADC 的四种核心工作模式,带你从概念到应用搞懂它们的配置和组合。

一、ADC 模式分类总览

STM32F407 的 ADC 模式可以从两个维度理解:

分类方向模式名称功能说明
转换行为单次转换模式转换一次即停止,不自动继续
连续转换模式一次启动后自动不断采样
通道采样方式扫描模式支持多个通道依次采样
非扫描模式只采样一个通道

这两个方向的模式可以自由组合使用,形成不同的采样逻辑,例如“连续+非扫描”、“单次+扫描”等。

二、单次转换模式(Single Conversion Mode)

详细解释(通俗+专业)

在单次转换模式下,ADC 只进行一次采样与转换,完成后会自动停止。

通俗理解:你按一下按钮,它就采一口“模拟信号”,转成数字值,然后就不动了,想要再采一次,必须手动再触发。

专业说明

  • 控制寄存器:ADC_CR2.CONT = 0(关闭连续模式)
  • 触发方式:软件触发或外部事件
  • 一次转换后,EOC(转换完成标志)位置位,ADC停止工作

使用场景示例:

  • 需要用户操作或定时器触发时才采样一次,例如测量温度、电压快照等

三、连续转换模式(Continuous Conversion Mode)

详细解释(通俗+专业)

在连续转换模式下,ADC 在启动后会自动不断重复采样,适用于实时性要求较高的场合。

通俗理解:你一打开开关,它就像一个不停喝水的家伙,一直把模拟信号喝进来转成数字,除非你强行关掉它。

专业说明

  • 控制寄存器:ADC_CR2.CONT = 1(打开连续模式)
  • 启动后,ADC 会在每次转换完成后,自动立即开始下一次
  • 通常配合 DMA 或中断读取,提高效率

使用场景示例:

  • 实时电压监控、传感器数据流读取等

四、扫描模式(Scan Mode)

详细解释(通俗+专业)

扫描模式允许 ADC 在一次触发下,自动依次转换多个通道的模拟信号,适用于同时采集多个传感器数据的应用场景。

通俗理解:ADC 就像一个机器人,它按照你设定的清单,依次去采集第1个通道、第2个通道、第3个……直到完成一轮。

专业说明

  • 控制寄存器:ADC_CR1.SCAN = 1(打开扫描模式)
  • 转换通道顺序通过 SQR1~SQR3 配置,例如通道数量、通道顺序等
  • 每个通道转换结果会顺序写入 ADC_DR 数据寄存器(通常配合 DMA 搬运)

使用场景示例:

  • 项目中使用多个 ADC 输入(如光敏、电压、气体、温度传感器),一次采样全部获取

五、非扫描模式(No Scan Mode)

详细解释(通俗+专业)

非扫描模式是默认模式,表示一次转换只采样一个通道的模拟电压值,适用于只需要采一个信号源的应用场景。

通俗理解:ADC 盯着一个传感器看,一次只测它,不关心其他通道。

专业说明

  • 控制寄存器:ADC_CR1.SCAN = 0(关闭扫描)
  • 采样通道由 ADC_SQR3 指定,例如 ADC_SQR3 = 5 表示采样 ADC_IN5
  • 数据输出在 ADC_DR 寄存器中

使用场景示例:

  • 项目中只有一个传感器输入,逻辑简单,代码结构清晰

六、四种模式组合行为汇总

STM32 的这两类模式是可以任意组合的。以下是组合后的行为总结:

扫描模式连续模式行为描述
关闭关闭只采一个通道,采一次停止
关闭开启只采一个通道,自动不断采样
开启关闭多个通道依次采样,采一轮停止
开启开启多个通道依次采样,不断重复整个过程

这些组合中的“多通道自动轮询”非常适合使用 DMA 自动搬数据,避免主循环里占用 CPU 资源。

七、常见应用组合推荐

实际需求推荐配置
读取一个通道,一次采样非扫描 + 单次转换
实时读取一个通道非扫描 + 连续转换
轮流读取多个通道(采一轮)扫描 + 单次转换
连续轮流读取多个通道扫描 + 连续转换 + DMA

八、示例代码(使用寄存器配置)

以下代码展示了一个连续采样 ADC_IN10 通道的最简初始化配置:

void ADC1_Init(void)
{// 1. 打开时钟RCC->APB2ENR |= (1 << 8);       // ADC1 时钟使能RCC->AHB1ENR |= (1 << 0);       // GPIOA 时钟使能// 2. 设置PA0为模拟模式(假设IN0)GPIOA->MODER |= (3 << (0 * 2)); // 模拟模式// 3. ADC 配置ADC1->CR1 &= ~(1 << 8);         // 关闭扫描模式ADC1->CR2 |= (1 << 1);          // 开启连续转换ADC1->SQR3 = 0;                 // 通道0ADC1->CR2 |= (1 << 0);          // 使能ADCADC1->CR2 |= (1 << 30);         // 软件启动
}

如果你需要扫描两个通道,配合 DMA,还可以增加以下配置:

ADC1->CR1 |= (1 << 8);             // 开启扫描模式
ADC1->SQR1 = (2 - 1) << 20;        // 转换2个通道
ADC1->SQR3 = (10 << 0) | (11 << 5); // 第一个是IN10,第二个是IN11

九、结尾总结

STM32F407 的 ADC 模式虽然看起来复杂,但只要掌握以下两点,就能灵活应对各种应用场景:

  1. 是否连续转换?(转换一次就停 or 一直采样)
  2. 是否扫描多个通道?(单通道 or 多通道轮流)

掌握这两对组合,就能轻松根据项目需求灵活配置 ADC。

如果你正在调试 ADC,建议一开始使用非扫描 + 单次转换调试通道,然后逐步扩展到扫描 + DMA 模式,循序渐进、效率最高。


如果你需要后续内容如 DMA 配置讲解、ADC 中断读取等,也可以留言告诉我,后续我会写专门的篇章补充。希望本文对你有帮助,感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/83751.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/83751.shtml
英文地址,请注明出处:http://en.pswp.cn/web/83751.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源模型应用落地-工具使用篇-从零开始搭建Qdrant Web UI-可视化管理工具-Windows(十)

一、前言 Qdrant 是一个高性能的向量搜索引擎&#xff0c;广泛应用于相似性搜索、推荐系统和大规模数据检索等场景。虽然其原生 API 提供了强大的功能&#xff0c;但对于开发者和运维人员来说&#xff0c;缺乏直观的可视化界面常常增加了使用门槛。为了解决这一问题&#xff0c…

高频交易技术:订单簿分析与低延迟架构——从Level 2数据挖掘到FPGA硬件加速的全链路解决方案

高频交易技术&#xff1a;订单簿分析与低延迟架构——从Level 2数据挖掘到FPGA硬件加速的全链路解决方案 一、引言&#xff1a;高频交易的技术本质 1.1 速度即利润的微观战场 数据揭示&#xff1a;据NYSE实测&#xff0c;每降低1微秒延迟可获得年化$700-1500万套利窗口&#…

基于生成对抗网络(GAN)的图像生成与编辑:原理、应用与实践

前言 生成对抗网络&#xff08;GAN&#xff09;是近年来深度学习领域中最具影响力的技术之一。自2014年由Ian Goodfellow等人首次提出以来&#xff0c;GAN已经在图像生成、图像编辑、风格转换等多个领域取得了令人瞩目的成果。GAN的核心思想是通过生成器&#xff08;Generator&…

pytorch基本运算-梯度运算:requires_grad_(True)和backward()

引言 前序学习进程中&#xff0c;已经对pytorch基本运算中的求导进行了基础讨论&#xff0c;相关文章链接为&#xff1a; 导数运算pytorch基本运算-导数和f-string-CSDN博客 实际上&#xff0c;求导是微分的进一步计算&#xff0c;要想求导的前一步其实是计算微分&#xff1…

idea64.exe.vmoptions配置

这个idea64.exe.vmoptions文件是用于配置 IntelliJ IDEA&#xff08;64位版本&#xff09;运行时的 Java 虚拟机&#xff08;JVM&#xff09;参数。这些参数直接影响到 IDEA 的性能、内存使用、调试能力和行为。 下面是对文件中每一行配置的详细解读&#xff1a; -Xms2048m 作…

齐次变换矩阵相乘的复合变换:左乘与右乘的深度解析

在三维几何变换中,齐次变换矩阵相乘是实现复杂变换的核心方法。本文将通过一个包含四个变换步骤的完整示例,深入探讨齐次变换矩阵左乘和右乘的区别,并结合 Python sympy 库的代码实现,详细阐述变换过程和结果差异。 二维齐次坐标的旋转变换 在二维齐次坐标系中,一个点可以…

5g LDPC编译码-LDPC编码

目录 1、LDPC编码基础知识 2、5g的LDPC编码 2.1 LDPC分块: 2.2 LDCP编码 2.3 校验位的产生 1、LDPC编码基础知识 LDPC属于线性分组码,线性分组码的基本知识如下: 编码后的码字是由初始二进制序列与生成矩阵在二进制域相乘后得到,生成矩阵与校验矩阵,校验矩阵与编码后…

OpenVINO使用教程--resnet分类模型部署

OpenVINO使用教程--resnet分类模型部署 本节内容模型准备推理测试分析&总结本节内容 OpenVINO 根据AI技术类型将部署任务分成传统模型模型部署和生成式AI模型部署,传统模型指的是各种CNN小模型,这部分部署只需要OpenVINO包,具体安装教程可以参考之前的章节:OpenVINO环境…

无字母数字webshell的命令执行

在Web安全领域&#xff0c;WebShell是一种常见的攻击手段&#xff0c;通过它攻击者可以远程执行服务器上的命令&#xff0c;获取敏感信息或控制系统。而无字母数字WebShell则是其中一种特殊形式&#xff0c;通过避免使用字母和数字字符&#xff0c;来绕过某些安全机制的检测。 …

C++斯特林数在C++中的数学理论与计算实现1

一、 斯特林数概述 1.1 组合数学中的核心地位 斯特林数&#xff08;Stirling Numbers&#xff09;是组合数学中连接排列、组合与分划问题的核心工具&#xff0c;分为两类&#xff1a; 第一类斯特林数&#xff08;Stirling Numbers of the First Kind&#xff09;&#xff1a…

[C++] STL大家族之<map>(字典)容器(附洛谷)

map-目录 使用方法头文件与声明定义基本操作 使用方法 头文件与声明定义 头文件是: #include <map>我们这样声明一个字典: map</*key_type*/, /*value_type*/> /*map_name*/; // 例子: map<int, char> mp;这里稍作解释: key_type是你每个键值对中的键的…

使用 Flutter 在 Windows 平台开发 Android 应用

以下是完整的开发流程&#xff0c;包括环境搭建、代码实现和应用发布&#xff0c;帮助你开发一个具有地图显示、TCP 通信功能的 Android 应用。 一、环境搭建 1. 安装 Flutter SDK 从 Flutter 官网 下载最新稳定版 SDK解压到本地目录&#xff08;如 D:\flutter&#xff09;添…

【模板】埃拉托色尼筛法(埃氏筛)

一、算法简介 在数论与编程竞赛中&#xff0c;求解 [ 1 , n ] [1,n] [1,n] 范围内的所有质数是常见的基础问题。埃拉托色尼筛法&#xff08;Sieve of Eratosthenes&#xff09; 是一种古老而高效的算法&#xff0c;可以在 O ( n log ⁡ log ⁡ n ) O(n \log \log n) O(nlogl…

AI Agent实战 - LangChain+Playwright构建火车票查询Agent

本篇文章将带你一步步构建一个智能火车票查询 Agent&#xff1a;你只需要输入自然语言指令&#xff0c;例如&#xff1a; “帮我查一下6月15号从上海到南京的火车票” Agent就能自动理解你的需求并使用 Playwright 打开 12306 官网查询前 10 条车次信息&#xff0c;然后汇总结果…

RabbitMQ的交换机和队列概念

&#x1f3ea; 场景&#xff1a;一个外卖平台的后台系统 假设你开了一家在线外卖平台&#xff1a; 饭店是消息的生产者&#xff08;Producer&#xff09;顾客是消息的消费者&#xff08;Consumer&#xff09;你开的外卖平台就是RabbitMQ消息系统 &#x1f501; 第一部分&…

德国马克斯·普朗克数学研究所:几何朗兰兹猜想

2025年科学突破奖 4月5日在美国洛杉矶揭晓&#xff1a;数学突破奖&#xff1a;德国马克斯普朗克数学研究所&#xff1a;几何朗兰兹猜想 德国马克斯普朗克数学研究所&#xff08;Max Planck Institute for Mathematics, MPIM&#xff09;在几何朗兰兹猜想的研究中扮演了核心角色…

TerraFE 脚手架开发实战系列(一):项目架构设计与技术选型

TerraFE 脚手架开发实战系列&#xff08;一&#xff09;&#xff1a;项目架构设计与技术选型 前言 在前端开发中&#xff0c;项目初始化往往是一个重复且繁琐的过程。每次新建项目都需要配置 webpack、安装依赖、设置目录结构等&#xff0c;这些重复性工作不仅浪费时间&#…

准确--CentOS 7.9在线安装docker

一、安装Docker前的准备工作 操作系统版本为CentOS 7.9&#xff0c;内核版本需要在3.10以上。确保能够连通互联网&#xff0c;为避免网络异常&#xff0c;建议关闭Linux的防火墙&#xff08;生产环境下请根据实际情况设置防火墙出入站规则&#xff09;。 # 查看内核版本 sudo…

中兴B860AV1.1强力降级固件包

中兴B860AV1.1强力降级固件包 关于中兴b860av1.1顽固盒子降级教程终极版 将附件解压好以后&#xff0c;准备一个8G以下的U盘重新格式化为FAT32格式后&#xff0c;并插入电脑 将以下文件及文件夹一同复制到优盘主目录下&#xff08;见下图&#xff09; 全选并复制到U盘主目录下&…

nacos-作为注册中心与springcloud整合(三)

前一篇文章nacos-简介和初体验&#xff08;一&#xff09;我们已经在服务器部署了nacos应用了。 在另外一篇文章中nacos-作为配置中心与springcloud整合&#xff08;二&#xff09;已经作为配置中心整合到springcloud 接下来让我们尝试把nacos作为注册中心和springcloud中整合&…