STM32低功耗配置
一、相关介绍
1.1 STM32下的电源管理
电源框图

电源标号说明

电压调节器
复位后调节器总是使能。以3种不同的模式工作。
- 运转模式:调节器以
正常功耗模式提供1.8V电源(内核,内存和外设)。 - 停止模式:调节器以
低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。 - 待机模式:调节器
停止供电。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失。
上电复位(POR)和掉电复位(PDR)

可编程电压监测器(PVD)
二、低功耗

STM32F10xxx有三种低功耗模式:
- 睡眠模式(
M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行) - 停止模式(
所有的时钟都已停止) - 待机模式(
1.8V电源关闭)
在运行模式下,可以通过以下方式中的一种降低功耗: - 降低系统时钟
- 关闭APB和AHB总线上未被使用的外设时钟。
2.1 降低系统时钟
- 对预分频寄存器进行编程,降低任意一个系统(SYSCLK、HCLK、PCLK1、PCLK2)的速度。
2.2 外部时钟的控制
- 进入睡眠模式前,利用预分频器来降低外设的时钟。
- 在执行WFI或WFE指令前关闭所有外设的时钟。
如何设置?
- 通过设置
AHB外设时钟使能寄存器(RCC_AHBENR)、APB2外设时钟使能寄存器(RCC_APB2ENR)和APB1外设时钟使能寄存器(RCC_APB1ENR)来开关各个外设模块的时钟。
三、三种模式
3.1 睡眠模式
该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
进入睡眠模式?
执行WFI或WFE指令进入睡眠状态。
选择睡眠模式进入机制:
- SLEEP-NOW:SLEEPONEXIT位置0,当WRI或WFE被执行时,微控制器立即进入睡眠模式。
- SLEEP-ON-EXIT:SLEEPONEXIT位置1,系统从最低优先级的中断处理程序中退出时,微控制器进入睡眠模式。
在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。


退出睡眠模式?
- 执行WFI指令进入睡眠模式,
任意一个被嵌套向量中断控制器响应的外设中断都能将系统从睡眠模式唤醒。 - 执行WFE指令进入睡眠模式,一旦发生唤醒事件时,微处理器都将从睡眠模式退出。
唤醒事件可以通过下述方式产生:
外设控制寄存器中使能一个中断,不是在NVIC中使能,且在Cortex-M3系统控制寄存器中使能SEVONPEND位。
唤醒后处理:MCU从WFE中唤醒后,外设的中断挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。配置一个外部或内部的EXIT线为事件模式。
唤醒后不需要处理:当MCU从WFE中唤醒后,因为与事件线对应的挂起位未被设置,不必清除外设的中断挂起位或外设的NVIC中断通道挂起位。


3.2 停止模式
停止模式是睡眠模式的进一步应用,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟被停止,PLL、HSI和HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。
在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。
进入停止模式?
设置进入睡眠模式、设置电源控制寄存器(PWR_CR)的LPDS位使内部调节器进入低功耗模式,能够降低更多的功耗。
正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。
正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。
通过对独立的控制位进行编程,可选择以下功能:
- 独立看门狗(IWDG):写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。
- 实时时钟(RTC):通过备份域控制寄存器 (RCC_BDCR)的RTCEN位来设置。
- 内部RC振荡器(LSI RC):通过控制/状态寄存器 (RCC_CSR)的LSION位来设置。
- 外部32.768kHz振荡器(LSE):通过备份域控制寄存器 (RCC_BDCR)的LSEON位设置。
注意:进入该模式前ADC和DAC没有被关闭,那么这些外设仍然消耗电流。通过设置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位为0可关闭这2个外设。
退出停止模式?
- 一个中断或唤醒事件导致退出停止模式时,HSI RC振荡器被选为系统时钟。
启动后默认HSI RC为系统时钟,需要重新配置
如何解决唤醒后的启动延时?
当电压调节器处于低功耗模式下,当系统从停止模式退出时,会有一段额外的启动延时。
在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗增加。

3.3 待机模式
待机模式可实现系统的最低功耗。该模式是在深睡眠模式时进一步关闭了电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。 只有备份的寄存器和待机电路维持供电(外部电池)。
进入待机模式?

设置独立的控制位,选择以下待机模式的功能(保留的功能):
- 独立看门狗(IWDG):通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。
- 实时时钟(RTC):通过备用区域控制寄存器(RCC_BDCR)的RTCEN位来设置。
- 内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)的LSION位来设置。
- 外部32.768kHz振荡器(LSE):通过备用区域控制寄存器(RCC_BDCR)的LSEON位设置。
退出待机模式?
- 一个外部复位(NRST引脚)、IWDG复位、WKUP引脚上的上升沿或RTC闹钟事件的上升沿发生时,微控制器从待机模式退出。
- 从
待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。 - 从待机模式唤醒后的
代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等)。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。

