前言

本总结参考野火STM32开发教程,由于原文档描述过于繁琐,且前后联系容易遗忘,故本人在理解之后进行总结。尽量把事情说的简单通透

提起到低功耗,大家应该就能想到一部分实现的方法,可以让一些外设不工作,而这一般都涉及到电源系统,STM32的电源分类相对于51丰富的多,所以我们将从电源系统分类说起

电源系统分类

备份域电路、内核电路、ADC电路

备份域电路

STM32 的 LSE 振荡器、RTC、备份寄存器及备份 SRAM 这些器件被包含进备份域电路中,这部分的电路可以通过 STM32 的 VBAT 引脚获取供电电源,在实际应用中一般会使用 3V 的钮扣电池对该引脚供电。

下图为备份域的供电来源,1接VBAT电源(比如纽扣电池),2接VDD,3连接备份域。

备份域的作用:保留关键数据。

内核电路

在内核电路中有一个调压器,调压器为备份域(上面所说的VDD)及待机电路以外的所以数字电路进行供电,调压器的输出电压约为1.2V,所以使用调压器进行供电的区域被称为1.2V域

调压器有三种运行状态:“运行模式”、“停止模式”以及“待机模式”。

  • 运行模式下:1.2V域全功率运行
  • 停止模式下:1.2V 区域的所有时钟都被关闭,也就是说所有外设关闭,但部分寄存器和RAM数据保留,像时间静止
  • 待机模式下:1.2V域断电,所有寄存器和RAM数据丢失

ADC电路

为了保证ADC的转换精度,方便进行滤波,所有为ADC设有单独的ADC电源(VDDA引脚提供),使用 VSSA 作为独立的地连接,VREF 引脚则为ADC 提供测量使用的参考电压。

STM32的工作模式

STM32 具有运行、睡眠、停止和待机四种工作模式(按功耗大小顺序列出)

睡眠模式

关闭内核时钟,内核停止工作(由于时钟是驱动运行的根基,所以没用时钟就停止使用),片上外设正常运转。

睡眠模式的特性及使用见下图

特性 说明
立即睡眠 在执行WFI(wait for interrupt)或WFE(等待事件)指令时立即进入睡眠模式。
退出时睡眠 在退出优先级最低的中断服务程序后才进入睡眠模式。
进入方式 内核寄存器的SLEEPDEEP=0,然后调用WFI或WFE指令即可进入睡眠模式;
另外若内核寄存器的SLEEPONEXIT=0时,进入“立即睡眠”模式
SLEEPONEXIT=1时,进入“退出时睡眠”模式。
唤醒方式 如果是使用WFI指令睡眠的,则可使用任意中断唤醒;
如果是使用WFE指令睡眠的,则由事件唤醒。
唤醒延迟 无延迟。
唤醒后 若由中断唤醒,先进入中断,退出中断服务程序后,接着执行WFI指令后的程序;
若由事件唤醒,直接接着执行WFE后的程序。

停止模式

停止模式下,所有的外设时钟也被关闭,但1.2V区域部分电源还在正常工作,故内核的寄存器、RAM信息还保存着数据。从停止模式恢复后可继续执行,停止模式可以由任意一个外部中断唤醒。在停止模式中可以选择电压调节器为开模式或低功耗模式(低功耗模式应该就是上面所说的调压器的停止模式,纯个人猜测),可选择内部 FLASH 工作在正常模式或掉电模式。

