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

利用 STM32 TIMER 触发 ADC 实现分组转换

1、问题描述

使用 STM32G4 系列芯片开发产品,用到其中一个 ADC 模块的多个通道,他希望使
用 TIMER 来定时触发这几个通道的转换。不过他有两点疑惑。第一,他期望定时器触发这几个
通道是每触发一次则只转换一个通道,这样依次触发转换,而不是触发一次就把几个通道都转换
完结。他不知这样是否可行?第二,既然是 TIMER 每触发一次就转换一次,如果说某个通道正
在转换时来了触发,这个触发事件是否会丢失?是否会导致最终转换的数据混乱。

2、问题分析

先说他的第一问题。多个通道进行转换,定时器每触发 1 次则转换 1 个通道,这是可以做到
的。我们可以采用 ADC 模块的间断分组转换模式,我们可以指定每次启动 ADC 所需要转换的通
道数。比方现在用到 6 个 ADC 通道需要做转换,我们可以指定每次触发启动时转换 2 个通道,
这样 3 次触发后 6 个通道即告完成 1 轮转换。这里截取 STM32G4 系列参考手册有关 ADC 规则
通道实施间断转换【或称非连续转换】的相关描述如下:
图 1、STM32G4 ADC 间断转换模式介绍截图
在这里插入图片描述
具体到客户的需求,他希望每次触发只转换 1 个通道,我们在配置时将上面截取信息中的 n
设置为 1 即可。
现在说他的第2个问题。当某通道正在进行ADC时,此时出现的触发事件是否会被无视掉,
其实是会的。ADC 模块并没有对外来触发事件提供缓冲能力,针对这点,在各个系列的参考手册
上都明确的描述。我下面截取了几个系列的相关描述如下几幅图所示。
图 2、有关 ADC 转换时出现触发事件的处理情形
在这里插入图片描述
如果出现触发事件被忽略掉,在多通道间断转换模式下,是否会出现转换数据的混乱呢,按
理不会出现,因为只是有些触发事件被无视掉了,ADC 的转换顺序并没有乱,这个顺序没乱,结
果就不该乱。

3、结果验证

我们不妨使用 STM32G474 芯片做下相关验证,看看当 TIMER 触发事件的速率快到一定程
度时是否会出现触发事件被无视、转换结果是否混乱。这里使用片内两个 ADC 专用通道,一个
是测试𝑉𝐵𝐴𝑇信号的,另一个是测试内部𝑉𝑅𝐸𝐹𝐼𝑁𝑇信号的。这两个信号的转换结果相对稳定、数据相
差有明显,便于观察。ADC 转换结果使用 DMA 进行传输。
先使用 STM32CubeMx 进行配置。【注意:ADC 的启动触发选择 TIMER 的 TRGO 信号,
具体就是 TIMER 的更新事件。TIMER 的时基参数配置就不截图了,验证过程中也要不停修改时间参数,以改变触发频率。另外,我把那两个被采样信号的采样时间故意设置比较大,当然,本
身这两个通道对采样时间也有最小需求,这里就不延伸了。】
在这里插入图片描述
在这里插入图片描述
配置完成后创建工程,先把 TIMER 的时间参数,这里先把溢出周期设置够久,保证溢出周
期足够长于转换通道的最长转换时间即可。【只是为了演示效果,时间无须精确】
我让 TIMER 溢出 10 次,亦即产生 10 更新事件去触发 ADC,同时在定时器更新中断里对更
新事件次数进行统计,变量是 cnt_Update。 ADC 结果通过 DMA 传输到内存数组。我们运行程
序查看结果【见下图】:

