一、相关介绍

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低功耗配置的更多相关文章

  1. STM32F0xx_PWR低功耗配置详细过程

    Ⅰ.概述 今天总结PWR部分知识,请看“STM32F0x128参考手册V8”第六章.提供的软件工程是关于电源管理中的停机模式,工程比较常见,但也是比较简单的一个实例,根据项目的不同还需要适当修改或者添 ...

  2. stm32时钟配置总结

    stm32时钟配置时钟源: 1,HSE(高速外部时钟)即常见的外接8M晶振方案: 2,HSI(高速内部时钟) 即8M内部振荡时钟方案: 3,LSE(低速外部时钟)即常见的32.768Khz晶振方案: ...

  3. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  4. STM32低功耗模式与烟雾报警器触发信号电路设计

    1.STM32的3种低功耗模式 STM32有3种低功耗模式,分别是睡眠模式.停机模式和待机模式. 2.STM32在不同模式下的电流消耗 a.工作模式  消耗电流在27mA至36mA之间. b.睡眠模式 ...

  5. 【STM32】STM32串口配置的一般步骤(库函数)

    STM32串口配置的一般步骤(库函数)(1)串口时钟使能:RCC_APBxPeriphClockCmd();    GPIO时钟使能:RCC_AHBxPeriphClockCmd();(2)引脚复用映 ...

  6. 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究

    预研目标 六轴静止时,终端进入低功耗模式:六轴震动时,终端正常工作模式,从而极大减少非工作时的电流消耗. 解决方案 机器静止时,依据六轴算法,CPU进入休眠(停止)模式:机器工作时,触发六轴中断唤醒C ...

  7. STM32 NVIC配置详解

    例程:  /* Configure one bit for preemption priority */  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ...

  8. stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】

    stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...

  9. STM32 低功耗 调试心得

    MCU在进入STOP模式的时候,GPIO的状态都是保持在进入低功耗模式之前的状态,在最小系统中,MCU的GPIO都是悬空的,所以设置为何种状态都不会影响到功耗.但当连接到外设后,外设的电平状态和所连接 ...

  10. stm32 DMA配置

    DMA就是将一个地址空间复制到另外一个地址空间.DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备直接传送数据,使CPU的效率大大的提高 ...

随机推荐

  1. 位运算符n&(n-1)详解与妙用

    用处一:求一个int类型数是否为2的幂 1.当n=4时,二进制为:0100 n-1=3,二进制为:0011 则:n&(n-1)==0  解释(将0100最右边的1变为0 则 0000=0) 2 ...

  2. 使用 Azure OpenAI 打造自己的 ChatGPT

    一.前言 当今的人工智能技术正在不断发展,越来越多的企业和个人开始探索人工智能在各个领域中的应用.其中,在自然语言处理领域,OpenAI 的 GPT 系列模型成为了研究热点.OpenAI 公司的 Ch ...

  3. odoo 开发入门教程系列-模型之间的关系(Relations Between Models)

    模型之间的关系(Relations Between Models) 上一章介绍了为包含基本字段的模型创建自定义视图.然而,在任何真实的业务场景中,我们都需要不止一个模型.此外,模型之间的链接是必要的. ...

  4. What's the best way to read and understand someone else's code?

    Find one thing you know the code does, and trace those actions backward, starting at the end Say, fo ...

  5. python入门教程之十五获取对象属性的几种方法

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> ...

  6. [Git]git分支查询——图像化[转载]

    1 git reflog git reflog : 可查看所有分支的所有操作记录(含: commit / reset / merge / checkout等操作) 1-1 查看分支的所有变更记录(含: ...

  7. Go 语言切片是如何扩容的?

    原文链接: Go 语言切片是如何扩容的? 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice). 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装.它非常灵活,支 ...

  8. LeeCode 713 乘积小于k的子数组

    LeeCode 713 题目描述: 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 标签: 双指针.滑动窗口 建立模型 枚举子数组的右端 ...

  9. jmeter参数化导致反斜杠(\)被转义

    前情提要:在用jmeter做接口测试时,对请求体进行参数化,执行结果报错.但在不参数化的情况下,执行结果成功,而且参数化后,请求中读取到的参数是正确的(执行失败与执行成功时的参数一致). 问题排查:参 ...

  10. LeetCode SQL 基础题

    链接: 力扣 个人做法: # Write your MySQL query statement below SELECT A.name Employee FROM Employee A,Employe ...