目录
默认情况下,系统复位或者上电复位之后,微控制器会进入运行模式,在运行模式下,CPU通过HCLK提供时钟,执行程序代码。
在CPU不需要运行时,可以根据需求选择系统提供的低功耗模式来节省功耗。
系统提供了3个低功耗模式:
● 睡眠模式(Cortex™-M4F 内核停止,外设保持运行)
● 停止模式(所有时钟都停止)
● 待机模式(1.2 V 域断电)
此外,可通过下列方法之一降低运行模式的功耗:
● 降低系统时钟速度
● 不使用 APBx 和 AHBx 外设时,将对应的外设时钟关闭
睡眠模式
睡眠模式有2中进入机制:立即休眠、退出时休眠。(由SLEEPONEXIT位决定 )
立刻休眠:执行WFI或WFE,STM32立即进入睡眠模式,唤醒后程序会从暂停的地方继续运行。
退出时休眠:执行WFI或WFE,STM32会等待STM32从中断处理程序中退出时进入睡眠模式,唤醒后程序从暂停的地方继续运行。
•在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态
•WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
•WFE指令进入睡眠模式,可被唤醒事件唤醒
其中,唤醒事件可以通过以下方式产生:
● 在外设的控制寄存器使能一个中断,但不在 NVIC 中使能,同时使能 Cortex™-M4F 系 统控制寄存器中的 SEVONPEND 位。当 MCU 从 WFE 恢复时,需要清除相应外设的中断挂起位和外设 NVIC 中断通道挂起位(在 NVIC 中断清除挂起寄存器中)。
● 配置一个外部或内部 EXTI 线为事件模式。当 CPU 从 WFE 恢复时,因为对应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或 NVIC 中断通道挂起位。
停止模式
在停止模式下,1.2 V 域中的所有时钟都会停止,PLL、HSI 和 HSE RC 振荡器也被禁止。内部 SRAM 和寄存器内容将保留。(停止模式:调压器还在工作,所以内部SRAM和寄存器内容会保留)
待机模式
待机模式,调压器关闭,1.2V域断电。PLL、HSI振荡器和HSE振荡器将关闭。处了备份域和待机电路中的寄存器外,SRAM和寄存器内容会丢失。
待机模式下的 I/O 状态 在待机模式下,除以下各部分以外,所有 I/O 引脚都处于高阻态:
● 复位引脚(仍可用)
● RTC_AF1 引脚 (PC13)(如果针对入侵、时间戳、RTC 闹钟输出或 RTC 时钟校准输出 进行了配置)
● WKUP 引脚 (PA0)(如果使能)
扩展——RTC复用功能从停止模式和待机模式唤醒
RTC复用功能可以从低功耗模式唤醒MUC。复用功能包括RTC闹钟(闹钟A和闹钟B)、RTC唤醒事件、RTC入侵事件和RTC时间戳事件。
其中,RTC闹钟或RTC唤醒事件,不需要依赖外部中断即可将系统从低功耗模式唤醒(自动唤醒模式)。
通过 RTC 复用功能从停止模式唤醒器件
● 要通过 RTC 闹钟事件从停止模式唤醒器件
a) 将 EXTI 线 17 配置为检测外部信号的上升沿(中断或事件模式)
b) 使能 RTC_CR 寄存器中的 RTC 闹钟中断
c) 配置 RTC 以生成 RTC 闹钟
● 要通过 RTC 入侵事件或时间戳事件从停止模式唤醒器件
a) 将 EXTI 线 21 配置为检测外部信号的上升沿(中断或事件模式)
b) 使能 RTC_CR 寄存器中的 RTC 时间戳中断,或者使能 RTC_TAFCR 寄存器中的 RTC 入侵中断
c) 配置 RTC 以检测入侵事件或时间戳事件
● 要通过 RTC 唤醒事件从停止模式唤醒器件
a) 将 EXTI 线 22 配置为检测外部信号的上升沿(中断或事件模式)
b) 使能 RTC_CR 寄存器中的 RTC 唤醒中断
c) 配置 RTC 以生成 RTC 唤醒事件 通过 RTC 复用功能从待机模式唤醒器件
● 要通过 RTC 闹钟事件从待机模式唤醒器件
a) 使能 RTC_CR 寄存器中的 RTC 闹钟中断
b) 配置 RTC 以生成 RTC 闹钟
● 要通过 RTC 入侵事件或时间戳事件从待机模式唤醒器件
a) 使能 RTC_CR 寄存器中的 RTC 时间戳中断,或者使能 RTC_TAFCR 寄存器中的 RTC 入侵中断
b) 配置 RTC 以检测入侵事件或时间戳事件
● 要通过 RTC 唤醒事件从待机模式唤醒器件
a) 使能 RTC_CR 寄存器中的 RTC 唤醒中断
b) 配置 RTC 以生成 RTC 唤醒事件
RTC 复用功能唤醒标志安全清零顺序
如果在 PWR 唤醒标志 (WUTF) 清零之前将所选 RTC 复用功能置 1,则出现下一事件时无法 检测到相关功能,因为检测操作只在信号上升沿到来时执行一次。 为了避免 RTC 复用功能所映射到的引脚发生跳变,并确保器件从停止模式和待机模式正常退出,建议在进入待机模式之前按照以下顺序进行操作:
● 使用 RTC 闹钟从低功耗模式唤醒器件时
a) 禁 RTC 闹钟中断(RTC_CR 寄存器中的 ALRAIE 或 ALRBIE 位)
b) 将 RTC 闹钟 (ALRAF/ALRBF) 标志清零
c) 将 PWR 唤醒 (WUF) 标志清零
d) 使能 RTC 闹钟中断
e) 重新进入低功耗模式
● 使用 RTC 唤醒从低功耗模式唤醒器件时:
a) 禁止 RTC 唤醒中断(RTC_CR 寄存器中的 WUTIE 位)
b) 将 RTC 唤醒 (WUTF) 标志清零
c) 将 PWR 唤醒 (WUF) 标志清零
d) 使能 RTC 唤醒中断
e) 重新进入低功耗模式
● 使用 RTC 入侵从低功耗模式唤醒器件时:
a) 禁止 RTC 入侵中断(RTC_TAFCR 寄存器中的 TAMPIE 位)
b) 将入侵 (TAMP1F/TSF) 标志清零
c) 将 PWR 唤醒 (WUF) 标志清零
d) 使能 RTC 入侵中断
e) 重新进入低功耗模式
● 使用 RTC 时间戳从低功耗模式唤醒器件时:
a) 禁止 RTC 时间戳中断(RTC_CR 寄存器中的 TSIE 位)
b) 将 RTC 时间戳 (TSF) 标志清零
c) 将 PWR 唤醒 (WUF) 标志清零
d) 使能 RTC 时间戳中断
e) 重新进入低功耗模式