当前位置: 首页 > 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制造执…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...