睡眠模式
概念
在睡眠模式下,CPU 时钟关闭,其他时钟均正常工作,电压调节器正常工作,所有的 I/O 管脚都保持它 们在运行模式时的状态,调节器 LDO 以正常功耗模式提供 1.2V 电源(CPU 内核、内存和内嵌外设)。
当 SLEEPDEEP=0,SLEEPONEXIT=0 时,执行 WFI 或 WFE 指令,此时可立即进入睡眠模式。 SLEEP-ON-EXIT 模式
当 SLEEPDEEP=0,SLEEPONEXIT=1 时,执行 WFI 指令,此时当系统从最低优先级的中断处理程序中 退出时,可立即进入睡眠模式。
有如下两种方式进入睡眠模式
__WFI(); 中断唤醒,只要产生外设中断,都能使系统退出睡眠模式。
__WFE(); 事件唤醒,存在两种方式的唤醒事件,使系统退出睡眠模式:
使能任一外设中断(未在 NVIC 中使能)且使能 SEVONPEND 位可以产生唤醒事件。 系统唤醒后,需清除外设中断挂起位和 NVIC 通道挂起位。
配置内部 EXINT 线为事件模式来产生唤醒事件。 从执行 WFE 指令进入睡眠模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
WFI使用
直接在主循环调用__WFI(); SLEEPDEEP和SLEEPONEXIT两个寄存器保持默认0;循环每次执行到这就会进入立刻睡眠模式,每次按键按下才会进入下一次循环。
深度睡眠模式
概念
比普通睡眠模式更加省电,在深度睡眠模式下,所有 1.2V 时钟关闭,HICK 和 HEXT 振荡器都被关闭,电压调节器以正常工作或低 功耗工作状态给 1.2V 域供电,所有 I/O 管脚都保持它们在运行模式时的状态,SRAM 和寄存器内容保持。
使用
使能PWC外设时钟crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK,TRUE);
调用函数进入深度睡眠pwc_deep_sleep_mode_enter(PWC_DEEP_SLEEP_ENTER_WFI);
【注意】进入睡眠模式之后再次烧录代码需要按一下复位键之后立即烧录
实验中会发现printf打印的全都是0或者乱码,这是因为深度睡眠模式为了省电关闭了HICK 和 HEXT 晶振,所以我们在中断退出睡眠模式之后需要重新调用system_clock_config();打开晶振。
待机模式
概念
待机模式可最大限度的降低系统功耗,在该模式下,电压调节器关闭,只有 VDD/VDDA 域维持供电,其 他的 1.2V 供电区域,PLL、HICK 和 HEXT 振荡器都被断电。寄存器和 SRAM 中的内容也会丢失。 通过设置 Cortex-M4 系统控制寄存器中的 SLEEPDEEP 位,设置电源控制寄存器(PWC_CTRL)中 LPSEL 位,并清除电源控制及状态寄存器(PWC_CTRLSTS)中的 SWEF 位的情况下,执行 WFI 或 WFE 指令即可进入待机模式。
唤醒方式:
发生 WKUPx 引脚的上升沿
ERTC 闹钟事件的上升沿
ERTC 入侵事件
ERTC 时间戳
NRST 引脚上外部复位
WDT 复位
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hdhfkfnbru/article/details/133276427
|