STM32 ADC 注入通道实战:给紧急采样开一条 VIP 通道
我早年做过一个电机驱动板母线电流用 ADC 规则通道连续采在后台画波形、算 RMS。一切正常直到有次负载卡死电流唰地窜上去。我代码里明明写了电流超阈值就关 PWM结果 MOS 管还是冒了烟。后来抓波形才看懂规则通道那会儿正在扫四个通道要等这一轮扫完才轮到电流通道而这一轮扫完的功夫电流已经从 5A 飙到 30A 了——保护窗口就这么被排队等没了。那次之后我才知道 ADC 还有个注入通道Injected Channel它就是给这种现在、立刻、马上要采一下的信号开的一条 VIP 通道规则通道再忙也得给它让路。一、为什么需要注入通道先搞清楚两个概念。ADC 的通道分两组规则通道Regular正常排队的通道按你在 CubeMX 里排的 Rank 顺序一个接一个转。开了连续模式就一直转不停。你平时HAL_ADC_Start采的就是它。注入通道InjectedVIP 通道。它平时不转一旦注入触发来了当前正在进行的那个规则转换一结束ADC 立刻切到注入组把注入通道采完然后自动回到规则组接着转。整个过程硬件自己调度你代码不用插手。关键点注入通道的结果存在自己的JDRx寄存器里绝不覆盖规则通道的DR。所以规则通道在后台稳稳采波形注入通道在前面插一脚采个紧急信号两边数据谁也不污染谁。什么时候用得上凡是规则通道正在连续干活但有个信号必须立刻采一下的场景过流 / 过压保护上面那个惨案阈值报警温度、电压越限瞬间采样确认按键中断里想立刻读一下某个模拟量消抖任何优先级比常规采集高的采样实际用法通常是用TIM3 触发规则通道做等间隔连续采集波形同时再开一条由 TIM2或外部事件触发的注入通道专门负责过流保护这类紧急采样——一个 ADC 硬件常规采集和紧急采集两不误。二、CubeMX 怎么配ADC 配置界面里通道 Rank 是分两组的上面Regular Conversion规则组下面Injected Conversion注入组。规则组External Trigger TIM3_TRGO边沿 RisingContinuous DisableDMA 开启双缓冲。注入组本篇重点勾上Injected Conversion Mode。Number Of Conversions注入组填你要插队的通道数比如 1就采过流那一路。JEXTSEL注入外部触发源选另一个定时器的 TRGO比如 TIM2_TRGO或者外部触发EXTI line 15。★ 注意别和规则组抢同一个 TIM3 TRGO否则两个触发源打架。JEXTEN注入触发边沿选Rising Edge。★ 这一项必须开否则注入触发信号进不来注入通道永远不会启动——这是后面坑 1 要说的。注入组的 Rank、采样时间独立配和规则组互不干扰。开启注入转换完成中断在 NVIC 里把ADC的JEOC或ADC_EOSMP/JEOS中断打开这样采完能进回调函数。配完生成代码下面就是让两路同时跑的最少代码。三、最少的代码规则通道用 TIM3 触发 DMA 双缓冲注入通道用HAL_ADCEx_InjectedStart_IT启动之后就交给硬件和中断你不用再管它什么时候采。#defineOVERCURRENT_THRESH3500// 过流阈值12位满量程4095下的当量按实际标定// 规则通道TIM3 触发连续采集波形DMA 双缓冲搬HAL_TIM_Base_Start(htim3);HAL_ADC_Start_DMA(hadc1,(uint32_t*)adc_buf,2*ADC_BUF_LEN);// 注入通道由 CubeMX 配的 JEXTSEL 触发源自动驱动// 这里只负责启动 开中断具体什么时候采由硬件触发决定HAL_ADCEx_InjectedStart_IT(hadc1);// 注入转换完成 —— 紧急采样到了进这里处理voidHAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef*hadc){if(hadc-InstanceADC1){// ADC_INJECTED_RANK_1 对应注入组里 Rank 1 的通道uint16_tcur_protectHAL_ADCEx_InjectedGetValue(hadc1,ADC_INJECTED_RANK_1);if(cur_protectOVERCURRENT_THRESH){motor_emergency_stop();// 过流立刻关 PWM、封 MOS}}}这段在干嘛规则通道在后台用 TIM3 稳稳采波形CPU 基本不操心一旦过流信号JEXTSEL 那个触发源来了硬件自动暂停规则序列、插队采一下注入通道采完进回调你在里面读JDRx判断阈值超了就保护。规则通道的连续采集不被你的代码打断只是被硬件暂时借道一下采完自动续上。读注入结果有个专门函数HAL_ADCEx_InjectedGetValue第二个参数传ADC_INJECTED_RANK_1/2/3/4对应注入组里排第几的通道。千万别拿规则通道的HAL_ADC_GetValue去读那是DR读出来不是注入的值。四、真正会坑你的几个点1. JEXTEN 边沿没开。最高频的坑。CubeMX 里注入触发边沿默认可能是 Disabled你配了 JEXTSEL 触发源结果注入死活不触发。记住JEXTEN 必须选 Rising或 Falling注入才有触发。2. 注入和规则用同一触发源打架。两个都想用 TIM3 TRGO结果规则通道被注入触发源干扰采样节奏乱套。注入组老老实实换一个触发源TIM2 TRGO、TIM4 TRGO、或者外部 EXTI 都行别和规则组抢。3. 读错寄存器。注入结果在JDRx你图省事用HAL_ADC_GetValue读DR得到的要么是规则通道的值、要么是 0紧急判断全错。注入专用值必须用HAL_ADCEx_InjectedGetValue。4. 注入打断规则通道导致 DMA 错位。这是最阴的一个。注入插队后不同 STM32 型号对规则序列接下来怎么走行为不同有的从被打断那个通道继续有的从头重启整个规则序列。如果你的规则组是多通道扫描 DMA 双缓冲序列重启意味着 DMA 缓冲里的前后顺序对不上波形数据错位。务必翻你芯片的参考手册 ADC 章节确认注入后的规则行为拼接 DMA 缓冲时按实际行为来。5. 注入 Rank 顺序 JDRx 下标。注入组里 Rank 1 对应ADC_INJECTED_RANK_1、Rank 2 对应ADC_INJECTED_RANK_2。配的时候 Rank 顺序和读的时候 rank 参数对不上就读串了通道——明明想读电流读出来的是温度。6. 注入触发太频繁打乱规则节奏。保护信号要是抖比如触点弹跳、干扰毛刺注入触发一个接一个来规则通道被反复借道正常波形采集基本废了。触发源前面加硬件滤波 / 软件去抖或者只在状态机允许时使能注入中断。7. 注入组长度配错。Number Of Conversions注入组填的和你实际排的通道数不一致ADC 转换次数对不上JDRx里只有部分有效读越界 rank 拿到 0。8. 自动注入AUTO_INJECT模式误解。CubeMX 里有个Auto Injected Conversion开了它会在每个规则序列结束后自动跑一遍注入组——这不是插队是规则序列尾巴上附加一段。它和外部触发随时插队是两码事。你要的是随时插队就别开 AUTO_INJECT靠 JEXTSEL 触发源来驱动。五、完整例程骨架两路并进的最小系统规则通道 TIM3 触发 DMA 双缓冲连续采波形注入通道用 TIM2或外部事件触发 中断随时插队采过流回调里读JDRx做保护判断。规则通道负责看趋势注入通道负责保命各干各的。// 启动三连TIM3 跑规则触发DMA 搬规则数据注入通道待命由 JEXTSEL 触发HAL_TIM_Base_Start(htim3);HAL_ADC_Start_DMA(hadc1,(uint32_t*)adc_buf,2*ADC_BUF_LEN);HAL_ADCEx_InjectedStart_IT(hadc1);// 之后主循环处理规则波形HAL_ADCEx_InjectedConvCpltCallback 里做紧急保护规则通道管常规采集注入通道管紧急插队——两路各司其职一个 ADC 芯干两件事。适合过流 / 过压保护、阈值报警、按键即时采样、需要在连续采集中随时插一下的场景。不适合纯单通道低速采样那规则通道HAL_ADC_GetValue一把梭就够了杀鸡不用开 VIP 通道。进阶玩法如果还需要双 ADC 同步模式Dual ADC——两个 ADC 同时采样做 IQ 两路或差分信号再配上本篇的注入通道就能搭出一套同步采样 紧急保护的高端采集架构。