特性 说明
调压器低功耗模式 在停止模式下调压器可工作在正常模式或低功耗模式,可进一步降低功耗
FLASH掉电模式 在停止模式下 FLASH可工作在正常模式或掉电模式,可进一步降低功耗
进入方式 内核寄存器的 SLEEPDEEP=1,PWR CR寄存器中的PDDS=0,然后调用WFI 或WFE指令即可进入停止模式;
PWR CR寄存器的LPDS=0时,调压器工作在正常模式,LPDS=1时工作在低功耗模式;
PWR CR寄存器的 FPDS=0时,FLASH工作在正常模式,FPDS=1时进入掉电模式。
唤醒方式 如果是使用WFI指令睡眠的,可使用任意EXTI线的中断唤醒;如果是使用WFE 指令睡眠的, 可使用任意配置为事件模式的EXTI线事件唤醒。
停止时 内核停止,片上外设也停止。这个状态会保留停止前的内核寄存器、内存的数据。
唤醒延迟 基础延迟为 HSI振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换正常模式下的时间,若 FLASH工作在掉电模式,还需要加上 FLASH从掉电模式唤醒的时间。
唤醒后 若由中断唤醒,先进入中断,退出中断服务程序后,接着执行WFI指令后的程序;若由事件唤醒,直接接着执行WFE后的程序。唤醒后,STM32 会使用HIS作为系统时钟。

待机模式

相对于停止模式,待机模式下所有的1.2V区域的电源全部关闭,内核RAM数据丢失,由于没有之前代码的运行记录,只能对芯片复位然后重新从头开始执行程序。

它有四种唤醒方式,分别是 WKUP(PA0) 引脚的上升沿,RTC 闹钟事件,NRST 引脚的复位和 IWDG(独立看门狗) 复位。

特性 说明
进入方式 内核寄存器的 SLEEPDEEP=1,PWR CR寄存器中的 PDDS=1,PWR_CR寄存器中的唤醒状态位WUF=0,然后调用WFI或WFE指令即可进入待机模式;
唤醒方式 通过WKUP引脚的上升沿,,RTC闹钟、唤醒、入侵、时间戳事件或NRST引脚外部复位及IWDG复位唤醒。
待机时 内核停止,片上外设也停止;内核寄存器、内存的数据会丢失;除复位引脚、RTC AF1引脚及WKUP引脚,其它 I/O口均工作在高阻态。
唤醒延迟 芯片复位的时间
唤醒后 相当于芯片复位,在程序表现为从头开始执行代码。

在以上讲解的睡眠模式、停止模式及待机模式中,在备份域电源正常供电,备份域内的 RTC 都可以正常运行、备份域内的寄存器及备份域内的 SRAM 数据会被保存,不受功耗模式影响

低功耗实现命令说明

  1. PVD 可监控 VDD 的电压,当它低于阈值时可产生 PVD 中断以让系统进行紧急处理。
  2. WFI 或 WFE 命令它们实质上都是内核指令,在库文件 core_cmInstr.h 中把这些指令封装成了函数,调用方式__WFI()、__WFE()

停止模式配置

进入停止模式前的寄存器配置,通过函数PWR_EnterSTOPMode()进行实现,关于函数说明请参考库函数注释

前面提到在停止模式中还可以控制内部 FLASH 的供电,控制 FLASH 是进入掉电状态还是正常供电状态,这可以使用库函数 PWR_FlashPowerDownCmd 配置。

待机模式配置

待机模式对应的函数PWR_EnterSTANDBYMode(),由于这个函数没有操作 WUF 寄存器位,所以在实际应用中,调用本函数前,还需要清空 WUF 寄存器位才能进入待机模式。

在进入待机模式后,除了被使能了的用于唤醒的 I/O,其余 I/O 都进入高阻态,而从待机模式唤醒后,相当于复位 STM32 芯片,程序重新从头开始执行。

