硬汉嵌入式论坛

 找回密码
 立即注册
搜索
查看: 16|回复: 1
收起左侧

STM32L496 低功耗时钟树怎么选?19 组实测告诉你

[复制链接]

10

主题

15

回帖

45

积分

新手上路

积分
45
发表于 昨天 19:13 | 显示全部楼层 |阅读模式
本帖最后由 CacheRivulet 于 2026-10-9 19:34 编辑

STM32L496 低功耗时钟树怎么选?19 组实测告诉你
一句话结论:用内部 RC 时钟,CPU密集任务频率开高,干完就睡;IO密集任务降低主频,保持时钟域精简,减少外设时钟常开开销。




测试方法
程序是一个典型的周期性任务,RTC 定时唤醒,干一段固定计算量的活,然后回到 Stop 模式:


LSE 32.768kHz 全程运行,19 组测试只改变唤醒后的系统时钟来源和频率。LED 在波形上打标记,用来切分唤醒段和工作段。

低功耗分析仪上一轮完整的波形长这样:平时趴在 2.3uA,唤醒后电流抬起来,干完活掉回去。


对比最费的那组,形状一样,但"台子"明显更高:




发现 1:固定计算量的 CPU 密集任务,主频越高总能耗越低
直觉上频率高电流大,应该更费电。实测正好相反:


原因是能耗 = 电流 × 时间。计算量固定时,频率翻倍,耗时减半,但电流涨不到两倍,因为芯片有一块和频率无关的底电流(稳压器、Flash、外设)。频率越高,这块底电流"计时"越短。画成面积一眼就明白:


MSI 32MHz 的工作段实测:5.33mA 跑 1.67s。


这就是低功耗设计常说的 Race to Sleep:快点干完,快点睡觉。

有一个例外:HSI→PLL 32M(2.63uAh)只比 HSI 16M 直出(2.65uAh)省一点点,PLL 自身的电流基本抵掉了升频的收益。HSI 要拉到 64M 才明显占优。



发现 2:同样的频率,时钟来源差很多
HCLK 都是 8MHz,CPU 干活一样快,能耗却能差到 2.4 倍:


两个坑:

  • HSE 比 MSI 贵。 同样 8MHz 直出,HSE 工作电流 1.97mA,MSI 只要 1.41mA,晶振驱动电路本身就要耗电。
  • HSI 介于两者之间。 同频下 HSI 每个点都比 MSI 费电(8MHz 多 26%,32MHz 多 6.5%),但都比 HSE 省。
  • 先倍频再分频最浪费。 PLL 64M÷8 要 3.31mA,比 HSE 直出多 68%。分频只降了 CPU 频率,PLL 自己仍在 64MHz 下运行。需要多少频率,就让 PLL 直接输出多少。


发现 3:唤醒速度 MSI 最快,但对本程序影响不大
MSI 和 HSI 都是内部 RC,唤醒后很快可用;HSE 要等晶振起振,PLL 要等锁定。MSI 直出最快(100~320us),HSI 次之(370~730us),HSE 相关的配置都在 1.2ms 以上:


放到分析仪上看差别很直观。MSI 32MHz 唤醒只要 100us:


HSE→PLL 64M÷8 要 4.1ms,中间一大段在等时钟稳定:


不过唤醒能耗只有 0.1~1.4nAh,工作段是 2.46uAh 起,差了三个数量级。只有工作任务很短(毫秒级)时,唤醒速度才值得优化。



发现 4:休眠电流和主时钟无关
19 组全部是 2.3uA。进入 Stop 后高速时钟全关,只剩 LSE 和 RTC,主时钟怎么配都不影响睡眠。



选型建议
1. 首选 MSI。 不用外部晶振,唤醒快、电流低。开启 LSE 后打开 MSIPLLEN,MSI 会被 LSE 自动校准,UART 等外设够用。MSI 32MHz 直出和最优值只差 0.4%,不用 PLL,工作峰值电流 5.33mA,只有 HSI→PLL 64M(10.59mA)的一半,对纽扣电池这类内阻大的电源更友好。

