首页 > 其他分享 >STM32 低功耗模式 睡眠、停止和待机 详解

STM32 低功耗模式 睡眠、停止和待机 详解

时间:2024-07-04 17:31:33浏览次数:18  
标签:睡眠 PWR 引脚 低功耗 模式 STM32 详解 唤醒 时钟

STM32提供了三种低功耗模式,分别是睡眠模式(Sleep Mode)、停止模式(Stop Mode)和待机模式(Standby Mode),我们在做一些电池供电项目的时候,低功耗模式显得尤为重要。

模式名称进入唤醒唤醒后位置对 1.2V域时钟的影响对 VDD 域时钟的影响功耗
睡眠模式WFI任意中断睡眠位置开始执行CPU/CLK 关闭对其它时钟或模拟时钟源无影响偏高
WFE唤醒事件
停止模式PDDS 和LPDS 位+SLEEPDEEP 位+WFI或 WFE任意 EXTI 线(在 EXTI寄存器中配置,内部线和外部线)停止位置开始执行,但系统时钟变为HSI(内部高速时钟),需要重新配置时钟所有 1.2 V域时钟都关闭HSI 和HSE 振荡器关闭中等
待机模式PDDS 位+SLEEPDEEP 位+ WFI 或 WFEWKUP 引脚上升沿、RTC闹钟(钟 A 或闹钟B)、BTC 唤醒事件、RTC 入侵事件、RTC 时间戳事件、NRST 引脚外部复位、IWDG 复位相当于复位,系统重新开始运行所有 1.2 V域时钟都关闭HSI 和HSE 振荡器关闭最低

1.睡眠模式(Sleep Mode)

在睡眠模式下,只有STM32的内核时钟被关闭,而外设时钟仍然保持运行,所有的I/O引脚都保持它们在运行模式时的状态,WFI模式下可以通过任意中断唤醒,WFE模式下可以任意唤醒事件唤醒,唤醒后程序继续睡眠位置往下运行。

void enter_sleep_mode(void){
	HAL_SuspendTick();//关闭系统systick中断,防止睡眠被systick中断打断
	HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);//进入WFI睡眠模式
	HAL_ResumeTick();//打开系统systic中断
}

上面是进入睡眠模式的代码,因为系统存在1ms一次的systick,所以要将其手动关闭,等待睡眠模式被唤醒以后再恢复。

2.停止模式(stop mode)

在停止模式下,内核时钟和外设时钟都被关闭,但内核的1.8V供电区域仍然保持供电,SRAM和寄存器中的内容得以保留,IO口状态也可保持,可以通过任意一个外部中断来唤醒STM32,唤醒后需要重新初始化时钟和外设,当一个中断或唤醒事件导致退出停止模式时,HSI(高速内部时钟)通常被选为系统时钟。

void enter_stop_mode(void){
	HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);//禁用唤醒引脚
	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除唤醒标志
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//启用唤醒引脚
	HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);//进入停止模式
}

 进入停止模式之前先要重置一下唤醒引脚,注意停止模式结束以后,外设时钟被关闭,只能选用HSI重新初始化时钟和外设。

3.待机模式(Standby Mode)

待机模式是功耗最低的模式,关闭了所有的时钟,并关闭了内核的1.8V供电,除了电源控制/状态寄存器和备份寄存器之外,其他所有的寄存器和RAM数据都会丢失,可以通过唤醒引脚(如PA0)的上升沿、RTC(实时时钟)闹钟中断,或者复位操作来唤醒STM32,唤醒后,STM32相当于复位,程序将从复位地址开始执行。

由于待机模式被唤醒后相当于复位,从main函数重新初始化,所以不用再做特殊操作。

大家可以根据自己的项目需求去选择合适的低功耗模式。

标签:睡眠,PWR,引脚,低功耗,模式,STM32,详解,唤醒,时钟
From: https://blog.csdn.net/qq_38072731/article/details/140181725