单片机STM32低功耗相关推荐

  1. STM32低功耗模式下GPIO如何配置最节能?

    目录 1.将未使用的GPIO 配置为模拟输入模式 2.调节GPIO 速度 3.GPIO不使用时禁用寄存器时钟 4.避免悬空未使用的引脚 STM32低功耗模式下GPIO如何配置最节能,这里总结了一下四点 ...

  2. 毕业设计:电子/通信/物联网/计算机专业选题目参考(嵌入式linux/单片机STM32/web/图像)

    本文推荐的毕业设计题目涉及以下技术:嵌入式Linux.单片机STM32.Opencv.Qt.Web.百度AI.YOLO.目标检测.深度学习...等. 适用于:电子信息.通信.物联网.计算机...等专业 ...

  3. 单片机STM32的5个时钟源知识,你不能错过。

    \\\插播一条: 自己在今年整理一套单片机单片机相关论文800余篇 论文制作思维导图 原理图+源代码+开题报告+正文+外文资料 不可错过的单片机STM32的5个时钟源知识(转) 众所周知STM32有5 ...

  4. 6.stm32 低功耗设计--总结

    一 . 需求分析阶段 1.1 引入 随着近几年电子产品的高速发展,出现了各式各样的便携式产品,他们的发展趋势必将是更小.更轻,功能更强大.那么在产品的开发过程中,需要在满足需求中性能指标后,尽可能的优 ...

  5. STM32低功耗总结——转载

    本文主要解读STM32低功耗模式的机制,并不侧重STM32低功耗的程序实现,而且借助STM32固件库实现STM32低功耗会变的非常简单. 一.STM32芯片性能 使用芯片型号:stm32,CORTEX ...

  6. 单片机 stm32 差分升级 增量升级算法源码, 纯c编写跨平因为是程序源码

    单片机 stm32 差分升级 增量升级算法源码, 纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 YID:83500653978935134Deflag

  7. 单片机 stm32 差分升级 增量升级算法源码,纯c编写跨平因为是程序源码

    单片机 stm32 差分升级 增量升级算法源码,纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 现有:69500653978935134Deflag

  8. 单片机 stm32 差分升级 增量升级算法源码,提供移植 纯c编写跨平因为是程序源码

    单片机 stm32 差分升级 增量升级算法源码,提供移植 纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 YID:83500653978935134Deflag

  9. 单片机 stm32 差分升级 增量升级算法源码

    单片机 stm32 差分升级 增量升级算法源码,提供移植 纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 YID:83500653978935134Deflag

  10. 单片机STM32直连电调控制航模涵道电机的方法总结

    单片机STM32直连电调控制航模涵道电机的方法总结 文章目录 单片机STM32直连电调控制航模涵道电机的方法总结 前言 一.硬件情况 二.涵道电机两种常见的驱动方式 1.有线控制方式 2.无线控制方案 ...

最新文章

  1. sql server 对特殊字符的提取表达式
  2. PostgreSQL 优化器代码概览
  3. 遗传算法的收敛性分析
  4. mysql yn 字段类型_mysql常用数据类型
  5. SVM熟练到精通3:核函数与非线性分类
  6. (一)Hyperledger Fabric 1.1安装部署-基础环境搭建
  7. pcm压缩 java,Java C.PcmEncoding方法代码示例
  8. 数据库周刊40丨OceanBase官网上线开发者社区;人民日报关注易鲸捷;2020中国系统架构师大会10月线上召开;数据库迁移经验分享;MySQL大表超字段问题;SQL高级知识;Oracle等待事件
  9. YYLabel的若干个疑问持续更新
  10. 全球及中国企业数据存储解决方案行业发展动态及前景规划分析报告2022-2027
  11. 服务器配置参数主要有哪些
  12. 校园招聘的简历写作与面试技巧
  13. 微信公众号商城前景分析
  14. Python(七)之OS模块
  15. Thinkphp 6.0请求对象和信息
  16. c++语言解一元二次方程,C++ 求解一元二次方程
  17. asp创建mysql表_asp创建数据库
  18. 【ios】Settings 设置项
  19. 5G时代来临,欢迎进入《头号玩家》的科幻世界
  20. 从蓄水池算法到大数据算法一般性的一点看法

热门文章

  1. Netty和Tomcat有什么区别
  2. 【Python 高级】Python全栈体系(七)
  3. RNN分类IMDB电影评分
  4. ei拼音的四个声调对应的字_幼儿园学前班拼音教案复习ei以及四声调
  5. 关于新版微信电脑版HOOK的技术经验(WX电脑版3.0)
  6. 计算机技术服务业成本核算,如何进行服务行业的成本核算
  7. 两个同级路由如何相互访问
  8. html 给表格添加背景,HTML中新建表格怎么加背景
  9. Linux虚拟机获取最高权限
  10. C++中toupper、tolower 、isalpha、isalnum、isdigit、islower、isupper、isblank、isspace的用法