【HAL库】STM32F407---低功耗休眠

一、低功耗休眠模式

模式 内核 外设时钟 功耗 唤醒速度 唤醒方式 唤醒后操作
Sleep(睡眠) 停止 开启 7~14mA <1us 任意中断 / 事件 继续运行
Stop(停机) 停止 关闭 240~320uA <10us EXTI 外部中断、RTC、看门狗 重配系统时钟
Standby(待机) 断电 全部关掉 1.8~4uA 300~500us WKUP 引脚、RTC 闹钟、复位、IWDG 重新初始化

二、功能代码实现

1. 睡眠模式 - Sleep

由于睡眠模式可以通过任意中断唤醒,所以在进入睡眠模式前,把非唤醒中断关闭,唤醒后再恢复对应的中断。

c 复制代码
//进入睡眠模式:任意中断可唤醒
void SYS_enter_sleep_mode(void)
{
	//暂停滴答计数
	HAL_SuspendTick();// 暂停 SysTick,防止频繁唤醒

	// 清除唤醒标记
	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

	// 如果使用WK-UP引脚唤醒那么需要使能
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);

	// 进入SLEEP模式
	HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

	//恢复滴答计数器
	HAL_ResumeTick();
}

2. 停机模式 - Stop

c 复制代码
//进入停机模式
void SYS_enter_stop_mode(void)
{
	//暂停滴答计数
	HAL_SuspendTick();

	// 清除唤醒标记
	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

	// 如果使用WK-UP引脚唤醒那么需要使能
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);

	// 进入STOP模式
	HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

	// 唤醒后:重新初始化系统时钟
	SystemClock_Config();
	//恢复滴答计数器
	HAL_ResumeTick();
}

3. 待机模式 - Standby

c 复制代码
//进入待机模式
void SYS_enter_standby_mode(void)
{
	// 清除唤醒标记
	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

	// 如果使用WK-UP引脚唤醒那么需要使能
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);

	// 进入待机模式
	HAL_PWR_EnterSTANDBYMode();
}
相关推荐
LingzhiPi9 小时前
零知ESP32--RC522NFC考勤打卡系统
c++·单片机·嵌入式硬件
炸膛坦客10 小时前
常见代码问题与解答:(二)因外部晶振频率改变导致 MCU 锁死的原因及处理方法
单片机·嵌入式硬件
ShiMetaPi11 小时前
ShiMetaPi Pico-G1:百元级黑光全彩AI ISP开发板
人工智能·嵌入式硬件·pico·isp
Lzh编程小栈12 小时前
嵌入式深度精讲|STM32引脚全方位底层原理、配置逻辑、硬件规范、高频面试题
c语言·stm32·单片机·嵌入式硬件
AI的探索之旅12 小时前
我把立创EDA接进了本地大模型:数据不出门的AI设计检查实测
人工智能·stm32·硬件工程
ch3nyuyu1 天前
单片机实验2
单片机·嵌入式硬件
mk0151 天前
20V输入,12V 3A输出 效率96%DCDC降压芯片
驱动开发·单片机·硬件工程·智能硬件·pcb工艺
李boyang1 天前
STM32H5_Bootloader与IAP升级机制深度解析
stm32·iap·bootloader
达子6661 天前
Zephyr RTOS 学习系统:第一阶段 —— 入门篇
stm32·单片机·嵌入式硬件
三易串口屏1 天前
触摸热区控件
嵌入式硬件·触摸屏·串口屏·三易串口屏·触摸热区控件