【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();
}
相关推荐
单片机杂货铺1 天前
基于单片机的智能粮仓控制系统设计与实现
stm32·单片机·嵌入式硬件·物联网·计算机外设·51单片机·课程设计
指尖的爷1 天前
RKNN转化环境搭建(rknn_toolkit2新版本)
嵌入式硬件·深度学习·物联网·目标检测
梁朝辉1 天前
滴泪的曲线(Curved)还是直线(Line)什么区别,都应用于什么场景!
嵌入式硬件·硬件工程
clear sky .1 天前
stm32H7进入HardFault_Handler机制
stm32·单片机·嵌入式硬件
小僧景贤1 天前
STM32 GPIO 详解(含寄存器、HAL 库、电气特性、低功耗深度剖析)
stm32·单片机·嵌入式硬件
远翔调光芯片^138287988721 天前
从参数到应用:FP7208如何以0.2V精密反馈提升LED驱动性能
科技·单片机·嵌入式硬件·智能家居·能源
碧海银沙音频科技研究院1 天前
4 BES2710编译环境搭建方法
嵌入式硬件·算法
别催小唐敲代码1 天前
STM32 定时器学习笔记:TIM 架构、输入捕获与 PWM 一篇讲透
笔记·stm32·学习
csdn杰哥1 天前
瑞萨单片机AI教程【六】导入外部电机状态数据训练模型
人工智能·单片机·嵌入式硬件·瑞萨·ra6m5
深念Y1 天前
ZTE_UZ901_NVRAM经验总结
linux·服务器·网络·嵌入式硬件·嵌入式·随身wifi