相关文章

  • STM32秒表设计【课设4/5】
    引言终于轮到我们最后的八段LED了!作为秒表的眼睛,必不可少的就是显示模块。八段LED初始化直接就叫做LED_Init()吧voidLED_Init(void){GPIO_InitTypeDefled; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); led.GPIO_Mode=GPIO_Mode_IPU; led.GPIO_Pin=GPI......
  • git远程操作详解
    二、gitremote为了便于管理,Git要求每个远程主机都必须指定一个主机名。gitremote命令就用于管理主机名。不带选项的时候,gitremote命令列出所有远程主机。$gitremoteorigin使用-v选项,可以参看远程主机的网址。[email protected]:jquery/jquery.git(......
  • Stable Diffusion之最全详解图解
    StableDiffusion是一种生成图像模型,属于扩散模型的一种。它利用扩散过程生成图像,从而在图像生成和编辑任务中表现出色。以下是对StableDiffusion的详细解释和图解:概述StableDiffusion是一种基于扩散过程的图像生成模型。扩散过程包括两个主要步骤:正向扩散和逆向扩......
  • 基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现
    基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现本系列文章:基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现一、PWM驱动代码的编写在系列文章的第一篇中已经对主定时器TIM1进行了P......
  • HTML5 WebSocket技术使用详解
    HTML5WebSocketAPI提供了一种在单个连接上进行全双工通信的方式。这意味着客户端和服务器可以同时发送和接收数据,而不需要像传统的HTTP请求那样进行多次请求和响应的轮询。WebSocket允许更实时的交互,非常适合需要快速、连续数据交换的应用场景,如在线游戏、实时通讯和股票行......
  • 详解Web应用安全系列(7)使用具有已知漏洞的组件
    使用具有已知漏洞的组件,这种安全漏洞普遍存在,基于组件开发的模式使得多数开发团队根本不了解其应用或API中使用的组件,更谈不上及时更新这些组件了。下面就分别以.NET和Java各分享一个案例。.NET案例:XmlSerializer反序列化漏洞案例描述在.NET框架中,XmlSerializer类是一个常......
  • 基于STM32单片机的智能垃圾桶控制系统 语音识别 LD3322 垃圾分类 红外感应 超声波满溢
        随着社会科学技术的飞速发展,人们的生活质量和速度也在不断提高。大多数传统的家用垃圾桶已经过时且缺乏新颖性,并且缺乏人性化设计。使用起来既不方便也不卫生,并且所有的生活垃圾和废物垃圾都被均匀地装载,没有经过仔细的分类。随之而来的是,清洁工的任务量正以几何速......
  • 基于STM32单片机的智能垃圾桶控制系统 语音识别LD3322 垃圾分类 火灾检测 金属检测 成
        随着社会科学技术的飞速发展,人们的生活质量和速度也在不断提高。大多数传统的家用垃圾桶已经过时且缺乏新颖性,并且缺乏人性化设计。使用起来既不方便也不卫生,并且所有的生活垃圾和废物垃圾都被均匀地装载,没有经过仔细的分类。随之而来的是,清洁工的任务量正以几何速......
  • 【单片机毕业设计选题24044】-基于STM32的水处理系统设计与实现
    系统功能:采用STM32最小系统板控制,采集传感器数据显示在OLED上并通过继电器进行相应的操作。系统操作说明:上电后OLED显示“欢迎使用水处理系统请稍后”,两秒后进入第一页面显示。第一页面第一行显示“系统状态信息”,第二行显示温湿度,第三行显示光照和水位,第四行显示系统状......
  • 关于redis锁的详解
    引用   https://www.jb51.net/article/251428.htmLocklock=newReentrantLock();@AutowiredStringRedisTemplateredisTemplate;publicstaticfinalStringg01="good:01";publicstaticfinalStringREDIS_LOCK="good_lock";......