待机模式下的输入/输出端口状态
在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:
- 复位引脚(始终有效)
- 当被设置为防侵入或校准输出时的TAMPER引脚
- 被使能的唤醒引脚
调试模式
在进行调试微处理器时,使微处理器进入停止或待机模式,将失去调试连接,因为Cortex-M3的内核失去了时钟。
- 设置DBGMCU_CR寄存器中的某些配置位,可以在使用低功耗模式下调试软件
四、低功耗模式下的自动唤醒(AWU)
RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)。
RTC提供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒。
通过备份区域控制寄存器(RCC_BDCR)的RTCSEL[1:0]位的编程,三个RTC时钟源中的二个时钟源可以选作实现此功能。
低功耗32.768kHz外部晶振(LSE):该时钟源提供了一个低功耗且精确的时间基准。(在典型情形下消耗小于1μA) ● - 低功耗内部RC振荡器(LSI RC):使用该时钟源,节省了一个32.768kHz晶振的成本。但是RC振荡器将少许增加电源消耗。
为了用RTC闹钟事件将系统从停止模式下唤醒,必须进行如下操作:
- 配置外部中断线17为上升沿触发。
- 配置RTC使其可产生RTC闹钟事件。
如果要从待机模式中唤醒,不必配置外部中断线17。
STM32低功耗配置的更多相关文章
- STM32F0xx_PWR低功耗配置详细过程
Ⅰ.概述 今天总结PWR部分知识,请看“STM32F0x128参考手册V8”第六章.提供的软件工程是关于电源管理中的停机模式,工程比较常见,但也是比较简单的一个实例,根据项目的不同还需要适当修改或者添 ...
- stm32时钟配置总结
stm32时钟配置时钟源: 1,HSE(高速外部时钟)即常见的外接8M晶振方案: 2,HSI(高速内部时钟) 即8M内部振荡时钟方案: 3,LSE(低速外部时钟)即常见的32.768Khz晶振方案: ...
- STM32 GPIO 配置之ODR, BSRR, BRR 详解
STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...
- STM32低功耗模式与烟雾报警器触发信号电路设计
1.STM32的3种低功耗模式 STM32有3种低功耗模式,分别是睡眠模式.停机模式和待机模式. 2.STM32在不同模式下的电流消耗 a.工作模式 消耗电流在27mA至36mA之间. b.睡眠模式 ...
- 【STM32】STM32串口配置的一般步骤(库函数)
STM32串口配置的一般步骤(库函数)(1)串口时钟使能:RCC_APBxPeriphClockCmd(); GPIO时钟使能:RCC_AHBxPeriphClockCmd();(2)引脚复用映 ...
- 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究
预研目标 六轴静止时,终端进入低功耗模式:六轴震动时,终端正常工作模式,从而极大减少非工作时的电流消耗. 解决方案 机器静止时,依据六轴算法,CPU进入休眠(停止)模式:机器工作时,触发六轴中断唤醒C ...
- STM32 NVIC配置详解
例程: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ...
- stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】
stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...
- STM32 低功耗 调试心得
MCU在进入STOP模式的时候,GPIO的状态都是保持在进入低功耗模式之前的状态,在最小系统中,MCU的GPIO都是悬空的,所以设置为何种状态都不会影响到功耗.但当连接到外设后,外设的电平状态和所连接 ...
- stm32 DMA配置
DMA就是将一个地址空间复制到另外一个地址空间.DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备直接传送数据,使CPU的效率大大的提高 ...
随机推荐
- 二进制安装Kubernetes(k8s) v1.24.3 IPv4/IPv6双栈
二进制安装Kubernetes(k8s) v1.24.3 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支 ...
- MordernC++之 auto 和 decltype
在C++11标准中,auto作为关键字被引入,可以用来自动推导变量类型,auto可以用于定义变量,函数返回值,lambda表达式等,在定义变量时可以使用auto来代替具体类型,编译器根据变量初始化表达 ...
- 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
ExceptionHandler的作用 ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常.当应用程序中发生异常时,ExceptionHandler将优先地拦截 ...
- 用Abp实现两步验证(Two-Factor Authentication,2FA)登录(二):Vue网页端开发
@ 目录 发送验证码 登录 退出登录 界面控件 获取用户信息功能 项目地址 前端代码的框架采用vue.js + elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读. 首 ...
- redhat6安装10g rac过程中的报错
问题描述:redhat 6 来安装oracle10.2.0.1的集群,坑太多了,不建议这样安装,即使安装成功,在升级过程中也会有各种报错.redhat5安装还比较顺利,6就一路坑 1.缺少依赖 lib ...
- [MAUI]模仿微信“按住-说话”的交互实现
@ 目录 创建页面布局 创建手势控件 创建TalkBox 创建动画 拖拽物动画 按钮激活动画 TalkBox动画 Layout动画 项目地址 .NET MAUI跨平台框架包含了识别平移手势的功能,在之 ...
- 数据结构(DataStructure)-03
数据结构-03 **数据结构-03笔记** **递归** **二叉树** **广度遍历 - 二叉树** **深度遍历 - 二叉树** **二叉树练习一** **二叉树练习二** **二叉排序树练习一* ...
- 超实用的Go语言基础教程,让你快速上手刷题!!
背景 工欲善其事,必先利其器.掌握Go的基础语法还不够,还需要勤加练习,修习"外功",才能达到出奇制胜的效果. 在大致了解Go语言的基本语法后,我就迫不得已地想使用这门语言.可是我 ...
- 2021-05-06:给定一个二维数组matrix, 你可以从任何位置出发,走向上下左右四个方向 。返回能走出来的最长的递增链长度。
2021-05-06:给定一个二维数组matrix, 你可以从任何位置出发,走向上下左右四个方向 .返回能走出来的最长的递增链长度. 福大大 答案2021-05-06: 自然智慧即可. 动态规划.二维 ...
- vue全家桶进阶之路49:Vue3 环境变量
vue3 环境变量 在Vue3中,可以通过环境变量来管理应用程序中的配置.这些配置可以包括后端API的URL.API key.跟踪ID等等.在不同的开发.测试.生产环境中使用不同的配置是非常有用的.V ...