详解STM32低功耗模式

发布者:MusicLover123最新更新时间:2024-07-23 来源: elecfans关键字:STM32  低功耗模式  停机模式 手机看文章 扫描二维码
随时随地手机看文章

低功耗模式

本文讨论下STM32低功耗模式,先看如下手册。

b8df6020-7dec-11ee-939d-92fbcf53809c.png

对比了 STM32F0 和 STM32F1 两者进入低功耗是一样的,低功耗模式有三种:

睡眠模式,CM3 内核停止,外设仍然运行,此功耗是最高的

停止模式,所有时钟都停止,此功耗较低,典型大概在20uA左右

待机模式,1.8V 内核电源关闭,此功耗最低,典型大概在2uA左右

一般做开发大多都是选择停机模式,因为停机模式功耗较低,而且任一中断或事件都能唤醒。待机模式虽然功耗最低,电流只差10个微安,但是只有特定的事件和引脚可以唤醒,实时性不是很好。

先来看下官方库进入低功耗的方式。


void PWR_EnterSleepMode(uint8_t PWR_SLEEPEntry); //睡眠模式 

void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);  //停机模式

void PWR_EnterSTANDBYMode(void);    //待机模式


这里我们用到停机模式,有两个参数 。
第一个PWR_Regulator是选择电源是否进入低功耗。


#definePWR_Regulator_ON//电源不进低功耗唤醒基本没延迟
#define PWR_Regulator_LowPower         //电源进去低功耗 不过唤醒启动有一点延迟


第二个参数PWR_STOPEntry选择唤醒的方式。


#define PWR_STOPEntry_WFI              //中断唤醒
#define PWR_STOPEntry_WFE              //事件唤醒


停机模式唤醒后自动选择系统内部时钟,看自己的应用是否需要重新配置。如果你的系统时钟是HSI或者HSE是要重新配置,一般都需要重新配置,直接调用系统时钟配置函数。
另外停机模式唤醒后,flash程序是从中断或事件开始执行的。

如何做到停机模式更低功耗

代码


RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);  //使能时钟 
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);


上面代码第一个参数PWR_Regulator_LowPower是配置电源低功耗模式。第二个参数PWR_STOPEntry_WFI用来确定是中断唤醒还是事件唤醒,或者两者都要。

第二步你要把所有引脚IO口释放,全部配置成模拟输入状态,此时IO口几乎0消耗,具体见手册说明。

b8fc33e4-7dec-11ee-939d-92fbcf53809c.png

我们只要在进入低功耗之前把IO口配置一下就行了(根据自己应用需要配置IO),但是唤醒之后就要重新配置IO口了。

注意,在配置IO模拟输入之前,一定不要锁定IO口。我之前就踩了这个坑,在配置成模拟输入之前我们串口两个引脚锁定了导致我的功耗一直在90uA左右下不去。

正确配置的功耗在10uA左右,这功耗已经相当低了,用四节5号电池够你用至少1年了。


关键字:STM32  低功耗模式  停机模式 引用地址:详解STM32低功耗模式

上一篇:基于STM32芯片的工程代码问题
下一篇:深度剖析STM32时钟系统

推荐阅读最新更新时间:2024-11-12 14:13

STM32的AFIO时钟什么时候需要开启
相比于普通单片机,STM32 拥有复杂的时钟系统,相应的控制器称为 RCC(Reset Clock Controller,复位与时钟控制器)。每个外设都配备了外设时钟的开关,当我们不使用某个外设时,可以把这个外设时钟关闭,从而降低 STM32 的整体功耗。因此,在我们使用外设前,必须要开启相应外设的时钟。可以使用的库函数有: void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewS
[单片机]
GD32和STM32有何区别?GD32如何替换STM32呢?
GD32和STM32是两种不同的微控制器系列,一般被用于嵌入式系统开发。GD32是中国华大基因(Gigadevice)公司开发的微控制器,而STM32是瑞士意法半导体(STMicroelectronics)公司开发的微控制器。 首先,我们来看一下GD32和STM32在技术规格上的区别。GD32系列采用了中国自主研发的ARM Cortex-M3和Cortex-M4内核,而STM32系列则采用了瑞士意法半导体公司的ARM Cortex-M系列处理器。从处理器性能和架构上来看,两者基本上是相似的。然而,由于GD32系列是后来者,它在一些方面对原有的STM32系列做了一些改进和增强,例如增加了更多的外设和功能模块。 其次,GD32和STM
[单片机]
再造STM32---第十五部分:EXTI—外部中断/事件控制器
本章参考资料:《STM32F4xx 中文参考手册》系统配置控制器以及中断和事件章节。上一章节我们已经详细介绍了 NVIC,对 STM32F4xx 中断管理系统有个全局的了解,我们这章的内容是 NVIC 的实例应用,也是 STM32F4xx 控制器非常重要的一个资源。 学习本章时,配合《STM32F4xx 中文参考手册》系统配置控制器以及中断和事件章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明,本书内容是以 STM32F42xxx 系列控制器资源讲解。 15.1 EXTI 简介: 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应
[单片机]
再造STM32---第十五部分:EXTI—外部中断/事件控制器
STM32学习笔记5:通用定时器PWM输出
1. TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文 Pulse Width Modulation 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。 STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 1.1PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的( 110 为模式1, 111 为模式2)。模式
[单片机]
STM32 ADC1_DMA
重温一个旧的例程 ADC 仍然十分简单,将DMA应用于 ADC 这个就比较实用了。 ADC规则数据寄存器(ADC_DR) 0x4001244C /************************************************************** ADC PB1_ADC9 ***************************************************************/ #include STM32Lib\\stm32f10x.h #define ADC1_DR_Address ((uint32_t)0x4001244C) extern u16 adc; void
[单片机]
<font color='red'>STM32</font> ADC1_DMA
关于STM32 的 硬件IIC和 模拟IIC理解学习
1. 硬件 IIC 用法比较复杂,模拟IIC的流程更清楚一些。 2. 硬件IIC速度比模拟快,并且可以用DMA 3. 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。 软件i2c是 程序员 使用程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序。一般较硬件i2c稳定,但是程序较为繁琐,但不难。 硬件i2c程序员只要调用i2c的控制 函数 即可,不用直接的去控制SCL,SDA高低电平的输出。但是有些单片机的硬件i2c不太稳定,调试问题较多。
[单片机]
ST和Arduino联手扩宽创客社区使用STM32微控制器和传感器的途径
2016年6月30日,致力于为创客提供更多创造空间,横跨多重电子应用领域、全球领先的半导体供应商意法半导体 (STMicroelectronics,简称ST)和教育、创客和物联网市场最大的开源生态系统Arduino公司,宣布了一项合作协议,让业界领先的STM32系列微控制器(MCU)以及意法半导体的传感器、功率器件和通信连接技术走近Arduino创客社区。STAR (ST和Arduino的前两个字母组合)开发项目的首款产品基于STM32F469的STAR Otto基板于近日向公众展出。现在,物联网开发人员和创客可以在他们的智能硬件内创建高性能图形功能,使用容易上手的软硬件开发好用的触屏和声控以及媒体流功能,改进他们的应用设计。
[物联网]
ST和Arduino联手扩宽创客社区使用<font color='red'>STM32</font>微控制器和传感器的途径
STM32中如何使用printf()函数?
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(USA
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved