STM32低功耗模式实践
扫描二维码
随时随地手机看文章
STM32一共有三种低功耗模式,睡眠模式、停止模式以及待机模式。
其中,睡眠模式时内核停止运行,但外设仍在工作,所有外设的时钟不会被关闭。
停止模式,除了Cortex-M3内核停止外,所有外设时钟也被关闭,可以选择使能内部时钟,SRAM和寄存器内容被保留,IO口保持为进入睡眠前的状态。
待机模式时,所有1.8V电源部分全部断电,SRAM和寄存器内容被丢失,这最为省电的一种方式,但是唤醒后就丢失了记忆。
本文选择使用停止模式,要低功耗,又要唤醒后继续运行,那stm32低功耗模式可以做到多省电呢?我们看看停止模式和待机模式下的电流标称值。
我在stm32f103的一个开发板上实验了下停止模式的RC时钟唤醒以及外部中断唤醒,使用一个100欧的电阻测板子的耗电电流,发现基于RC时钟唤醒的停止模式时整板电流居然只有30uA!真的非常厉害。这也是我更换了一个低功耗LDO(待机4uA)的功劳!由于没有使能任何外设,只使能了内部40K低速振荡器,因而与系统的标称值已经非常接近。如果使用IO唤醒,那么要使能该IO的相应外设,实测睡眠时高达1.1mA。这两种唤醒模式可以被用于两种不同的场景,比如RC定时唤醒用于主动上报的数据采集器,外部唤醒的机制用于运动触发唤醒机制。
手册标准值
实测值
RC定时唤醒
睡眠
25uA
30uA(26uA+4uA)
运行
30-70mA
24mA
外部中断唤醒
睡眠
25uA+外设
1.1mA
运行
30-70mA
25mA