待机模式配置步骤 接下来我们介绍下如何使用库函数进入和退出待机模式。这个也是在编写程序中必须要了解的。 具体步骤如下:(电源管理相关库函数在 stm32f10x_pwr.c和 stm32f10x_pwr.h 文件中) (1)使能电源时钟 因为低功耗模式是通过 STM32 电源(PWR)系统进行管理的,所以需要使能电源时钟,调用的库函数为:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能 PWR 外设时钟
(2)设置 WK_UP 引脚为唤醒源
待机唤醒方式有很多种,我们选择 WK_UP 引脚(PA0)上升沿来退出待机模式。在库函数中,设置使能 WK_UP 用于唤醒 CPU 待机模式的函数是:
PWR_WakeUpPinCmd(ENABLE);
因为按键 K_UP 连接在PA0 管脚上,并且是高电平有效,这样一来就可以使用 K_UP按键来退出待机模式。 (3)进入待机模式 进入待机模式, 首先要设置 SLEEPDEEP 位 ( 详见 《 Cortex M3 权威指南(中文)》 , chpt13 Cortex-M3 的其它特性--电源管理章节) ,接着我们通过 PWR_CR设置 PDDS 位,使得 CPU 进入深度睡眠时进入待机模式,最后执行 WFI 指令开始进入待机模式,并等待 WK_UP 中断的到来。整个操作可以通过一个库函数完成,如下:
PWR_EnterSTANDBYMode();//进入待机模式
通常在进入待机模式前,我们会清除唤醒标志,以等待下次进入。清除唤醒标志库函数为:
PWR_ClearFlag(PWR_FLAG_WU);//清除 Wake-up 标志
以上几步全部配置好后,我们就可以正常进入待机模式了,并且可以通过按键 K_UP或者复位按键唤醒。 特别提醒下,如果学到 RTC 实时时钟实验的时候,需要进入待机模式,如果使能了 RTC 闹钟中断的时候,进入待机模式前,必须按如下操作处理: 1.禁止 RTC 中断( ALRAIE、 ALRBIE、 WUTIE、 TAMPIE 和 TSIE 等)。 2.清零对应中断标志位。 3.清除 PWR 唤醒(WUF)标志(通过设置 PWR_CR 的 CWUF 位实现)。 4.重新使能 RTC 对应中断。 5.进入低功耗模式。 本实验使用到硬件资源如下: (1)D1 指示灯 (2)串口 1 (3)K_UP 按键 D1指示灯、K_UP 按键、串口 1 电路在前面章节都介绍过,这里不多说。D1指示灯用来提示系统正常运行,K_UP 按键用来唤醒待机模式,串口 1 用来输出提示信息。 所要实现的功能是:系统运行时 D1 指示灯闪烁,5 秒后进入待机模式,D1 指示灯熄灭,同时串口 printf 输出相关提示信息,通过 K_UP 按键实现唤醒。
|