1、STM32的低功耗
众所周知,功耗一直是嵌入式开发中的重要考虑因素,在便携式设备和小型设备中需要考虑到设备的功耗,这就要求低功耗设备在执行任务时尽可能减少能源消耗,以延长电池寿命或降低能源消耗。
在STM32的众系列中,特别是STM32F103、STM32F4 , STM32L还有STM32U系列,提供了多种低功耗模式和机制,可以降低系统功耗,延长电池寿命或减少能源消耗。包括多个低功耗模式、时钟管理、外设控制等。
本期我们将以STM32F103为例介绍STM32的低功耗模式。
硬件设备:STM32F103C8T6最小系统板
2、低功耗模式
STM32F1的芯片手册中提到STM32的低功耗总共有三种模式:休眠模式,停止模式,待机模式。并且还可以通过降低系统时钟的方式来降低功耗。接下来我们详细介绍这三种模式的区别。
从表中我们可以看出三种低功耗模式的进入条件以及唤醒条件,其中低功耗程度从Sleep休眠模式到Standby待机模式递增。
在待机模式中,需要通过Wake Up引脚的上升沿来唤醒系统(或者RTC报警,RST复位以及看门狗)
3、睡眠模式
当我们配执行了WFI或WFE模式(等待中断或等待事件)来进入睡眠模式。通过配置SLEEPONEXIT位来选择是否立刻进入睡眠模式。
当清除该位时,系统就会立刻进入低功耗模式。当该位置1时,就会等待中断或者事件之后进入低功耗模式。
WFI(中断)和WFE(事件)模式退出睡眠模式的情况并不相同,如果我们是从WFI进入的睡眠模式,那么当中断事件发生时,就会退出低功耗模式,例如外部中断,定时器中断等。
如果从WFE模式进入的睡眠模式,那么也提供了两种唤醒方式。
4、停止模式
停止模式可以认为是深度睡眠,在停止模式中,将会关闭挂载在1.8V工作域中的时钟,还有像HSI和HSE等时钟也会被关闭,SRAM和寄存器中的值将会保存下来,IO口的状态会保持在之前的运行模式的状态。
该表提供了如何进入停止模式以及如何退出停止模式。稍后会在程序中使用。
5、待机模式
待机模式是功耗最低的模式,不仅仅关闭了各个时钟,还关闭了包括1.8V工作域内的外设与时钟。SRAM和各寄存器内的值也会丢失。
该表提供了如何进入待机模式以及退出待机模式,退出待机模式的事件是:WKUP引脚接收到上升沿,RTC时钟报警以及RST引脚触发复位和看门狗复位。
需要注意的是唤醒之后系统处于复位状态。
6、程序实现
首先创建一份STM32的基础工程,接着在HAL库中我们可以使用如下代码进入低功耗模式:
// 1. 等待 3 秒后进入睡眠模式
HAL_Delay(3000); // 延时 3 秒
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); // 进入睡眠模式
// 在这里,MCU进入睡眠模式后,将等待中断唤醒
// 2. 等待 3 秒后进入停止模式
HAL_Delay(3000); // 延时 3 秒
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); // 进入停止模式
// 在这里,MCU进入停止模式后,也会等待中断唤醒
// 3. 等待 3 秒后进入待机模式
HAL_Delay(3000); // 延时 3 秒
HAL_PWR_EnterSTANDBYMode(); // 进入待机模式
// 在待机模式下,MCU会停止所有时钟,直到外部唤醒事件发生
由于设备欠缺,无法测试具体他们的功耗如何,因此本期就先到这里。