接下来我们就详细的看一下这三者有何区别。
1、睡眠(Sleep)模式
● 进入睡眠模式
进入睡眠模式有两种指令:WFI(等待中断)和WFE(等待事件)。根据Cortex-M内核的SCR(系统控制)寄存器可以选择使用立即休眠还是退出时休眠,当 SCR 寄存器的 SLEEPONEXIT(bit1)位为 0 的时候使用立即休眠,当为 1的时候使用退出时休眠。
CMSIS(Cortex 微控制器软件接口标准)提供了两个函数来操作指令 WFI 和 WFE,我们可以 直接使用这两个函数:__WFI和__WFE。FreeRTOS 系统会使用 WFI 指令进入休眠模式。
● 退出休眠模式
如果使用 WFI 指令进入休眠模式的话那么任意一个中断都会将 MCU 从休眠模式中唤醒,如果使用 WFE指令进入休眠模式的话那么当有事件发生的话就会退出休眠模式,比如配置一个 EXIT 线作为事件。
当 STM32F103 处于休眠模式的时候 Cortex-M3 内核停止运行,但是其他外设运行正常,比如 NVIC、SRAM等。休眠模式的功耗比其他两个高,但是休眠模式没有唤醒延时,应用程序可以立即运行。
2、停止(Stop)模式
停止模式基于 Cortex-M3 的深度休眠模式与外设时钟门控,在此模式下 1.2V 域的所有时钟都会停止,PLL、HSI 和 HSE RC振荡器会被禁止,但是内部 SRAM 的数据会被保留。调压器可以工作在正常模式,也可配置为低功耗模式。如果有必要的话可以通过将 PWR_CR 寄存器的FPDS位置 1 来使 Flash 在停止模式的时候进入掉电状态,当 Flash 处于掉电状态的时候MCU从停止模式唤醒以后需要更多的启动延时。停止模式的进入和退出如表所示:
3、待机(Standby)模式
相比于前面两种低功耗模式,待机模式的功耗最低。待机模式是基于 Cortex-M3 的深度睡眠模式的,其中调压器被禁止。1.2V 域断电,PLL、HSI振荡器和 HSE 振荡器也被关闭。除了备份区域和待机电路相关的寄存器外,SRAM 和其他寄存器的内容都将丢失。待机模式的进入和退出如表所示:
退出待机模式的话会导致 STM32F1 重启,所以待机模式的唤醒延时也是最大的。实际应用中要根据使用环境和要求选择合适的待机模式。
-
嵌入式
+关注
关注
5068文章
19008浏览量
302989 -
STM32
+关注
关注
2265文章
10870浏览量
354694 -
低功耗
+关注
关注
10文章
2362浏览量
103581 -
FreeRTOS
+关注
关注
12文章
483浏览量
61992
发布评论请先 登录
相关推荐
评论