通过以上介绍,我们了解了进入待机模式的方法,以及设置
KEY_UP
引脚用于把
STM32F4
从待机模式唤醒的方法。低功耗相关操作函数和定义在
HAL
库文件
stm32f4xx_hal_pwr.c
和头
文件
stm32f4xx_hal_pwr.h
中。具体步骤如下:
1
)使能
PWR
时钟。
因为要配置
PWR
寄存器,所以必须先使能
PWR
时钟。
在
HAL
库中,使能
PWR
时钟的方法是:
__HAL_RCC_PWR_CLK_ENABLE(); //
使能
PWR
时钟
2)
设置
WK_UP
引脚作为唤醒源。
使能时钟之后后再设置
PWR_CSR
的
EWUP
位,使能
WK_UP
用于将
CPU
从待机模式唤
醒。在
HAL
库中,设置使能
WK_UP
用于唤醒
CPU
待机模式的函数是:
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); //
设置
WKUP
用于唤醒
3
)设置
SLEEPDEEP
位,设置
PDDS
位,执行
WFI
指令,进入待机模式。
进入待机模式,首先要设置
SLEEPDEEP
位(详见《
STM32F3
与
F4
系列
Cortex M4
内核
编程手册》,第
214
页
4.4.6
节)
,
接着我们通过
PWR_CR
设置
PDDS
位,使得
CPU 进入深度
睡眠时进入待机模式,最后执行
WFI
指令开始进入待机模式,并等待
WK_UP
中断的到来。在
库函数中,进行上面三个功能进入待机模式是在函数
HAL_PWR_EnterSTANDBYMode
中实现
的:
void HAL_PWR_EnterSTANDBYMode(void);
4
)最后编写
WK_UP
中断服务函数。
因为我们通过
WK_UP
中断(
PA0
中断)来唤醒
CPU
,所以我们有必要设置一下该中断函
数,同时我们也通过该函数里面进入待机模式。关于外部中断服务函数以及中断服务回调函数
的使用方法请参考外部中断实验,这里我们就不做过多讲解。
通过以上几个步骤的设置,我们就可以使用
STM32F4
的待机模式了,并且可以通过
KEY_UP
来唤醒
CPU
,我们最终要实现这样一个功能:通过长按(
3
秒)
KEY_UP
按键开机,并且通过
DS0
的闪烁指示程序已经开始运行,再次长按该键,则进入待机模式,
DS0
关闭,程序停止运
行。类似于手机的开关机。