相关新闻

2026年西宁做城市生命线安全工程建设的公司有哪些?

2026年西宁做城市生命线安全工程建设的公司有哪些?

青藏高原东麓、湟水河谷两岸,西宁这座城市最要紧的家底大多埋在地下。两千多米的海拔让冬季格外漫长,集中供热一开就是大半年,燃气管线顺着老城街巷铺进千家万户,河谷地形又让排水防涝在每年汛期成为绕不开的考题。老城区管网服役…

2026/8/8 9:15:49 阅读更多 →
成都GEO优化常见问题,蜀航云创

成都GEO优化常见问题,蜀航云创

随着成都实体经济数字化进程加快,不管是实体商家、产业园区、生产工厂还是政企单位,GEO(地理位置信息)优化已经成为引流获客、精细化运营的核心环节。但不少成都企业在做GEO优化的过程中踩了不少坑,钱花了却没拿到预期…

2026/8/8 9:15:49 阅读更多 →
5个高效场景深度解析:如何用智能工具自动获取百度网盘提取码

5个高效场景深度解析:如何用智能工具自动获取百度网盘提取码

5个高效场景深度解析:如何用智能工具自动获取百度网盘提取码 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 面对海量百度网盘加密资源,传统…

2026/8/8 9:15:49 阅读更多 →