从上面结果可以看到,TIMER 产生 10 次更新事件,ADC 也依次转换了 10。通道转换结果
0x130y 和 0x143y 很有规律【数据结尾的 y 因为数字略有波动故用 y 表示,同时区别于 x】。
我们尝试将 TIMER 溢出周期慢慢调短,即溢出频率加快。但总的溢出次数不变,依然是 10
次。我们在看看下面的情形。
在这里插入图片描述
从上面结果看到,尽管 TIMER 产生了 10 次触发,但 ADC 转换结果才 5 个。不过转换顺序
及结果并无混乱,结合前面结果来看,总是先出现 0x130y 结果、然后 0x143y,这样交替进行。
当然,我在实际测试时做了多次验证,这里只是代表性地放一张截图过来。整个过程中随着
TIMER 溢出频率的提升,会发现转换结果变少,但没见到输出结果顺序混乱的。

随着我将 TIMER 溢出周期不断调短,最后可以发生只能见到一次转换结果了。如下图所
示:
在这里插入图片描述
从上图结果来看,虽然只有 1 个转换结果,即对第一个通道做了转换,第 2 通道都没有来得
及转换,但定时器的溢出次数依然是 10 次,只是除了 1 次外的其它 9 次都被无视掉了。

4、问题拓展

既然谈到 ADC 的触发事件,我们也该知道基于外部事件对 ADC 进行触发时,其触发频率
也是有限制的,这点在各个芯片的 ADC 特性参数那里都有介绍。我这里做部分截图过来,抛砖
引玉。在具体应用时我们可以 针对性地阅读查看。
图 3、STM32 ADC 特性有关外部触发频率的信息截图
在这里插入图片描述

4、问题小结

本文着重针对客户的疑问作了相关解释,并做了相关验证确认。在涉及多通道 ADC 转换,同时又不期望一次触发就将整个序列转换完成时,考虑使用 ADC 的间断分组转换模式或许是个不错的方案。

本文档参考ST官方的《【应用笔记】LAT1362+利用STM32+TIMER触发ADC实现分组转换》文档。

相关文章:

利用 STM32 TIMER 触发 ADC 实现分组转换

1、问题描述 使用 STM32G4 系列芯片开发产品,用到其中一个 ADC 模块的多个通道,他希望使 用 TIMER 来定时触发这几个通道的转换。不过他有两点疑惑。第一,他期望定时器触发这几个 通道是每触发一次则只转换一个通道,这样依次触发…...

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享

一、问题背景 随着近年来智能终端设备和多媒体社交网络平台的飞速发展,多媒体数据呈现海量增长 的趋势,使当今主流的社交网络平台充斥着海量的文本、图像等多模态媒体数据,也使得人 们对不同模态数据之间互相检索的需求不断增加。有效的信…...

Java12~14 switch语法

JDK8以后的语法没学习了,现在时代发展这么快,所以得加紧时间学习了。JDK12只有一个特性就是switch语法,算是比较容易学习的一个版本吧。总体来说就是三部分内容。具体内容可以看JEP-325的内容。 箭头语法 每个case可以放箭头了。以下是一个例…...

小狐狸ChatGPT智能聊天系统源码v2.7.6全开源Vue前后端+后端PHP

测试环境包括Linux系统的CentOS 7.6,宝塔面板,PHP 7.4和MySQL 5.6。网站的根目录是public, 使用thinkPHP进行伪静态处理,并已开启SSL证书。 该系统具有多种功能,包括文章改写、广告营销文案创作、编程助手、办公达人…...

The Rise and Potential of Large Language Model Based Agents: A Survey

