1. 基本思路
对于stm32的ADC多通道采样,由于不是每个通道都具备转换结果寄存器,因此在多通道采样时通常需要采用DMA,但是考虑到敏感场合DMA错误或导致ADC Overrun,从而导致待控制的Power Stage故障。鉴于此,考虑采用Auto Injection模式配和一个连续采样的Regular通道实现多通道连续采样,此时连续采样的规则通道和注入通道交替进行,从而实现所设定的通道依次连续采样。经测算,采用此方法采样25通道,所需时间在2us以内。
此时可用的通道数为5个,转换结果分别存放与RDATA和JDATA1-4,如下图所示。
2. 实现方法
以下采用STM32CubeIDE说明实现方法。
(1) 电源和时钟配置
基于手册给出的限制进行设置。
对于多ADC单端情况,设置电源Range1。
由PLLP引出ADC的时钟,fADC<52Mhz。
ADC配置页,取时钟分频如下。
(2) 通道和采样模式设置
通道选择见上图,6、7、15通道被选中,取单端模式。设置一个规则采样通道,并使之为连续模式,新值overwrite,软件触发转换。
使能注入转换,设置所需Rank数和响应的通道,选择Auto Injected Mode。
对于采样时间的选择,不妨选择与手册中测试条件相同的设置,快速通道取2.5 Cycles,慢速通道取6.5 Cycles。
3. 使用方法
- 在ADC初始化后,采用函数
HAL_ADC_Start(&hadc)
和HAL_ADCEx_InjectedStart(&hadc1)
启动ADC的多通道连续采样; - 直接读取ADC的相应RDATA寄存器和JDATA寄存器即可获取转换值,如:
A1_6 = hadc1.Instance->DR;
A1_7 = hadc1.Instance->JDR1;
A1_15 = hadc1.Instance->JDR2;
Provided by 昨夜三更雨, see https://www.cnblogs.com/zysgy/p/15811834.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)