STM32低功耗模式之待机模式

2023-10-25 09:30
文章标签 模式 stm32 低功耗 待机

本文主要是介绍STM32低功耗模式之待机模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    上周完成了一个小项目,项目涉及到stm32的低功耗的待机模式,特在此记录下32的待机模式。

    芯片:STM32f030F4

    库:HAL库

    唤醒方式:用RTC和PA0的上升沿唤醒

先来看下低功耗模式下的情况(只看停止跟待机):

停止模式

停止模式在保留SRAM和寄存器内容的同时实现了非常低的功耗。

1.8V域中的所有时钟停止,PLL、HSI RC和禁用HSE晶体振荡器。电压调节器也可以安装在正常或低功率模式。

该设备可以被任何一条exti线路从停止模式唤醒。

exti行源可以是16个外部行和rtc之一。

待机模式

待机模式用于实现最低功耗。内部关闭电压调节器,使整个1.8V域断电。

这个PLL、HSI RC和HSE晶体振荡器也关闭。

进入后待机模式、SRAM和寄存器内容丢失,但RTC域和备用电路中的寄存器除外。

当外部复位(NRST管脚)、IWDG复位时,设备退出待机模式。

Wkup管脚上的上升沿,或发生RTC事件。

 

可以看出待机模式跟停止模式差不多,其实功耗上停机配置的好的话也就比待机高一些,不过停止模式的唤醒方式的选择可以更自由,寄存器的数据也可以保存,所以我感觉停机模式更适合大多产品的需求,但是今天我只对待机模式的一些注意事项进行提出。

待机模式的进入很方便,只需要调用一句HAL_PWR_EnterSTANDBYMode()就可以进入待机模式了,待机模式唤醒就相当于复位,它之前的数据会全部丢失,所以要注意自己程序运行的时候,如有某些状态量一定要保存,那就保存进flash,唤醒的时候就去读取它。待机模式下所有IO口会处于高阻态,但不是说高阻态就是最省电的,跟电路设计还有一定的联系,当你进入待机发现电流跟手册上相差挺大的时候考虑下我的解决方法。

解决方法:其实这里可以考虑下把不使用的I/O口在休眠前都设置为模拟输入。原因:

额外的I/O电流消耗是由于I/O配置为输入,如果中间电压水平由外部施加。

这种电流消耗是由输入施密特引起的。

用于区分输入值的触发电路。除非此特定配置

根据应用程序的要求,可以通过配置这些I/O处于模拟模式。这是典型的ADC输入引脚的情况,应该是配置为模拟输入。

条件:典型和最大电流消耗

在以下条件下放置MCU:

•所有I/O引脚都处于模拟输入模式

•所有外围设备均被禁用,除非明确提及。

所以:官方其实也是在这个模式下测出的数据,实验证明,确实设置为模拟输入,电流跟手册上描写的差不多。

(也别忘了 __HAL_RCC_PWR_CLK_ENABLE();使能PWR时钟,这个能降功耗,唤醒之后要清除唤醒标志位)

 

如果功耗还是跟手册有区别,就要考虑供电电压,温度的影响。其实也可以通过供电电压的降低来降低功耗,STM32f030F4手册没有电压的对比,这里放下STM32F103C8的对比图:

 

要想让stm32进入更低功耗的状态,还需要考虑唤醒方式的种类和个数,比如在待机模式下,看门狗,RTC都是用内部40kHz的时钟,还有PA0外部中断的唤醒,如果全部模式都打开的话,功耗也会上升,所以要根据自己项目来设定唤醒模式,唤醒方式少一点,功耗就能低一点,总的来说就是这么些注意事项。

 

还有在使用RTC唤醒的时候要注意一下,如果你是cubeMx创建的工程每次唤醒RTC都是会重新初始化从0开始的计时的,这可能对一些人是好事,对一些人就不是那么好了,这个网上有很多解决方法,这里说一下闹钟的配置:

这里是要1小时唤醒一次,下面的配置就要设置上,要用到的设置为DISABLE,没用到的设置为ENABLE。

使用内部时钟的RTC时钟40KHz往往是不准的,所以你们可以自己去调节参数,让它秒中断跑的更精准。

大概就是这样了,低功耗待机模式总结下:

1、使能PWR时钟 __HAL_RCC_PWR_CLK_ENABLE();

2、配置I/O口为模拟输入

3、再进入待机模式

这篇关于STM32低功耗模式之待机模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/281633

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素