OpenAI AI的应用研究主管Lilian Weng发布了关于AI Agents的《大语言模型(LLM)支持的自主代理》,在文章中她定义了基于LLM构建AI Agents的应用框架:AgentLLM(大型语言模型)记忆(Memory&#xff0…...

【GPT-SOVITS-06】特征工程-HuBert原理

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...

ros小问题之差速轮式机器人轮子不显示(rviz gazebo)

在rviz及gazebo练习差速轮式机器人时,很奇怪,只有个机器人的底板及底部的两个万向轮,如下图, 后来查看相关.xacro文件,里面是引用包含了轮子的xacro文件,只需传入不同的参数即可调用生成不同位置的轮子&…...

网络安全实训Day5

写在前面 昨天忘更新了......讲的内容不多,就一个NAT。 之前记的NAT的内容:blog.csdn.net/Yisitelz/article/details/131840119 网络安全实训-网络工程 NAT 公网地址与私网地址 公网地址 可以在互联网上被寻址,由运营商统一分配全球唯一的I…...

【Unity入门】详解Unity中的射线与射线检测

目录 前言一、射线的创建方法二、射线检测1、Raycast()Raycast()不使用射线RayRaycast()使用射线Ray 2、RaycastAll()使用射线RayRaycastAll() 不使用射线Ray 3、射线的碰撞信息 三、示例四、具体使用场景射线的调试方法1、Debug.DrawLine()2、Debug.DrawRay利用Gizmos 前言 碰…...

实验11-2-5 链表拼接(PTA)

题目: 本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下: struct ListNode {int data;struct ListNode *next; }; 函数接口定义: struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2); 其中lis…...

Mybatis Plus + Spring 分包配置 ClickHouse 和 Mysql 双数据源

目录 一、背景 二、各个配置文件总览(文件位置因人而异) 2.1 DataSourceConfig 2.2 MybatisClickHouseConfig (ClickHouse 配置类) 2.3 MybatisMysqlConfig(Mysql 配置类) 2.4 application.propertie…...

27-3 文件上传漏洞 - 文件类型绕过(后端绕过)

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 导语 后端校验由开发决定是检测文件后缀,还是文件内容。 文件类型绕过(Content-Type) 1)MIME 类型 定义:MIME(Multipurpose Internet Mail Extensions)类型是一种标准,…...

widget一些控件的使用

QRadioButton使用 先使用ui界面拖拽创建radio button #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->male->setChecked(true);//选中按钮ui->o…...

Python基础(七)之数值类型集合

Python基础(七)之数值类型集合 1、简介 集合,英文set。 集合(set)是由一个或多个元素组成,是一个无序且不可重复的序列。 集合(set)只存储不可变的数据类型,如Number、…...

电脑充电器能充手机吗?如何给手机充电?

电脑充电器可以给手机充电吗? 电脑充电器可以给手机充电,但前提是电脑充电器的功率输出与手机的功率匹配且接口匹配。 假设电脑充电器的输出功率为5V/2A,手机也支持5V/2A的输入功率。 只要接口匹配,就可以使用电脑充电器给手机充…...

矩阵中移动的最大次数

文章目录 所属专栏:BFS算法 题目链接 思路如下: 1.首先我们需要从第一列开始遍历,寻找每一个都能够满足条件的位置,将它插入到数组里面 2.第一列遍历完了后我们先判断第一列的数是否都满足条件插入到数组里面,如果数组为空&#…...

Linux:系统初始化,内核优化,性能优化(3)

优化系统的文件句柄数(全局) 也就是系统的最大文件数量 查看最大数量 cat /proc/sys/fs/file-max 当我们的服务器有非常大的一个数据并发的时候十几二十万的文件需要去配置,可能这个是远远不够的,我们就要去修改 vim /etc/sy…...

使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发

在快节奏的移动应用程序开发世界中,速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时,开发人员可以创建无…...

微软 CEO Satya Nadella 的访谈

Nicolai: 大家好。我刚经历了人生中最不可思议的事情,我有幸采访了微软的 CEO、Satya Nadella。微软现在是全球市值最高的公司。真是太棒了,请继续关注。 第一章 微软的发展与平台转变 Nicolai: Satya,你是全球市值最高公司的 CEO&#xff…...

万界星空科技商业开源MES,技术支持+项目合作

商业开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境:jdk11tomcatmysql8springbootmaven 可以免费使用,需要源码价格便宜,私信我获取。 一、系统概述: MES制造执…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...