PWR电源控制

/**  
 * @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);

image.png
image.png
从上到下,越来越省电,也越来越难以唤醒
关闭电源比关闭时钟更省电
PDDS=0进入停机模式,PDDS=1进入待机模式
LPDS=0电压调节器正常工作,LPDS=1电压调节器进入低功耗模式
image.png
image.png

__WFI();								//执行WFI指令,CPU睡眠,并等待中断唤醒
__WFE();                               //执行WFI指令,CPU睡眠,并等待事件唤醒

image.png
当一个中断或唤醒事件导致退出停止模式时,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)

image.png

  1. 开启时钟
/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);		//开启PWR的时钟
															//停止模式和待机模式一定要记得开启
	
  1. 设置待机模式
PWR_EnterSTANDBYMode();						//STM32进入停止模式,并等待指定的唤醒事件(WKUP上升沿或RTC闹钟)
		/*待机模式唤醒后,程序会重头开始运行*/
	
  1. 使能WKUP引脚
/*使能WKUP引脚*/
	PWR_WakeUpPinCmd(ENABLE);						//使能位于PA0的WKUP引脚,WKUP引脚上升沿唤醒待机模式
	
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值