最新新闻

Git TUI工具实战:tig与lazygit提升代码历史探索与团队协作效率

Git TUI工具实战:tig与lazygit提升代码历史探索与团队协作效率

在版本控制与团队协作中,Git 无疑是开发者最核心的工具之一。然而,面对复杂的项目历史、交错的提交记录和冗长的差异对比,传统的命令行 git log 或 git diff 输出往往显得不够直观,尤其是在需要快速定位某个关键变更或理解一段…

2026/8/8 10:16:15 阅读更多 →
LNMP架构(四):mysql数据库

LNMP架构(四):mysql数据库

目录 一、mysql安装 1.1下载 1.2升级cmake 1.3升级gcc 1.4安装依赖性 1.5初始化 二、部署phpmyadmin 三、主从复制 3.1mysql同步 3.2master配置 3.3slave配置 3.4测试 3.5再添加一个slave 3.6可能遇到的问题 四、gtid模式 4.1master配置 4.2slave配置 五、半…

2026/8/8 10:16:15 阅读更多 →
HarmonyOS 5.0.0 LazyForEach 删除后状态错位怎么查:稳定 key、状态仓库和局部删除怎么拆

HarmonyOS 5.0.0 LazyForEach 删除后状态错位怎么查:稳定 key、状态仓库和局部删除怎么拆

HarmonyOS 5.0.0 LazyForEach 删除后状态错位怎么查:稳定 key、状态仓库和局部删除怎么拆问题先缩小到列表层 HarmonyOS 5.0.0 及以上版本里,列表页越来越常见:搜索结果、收藏列表、购物清单、消息列表、设置项列表,本质上都会遇到…

2026/8/8 10:16:15 阅读更多 →
AI Agent上下文管理:Gliding Horse实现动态感知与智能压缩

AI Agent上下文管理:Gliding Horse实现动态感知与智能压缩

1. 项目概述:当Agent不再“耳背” 在AI Agent的开发实战中,我们常常会遇到一个令人头疼的“耳背”现象:你精心设计的Agent,在面对一段冗长的用户指令或多轮对话历史时,仿佛突然失去了理解能力,要么答非所问…

2026/8/8 10:16:15 阅读更多 →
Windows内网提权技术:漏洞利用与配置错误实战解析

Windows内网提权技术:漏洞利用与配置错误实战解析

1. Windows内网提权技术全景解析在企业内网渗透测试中,Windows系统提权是最关键的突破环节之一。根据我多年实战经验,内网提权主要分为两大技术路线:漏洞提权(Exploit-based)和配置错误提权(Misconfigurati…

2026/8/8 10:16:15 阅读更多 →
Vue 3插槽技术详解:从基础到高级应用

Vue 3插槽技术详解:从基础到高级应用

1. 为什么我们需要插槽技术 在Vue组件开发中,我们经常会遇到这样的场景:一个组件的大部分结构和样式是固定的,但某些部分需要根据使用场景动态变化。比如一个模态框组件,它的外层容器、关闭按钮、遮罩层等都是固定的,但…

2026/8/8 10:15:14 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →