![](https://img-blog.csdnimg.cn/img_convert/f0ec2e9863816eb4e481273155239e3e.png)
![](https://img-blog.csdnimg.cn/img_convert/33ed2cecfc71c1a113ac2dee74f63374.png)
开发步骤
(1)使能电源时钟 因为低功耗模式是通过 STM32 电源(PWR)系统进行管理的,所以需要使能 电源时钟,调用的库函数为: RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能 PWR 外设 时钟 (2)设置 WK_UP 引脚为唤醒源 待机唤醒方式有很多种,我们选择 WK_UP 引脚(PA0)上升沿来退出待机模 式。在库函数中,设置使能 WK_UP 用于唤醒 CPU 待机模式的函数是: PWR_WakeUpPinCmd(ENABLE); 因为按键 KEY_UP 连接在 PA0 管脚上,并且是高电平有效,这样一来就可以 使用 KEY_UP 按键来退出待机模式。 (3)进入待机模式 进入待机模式,首先要设置 SLEEPDEEP 位( 详见《 Cortex M3 权威指南(中 文)》,chpt13 Cortex-M3 的其它特性--电源管理章节),接着我们通过 PWR_CR 设置 PDDS 位,使得 CPU 进入深度睡眠时进入待机模式,最后执行 WFI 指令开 始进入待机模式,并等待 WK_UP 中断的到来。整个操作可以通过一个库函数完 成,如下: PWR_EnterSTANDBYMode();//进入待机模式 通常在进入待机模式前,我们会清除唤醒标志,以等待下次进入。清除唤醒 标志库函数为: PWR_ClearFlag(PWR_FLAG_WU);//清除 Wake-up 标志 以上几步全部配置好后,我们就可以正常进入待机模式了,并且可以通过按 键 KEY_UP 或者复位按键唤醒
wkup.h+wkup.c
#ifndef _wkup_H
#define _wkup_H
#include "system.h"
#endif
#include "wkup.h"
void Enter_Standby_Mode()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能pwr外设时钟
PWR_WakeUpPinCmd(ENABLE);
PWR_ClearFlag(PWR_FLAG_WU);
PWR_EnterSTANDBYMode();
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "system.h"
#include "wkup.h"
int main()
{
u8 i=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置优先级分组
SysTick_Init(72);
LED_Init();
USART1_Init(115200);//波特率115200
while(1)
{
//倒计时五秒时间缓冲,为了给程序下载提供时间
printf("倒计时:5\r\n");
LED1=0;
delay_ms(1000);
printf("倒计时:4\r\n");
LED1=1;
delay_ms(1000);
printf("倒计时:3\r\n");
LED1=0;
delay_ms(1000);
printf("倒计时:2\r\n");
LED1=1;
delay_ms(1000);
printf("倒计时:1\r\n");
LED1=0;
delay_ms(1000);
printf("进入待机模式\r\n");
Enter_Standby_Mode();
}
}