PWR简介
本节学习如何使用PWR的低功耗模式来降低STM32的功耗,以及各种模式对应的使用条件。
低功耗模式
从上到下三种模式,越往下功耗越低,相应的唤醒难度也越大;唤醒条件表中也给出了,WFI表示中断唤醒,WFE表示事件唤醒(本节采用中断唤醒)。
睡眠模式
进入睡眠模式:__WFI();
只需要一句代码,程序在执行到这句后立刻进入睡眠模式,只要有任一中断信号产生,就会停止睡眠,并从暂停的地方开始执行下一步代码。(可以理解为睡眠模式是将程序暂停了,只有中断信号才能使程序从暂停的位置继续运行(当然是先进入中断函数再返回主函数继续执行))
停机/停止模式
进入停机/停止模式:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI);
//退出停止模式后,默认时钟变成HSI:8MHz
SystemInit();//调用这个函数,系统时钟恢复72MHz
从停机模式开始就需要用到PWR的库函数,首先要使能PWR外设时钟;
接着调用PWR_EnterSTOPMode进入停止模式,里面有两个参数选择,第一个选择电压调节器是打开还是处于低功耗模式,低功耗模式下唤醒会有一定的延时;第二个参数选择外部中断唤醒还是事件唤醒。停机模式只能由外部中断唤醒。
系统时钟初始化,将系统时钟恢复为72MHz;
待机模式
进入待机模式:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_EnterSTANDBYMode();
使能PWR时钟;
使用无参函数PWR_EnterSTANDBYMode();进入待机模式。
进入待机模式后,只能由特定的方式唤醒STM32:如设定RTC闹钟,使用RTC_SetAlarm();函数,当RTC的秒计数器等于设定的闹钟值时,会唤醒STM32;还有WKUP引脚的上升沿,使用函数 PWR_WakeUpPinCmd(ENABLE);在对应的PA0引脚产生上升沿也能唤醒主机。