在工作过程中,遇到这样一个产品,它基于 Cortex-M7 内核的 STM32F769 芯片,同时使用了 FreeRTOS
实时操作系统。
由于该产品使用电池供电,因此有着低功耗的需求。
接下来,我将简单描述一下 STM32 与 FreeRTOS 各自的低功耗特性,以及在配合使用时如何去实现产品的低功耗。
一、STM32F769 芯片的三种低功耗模式
STM32F769 支持三种低功耗模式,它们分别是:SLEEP、STOP和STANDBY,其省电能力依次增强。
SLEEP
在 SLEEP 模式下,只有 Cortex-M7 内核停止了工作,而外设仍然在运行。
在进入 SLEEP 模式后,所有中断均可唤醒 MCU,从而退出 SLEEP 模式。
STOP
在 STOP 模式下,内核停止工作,并且所有的时钟(如 HCLK, PCLK1, PCLK2
等)也停止工作,即所有外设停止工作,这里有一点要特别注意,此时 SYSTICK 也会被停掉。当然,我们产品中的 RTC
还在继续运行,因为它的时钟源为外部的 32.768K 晶振。
在进入 STOP 模式后,只有外部中断(EXTI)才能唤醒 MCU(由于 RTC 中断挂在外部中断线上,所以 RTC 中断也能唤醒
MCU)。
STANDBY
在 STANDBY 模式下,内核、所有的时钟、以及后备 1.2V 电源全部停止工作。
从 STANDBY 模式中唤醒后,系统相当于执行了一次复位操作,程序会从头来过。