最近在使用低功耗模式产品,比如STM32L051C8T6。

这款产品的低功耗设计非常优秀。比如STOP模式大家经常使用的,可以做到nA级别。

但是,如果只是STOP模式低功耗,运行模式高,电池寿命还是短。

首先介绍下STOP模式:
a. 在这个模式下一定可以做到400nA的电流
b. 如果做不到,请考虑是否将全部IO配置为模拟输入模式
c. 是否外围挂有其他元器件。

运行模式功耗主要来自这几个地方
1. HSE / LSE 的外部晶振功耗肯定比相对应的HSI / MSI / LSI要高
2. 尽量关闭PLL,这个东西消耗电流达到了100uA
3. 运行主频是很耗电的,够用就好,尽量使用HSE 4M或MSI 2M / 1M这种方式
4. HCLK是很多人不注意的地方,其实HCLK也很耗电,对其分频可以节省电能
5. 电压也与功耗 有关,虽然关系不大,也是可见的关系,3.3V比1.8V的电压,功耗还是大了很多
6. 只有Range 3模式,核心电压才会最低,这个模式下也实现了最低运行功耗。Range 3可以使用HSE MSI实现,HSE模式1M 2M 4M主频,MSI的时候60多Khz到4.2Mhz的主频


经过我测试(示波器+高精度万用表测量,2.2v供电)
HSE 4.00Mhz无源晶振:不经过任何分频连接到SYSCLK中,在HCLKDIV=2M时,运行功耗为362uA。
HSE 4.00Mhz无源晶振:不经过任何分频连接到SYSCLK中,在HCLKDIV=1M时,运行功耗为288uA。

也就说如果用HSE外部晶振,建议使用4M晶振,2M别想了太特殊了不通用。如果你的外部总线要求不高,可以对总线进行DIV分频,分的越低功耗越小。

那能不能再低一些?答案是能的,使用MSI这个L系列特殊的中级内部振荡器:
MSI 1048Khz主频,不做任何分频,HCLK也是1048Khz的时候,功耗122uA
MSI 2097Khz的时候,功耗213uA

挺牛逼吧!122uA意味着,这颗芯片的工作时电压达到了其他芯片的休眠级别!

MSI不精准!
OK,确实有问题,MSI振荡器准确性不够,可能导致比如串口、Systick、Delay这些出现异常,但是能解决啊。我发现国内特别特别少有文章讨论这个。我这里说下我们的解决办法:
A. MSI内部振荡器的精准度是+/- 1%出厂,超过0~25度环境温度变化可能精度降低到+/- 3%或更高。
B. 外挂LSE 32.768K晶振经过软件校准(我另外一篇文章讲了)后可以做到+/- 0.5%
C. 可以实现通过芯片温度检测,或比对实现动态校准
D. 校准时瞬间电流消耗为200uA一下就完事

 

最后,大家可以用STM32CubeMX生成模型来设置成功,当然这个东西直接生成的代码实在是不习惯。感觉特别别扭,有种被强奸的感觉。


以上数据都是经过示波器测量出结果,不是照本宣科的。