STM32 ADC 注入通道实战:给紧急采样开一条 VIP 通道

发布时间:2026/9/25 1:44:47

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/9/21 15:45:09

鸿蒙多任务到底稳不稳?后台保活和内存调度是怎么做到的

一、同时开微信抖音办公,不杀后台 多应用并行是最考验系统调度能力的场景。即便同时运行鸿蒙版微信、鸿蒙版抖音与其他办公软件,系统也能保持稳定流畅——这类场景恰恰最能看出调度水平:系统会智能判断任务优先级,把资源倾斜给正在…

2026/9/23 6:15:13

从零构建高可用Agent Skills:设计哲学、核心组件与工程实践

1. 项目概述:为什么“Agent Skills”是当前AI应用的核心最近和几个做AI应用落地的朋友聊天,发现一个挺有意思的现象:大家手里都有不错的LLM(大语言模型)基础能力,但一到具体业务场景,效果就大打…

2026/9/19 22:07:42

鸿蒙系统小红书隐私保护——应用锁开启指南

小红书作为日常高频使用的社交类应用,其中保存着大量的个人隐私数据、私人笔记和社交互动记录。为了确保隐私安全,鸿蒙系统提供了应用锁功能,支持为小红书配置密码或生物识别解锁。本文将手把手教你在鸿蒙系统中为小红书开启应用锁的全部流程…

2026/9/25 1:42:39

VMware Workstation 17 下载安装全攻略:从官网下载到虚拟机部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 1:42:39

DDR4信号完整性调试实战:从眼图分析到Write Leveling调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 1:37:38

电涡流传感器位移测量中的材料影响机制与工程补偿

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码