/**
* @brief 电源去初始化
*
* 将电源控制器恢复到默认状态。
*/
void PWR_DeInit(void);
/**
* @brief 允许/禁止后备区域访问
*
* 启用或禁用对后备区域(如后备寄存器等)的访问。
*
* @param NewState 新的状态,ENABLE表示允许访问,DISABLE表示禁止访问
*/
void PWR_BackupAccessCmd(FunctionalState NewState);
/**
* @brief 电源电压检测器使能/失能
*
* 启用或禁用电源电压检测器(PVD)。
*
* @param NewState 新的状态,ENABLE表示启用PVD,DISABLE表示禁用PVD
*/
void PWR_PVDCmd(FunctionalState NewState);
/**
* @brief 配置电源电压检测器阈值
*
* 设置电源电压检测器(PVD)的阈值。
*
* @param PWR_PVDLevel PVD阈值
*/
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);
/**
* @brief 唤醒引脚使能/失能
*
* 启用或禁用唤醒引脚功能。
*
* @param NewState 新的状态,ENABLE表示启用唤醒引脚,DISABLE表示禁用唤醒引脚
*/
void PWR_WakeUpPinCmd(FunctionalState NewState);
/**
* @brief 进入STOP模式
*
* 配置并进入STOP模式。
*
* @param PWR_Regulator 停止模式下的电压调节器配置
* @param PWR_STOPEntry STOP模式的进入方式
*/
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);
/**
* @brief 进入STANDBY模式
*
* 配置并进入STANDBY模式。
*/
void PWR_EnterSTANDBYMode(void);
/**
* @brief 获取电源标志状态
*
* 检查指定的电源标志是否被设置。
*
* @param PWR_FLAG 要检查的电源标志
* @return 标志状态,SET表示标志被设置,RESET表示标志未设置
*/
FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);
/**
* @brief 清除电源标志
*
* 清除指定的电源标志。
*
* @param PWR_FLAG 要清除的电源标志
*/
void PWR_ClearFlag(uint32_t PWR_FLAG);
从上到下,越来越省电,也越来越难以唤醒
关闭电源比关闭时钟更省电
PDDS=0进入停机模式,PDDS=1进入待机模式
LPDS=0电压调节器正常工作,LPDS=1电压调节器进入低功耗模式
__WFI(); //执行WFI指令,CPU睡眠,并等待中断唤醒
__WFE(); //执行WFI指令,CPU睡眠,并等待事件唤醒
当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟,此时用SystemInit()重启时钟
/*开启时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR的时钟
//停止模式和待机模式一定要记得开启
PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI); //STM32进入停止模式,并等待中断唤醒
SystemInit(); //唤醒后,要重新配置时钟
/**
* @brief 启用电源调节器
*
* 该宏定义用于设置电源调节器为正常工作模式,即不进入低功耗模式。
* 对应的位值设置为0,代表电源调节器处于开启状态。
*/
#define PWR_Regulator_ON ((uint32_t)0x00000000)
/**
* @brief 设置电源调节器为低功耗模式
*
* 该宏定义用于设置电源调节器进入低功耗模式。
* 对应的位值设置为1,代表电源调节器进入低功耗状态。
*/
#define PWR_Regulator_LowPower ((uint32_t)0x00000001)
/**
* @brief 停止模式进入:等待中断(WFI)
*
* 该宏定义用于配置当系统进入停止模式时,使用等待中断(WFI)指令。
* 对应的值设置为0x01,表示选择WFI作为停止模式的进入方式。
*/
#define PWR_STOPEntry_WFI ((uint8_t)0x01)
/**
* @brief 停止模式进入:等待事件(WFE)
*
* 该宏定义用于配置当系统进入停止模式时,使用等待事件(WFE)指令。
* 对应的值设置为0x02,表示选择WFE作为停止模式的进入方式。
*/
#define PWR_STOPEntry_WFE ((uint8_t)0x02)
- 开启时钟
/*开启时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR的时钟
//停止模式和待机模式一定要记得开启
- 设置待机模式
PWR_EnterSTANDBYMode(); //STM32进入停止模式,并等待指定的唤醒事件(WKUP上升沿或RTC闹钟)
/*待机模式唤醒后,程序会重头开始运行*/
- 使能WKUP引脚
/*使能WKUP引脚*/
PWR_WakeUpPinCmd(ENABLE); //使能位于PA0的WKUP引脚,WKUP引脚上升沿唤醒待机模式