【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();
}
相关推荐
飞睿科技14 分钟前
从一颗雷达芯片到一台生命体征仪:飞睿 UWB 雷达的“一芯两用”
嵌入式硬件·物联网·uwb
伟大的前程1 小时前
Flash 只能将比特从 1 改写为 0,无法从 0 改回 1
单片机
Zw-awa2 小时前
点亮第一盏 LED:STM32 的 GPIO 到底在控制什么
stm32
剑指offer.2 小时前
嵌入式硬件-ARM芯片的启动
c语言·嵌入式硬件·嵌入式
Kuakewei8882 小时前
1.5V升压3V专用芯片PW5100在单节干电池供电中的边界条件
嵌入式硬件
DaTou大头2 小时前
STM32第六篇
单片机·嵌入式·电路基础
Kuakewei8883 小时前
1.5V升压3.3V专用芯片PW5100直通关断与PW5103真关断分析
嵌入式硬件
威嵌神州3 小时前
VxWorks6.9 BSP 适配:飞腾 D2000/FT2000/4 平台、驱动开发
驱动开发·嵌入式硬件·fpga开发·系统架构
一直C4 小时前
ARM裸机开发Day04|IMX6ULL汇编&C点灯实操,Makefile、链接脚本、段解析
嵌入式硬件·imx6ull·交叉编译
女神下凡4 小时前
端侧 AI 产品 有什么产品
人工智能·嵌入式硬件