2. 在允许范围内把 HCLK 拉高,让任务尽快做完再睡。需要 64MHz 算力时,用 HSI→PLL 比 HSE→PLL 更省(2.46 vs 2.57uAh)。

3. 确实需要高精度时钟才用 HSE,并让 PLL 直接输出目标频率,不要"高配低用"。

4. 还能更省: HCLK ≤ 26MHz 时可把内核电压切到 Range 2(本次未测)。

5. 任务类型决定频率策略。 本文 19 组都是固定计算量的 CPU 密集任务,高主频省电的前提是 CPU 一直在算。IO 密集型任务的时间花在等外设上,升主频缩短不了这段等待,工作段电流照旧在涨。这类任务值得临时把主频切到外设速率附近,本文没有这组实测数据,需要按任务类型自己拉一张"任务类型 × 时钟组合"的能耗表,逐类找到最优组合再固定下来。



附录:完整实测数据
组合HCLK休眠电流唤醒电流唤醒耗时唤醒能耗工作电流工作耗时工作能耗
MSI 8MHz8MHz2.3uA1.71mA320us151pAh1.41mA6622ms2.62uAh
MSI 16MHz16MHz2.3uA3.08mA170us145pAh2.74mA3316ms2.52uAh
MSI 32MHz32MHz2.3uA5.18mA100us143pAh5.33mA1671ms2.47uAh
MSI 4M → PLL 32M ÷48MHz2.3uA509.86uA1990us281pAh2.06mA6704ms3.84uAh
MSI 4M → PLL 32M ÷216MHz2.3uA725.38uA1020us205pAh3.23mA3351ms3.01uAh
MSI 4M → PLL 32M ÷132MHz2.3uA1.11mA550us170pAh5.33mA1658ms2.46uAh
HSE 8MHz 直出8MHz2.3uA3.11mA1210us1.11nAh1.97mA6768ms3.70uAh
HSE 8M → PLL 8M ÷18MHz2.3uA3.31mA1270us1.17nAh2.16mA6753ms4.05uAh
HSE 8M → PLL 16M ÷116MHz2.3uA3.31mA1230us1.13nAh3.43mA3366ms3.21uAh
HSE 8M → PLL 32M ÷132MHz2.3uA3.29mA1240us1.13nAh5.94mA1665ms2.75uAh
HSE 8M → PLL 32M ÷48MHz2.3uA1.95mA2260us1.22nAh2.62mA6766ms4.93uAh
HSE 8M → PLL 64M ÷88MHz2.3uA1.20mA4100us1.37nAh3.31mA6762ms6.22uAh
HSE 8M → PLL 64M ÷416MHz2.3uA1.91mA2190us1.16nAh4.49mA3354ms4.19uAh
HSE 8M → PLL 64M ÷232MHz2.3uA2.56mA1520us1.08nAh6.85mA1670ms3.18uAh
HSE 8M → PLL 64M ÷164MHz2.3uA3.18mA1250us1.10nAh11.11mA831ms2.57uAh
HSI 16M ÷28MHz2.3uA898uA730us182.2pAh1.78mA6701ms3.31uAh
HSI 16MHz 直出16MHz2.3uA1.11mA370us114.3pAh2.85mA3358ms2.65uAh
HSI 16M → PLL 32M ÷132MHz2.3uA1.22mA410us139.4pAh5.66mA1674ms2.63uAh
HSI 16M → PLL 64M ÷164MHz2.3uA952uA460us121.7pAh10.59mA837ms2.46uAh
前三名相差约 0.4%,每组只测了一次,可能在测量误差以内,可视为打平。




build 09 October 2026 19:32 (UTC+8)
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 昨天 23:37 | 显示全部楼层
做的很专业!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-10-10 06:32 , Processed in 0.129053 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表