【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();
}
相关推荐
宵时待雨6 小时前
STM32基础1:嵌入式历史与生态
stm32·单片机·嵌入式硬件
zhangzhangkeji6 小时前
stm32 14-1 WDG 看门狗:理论部分
stm32
不会代码的小猴7 小时前
启动文件
stm32·嵌入式硬件
深圳老胡7 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
甜甜的大香瓜7 小时前
【MT32F006】MT32F006之Timer定时
单片机
甜甜的大香瓜7 小时前
【MT32F006】MT32F006之读写内部EEPROM
单片机
2401_862880827 小时前
iMX6ULL 驱动工程搭建 + LED 灯驱动
c语言·驱动开发·嵌入式硬件
hahaha60167 小时前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
沐欣工作室_lvyiyi8 小时前
超市智能货架系统设计与实现(论文+源码)
c语言·单片机·课程设计·电子信息工程毕业设计·黑龙江工商学院·广州工商学院·成都工业学院
老孟说禅8 小时前
硬件测试 - 测试用例设计:测试需求分析、测试点提取、测试用例编写方法
单片机·嵌入式硬件·智能硬件