STM32个人笔记-电源管理

news2025/7/12 11:28:48

笔记来源于STM32F103VET6,野火指南者,中文参考手册,HAL库开发手册和b站的野火指南者视频。观看过好多次了,但往往理解得不够全面,现记下小笔记,用来回顾。属于个人笔记。

电源监控器

STM32芯片主要通过VDD引脚从外部获取电源,在它的内部具有电源监控器用于检测VDD的电压,以实现复位功能及掉电紧急处理功能,保证系统可靠地运行。

上电复位与掉电复位(POR与PDR)

当检测到VDD的电压低于阈值VPOR及VPDR时,无需外部电路辅助,STM32芯片会自动保持在复位状态,防止因电压不足强行工作而带来严重的后果。

在刚开始电压低于VPOR时(约1.92V),STM32保持在上电复位状态(POR,Power On Reset)。当VDD电压持续上升至大于VPOR时,芯片开始正常运行。

而在芯片开始正常运行的时候,当检测到VDD电压下降至低于VPDR阈值(约1.88V),会进入掉电复位状态(PDR,Power Down Reset)。

可编程电压检测器PVD(实时监测VDD的电压)

当检测到VDD电压低于编程的VPVD阈值时,会向内核产生一个PVD中断(EXTI16线中断)以使内核在复位前进行紧急处理。该电压阈值可通过电源控制寄存器PWR_CSR设置。 

阈值等级条件最小值典型值最大值单位
级别0上升沿2.12.182.26V
级别0下降沿22.082.16V
级别1上升沿2.192.282.37V
级别1下降沿2.092.182.27V
级别2上升沿2.282.382.48V
级别2下降沿2.182.282.38V
级别3上升沿2.382.482.58V
级别3下降沿2.282.382.48V
级别4上升沿2.472.582.69V
级别4下降沿2.372.482.59V
级别5上升沿2.572.682.79V
级别5下降沿2.472.582.69V
级别6上升沿2.662.782.9V
级别6下降沿2.562.682.8V
级别7上升沿2.762.883V
级别7下降沿2.662.732.9V

STM32电源系统

ADC电源及参考电压(VDDA供电区域) 

为了提高转换精度,STM32的ADC配有独立的电源接口,方便进行单独的滤波。ADC的工作电源使用VDDA引脚输入,使用VSSA作为独立的地连接,VREF引脚作为ADC提供测量使用的参考电压。

VDD供电区域

所有数字逻辑都在内。VDD的供电电压为1.8V。 

后备供电区域

接晶振。RTC用到的纽扣电池推荐CR1220。

低功耗模式

工作模式(高功耗->低功耗):运行、睡眠、停止、待机。

若备份域电源正常供电,备份域内的RTC都可以正常运行,备份域内的寄存器的数据会被保存,不受功耗模式影响。

睡眠模式 

特性说明
立即睡眠在执行WFI或WFE指令时立即进入睡眠模式
退出时睡眠在退出优先级最低的中断服务程序后才进入睡眠模式
进入方式

内核寄存器的SLEEPDEEP=0,然后调用WFI或WFE指令即可进入睡眠模式;

另外若内核寄存器的SLEEPONEXXIT=0时,进入“立即睡眠”模式。SLEEPONEXXIT=1时,进入“退出时睡眠”模式

唤醒方式

如果是使用WFI指令睡眠的,则可使用任意中断唤醒;

如果是使用WFE指令睡眠的,则由事件唤醒;

睡眠时关闭内核时钟,内核停止,而外设正常运行,在软件上表现为不再执行新的代码。这个状态会保留睡眠前的内核寄存器、内存的数据
唤醒延迟无延迟
唤醒后

若由中断唤醒,先进入中断,退出中断服务程序后,接着执行WFI指令后的程序;

若由事件唤醒,直接接着执行WFE后的程序

停止模式

在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设停止了工作,但由于其1.8V区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所有从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。停止模式可以由任意一个外部中断(EXTI)唤醒,在停止模式中可以选择电压调节器开启或低功耗模式。

特性说明
调压器低功耗模式在停止模式下调压器可工作在正常模式或低功耗模式,可进一步降低功耗
进入方式

内核寄存器的SLEEPDEEP=1,PWR_CR:PDDS=0,然后调用WFI或WFE指令即可进入停止模式;

PWR_CR:LPDS=0,调压器工作在正常模式;PWR_CR:LPDS=1,调压器工作在低功耗模式;

唤醒方式

如果是使用WFI指令睡眠的,可使用任意EXTI线的中断唤醒;

如果是使用WFE指令睡眠的,可使用任意配置为事件模式的EXTI线事件唤醒;

停止时内核停止,片上外设也停止。这个状态会保留停止前的内核寄存器、内存的数据
唤醒延迟基础延迟为HSI振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间
唤醒后

若由中断唤醒,先进入中断,退出中断服务程序后,接着执行WFI指令后的程序;

若由事件唤醒,直接接着执行WFE后的程序。唤醒后,STM32会使用HSI作为系统时钟

待机模式

待机模式,它除了关闭所有的时钟,还把1.8V区域的电源也完全关闭了。即从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片进行复位,重新检测boot条件,从头开始执行程序。

它由四种唤醒方式,分别是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口均工作在高阻态
唤醒延迟芯片复位的时间
唤醒后相当于芯片复位,在程序表现为从头开始执行代码

库函数

PWR_PVDLevelConfig(配置PVD监控功能)

低于阈值产生PVD中断。阈值由参数配置。参数可选择宏,宏对应上述的阈值等级。

PWR_EnterSTOPMode(进入停止模式)

void PWR_EnterSTOPMode(uint32_t PWR_Regulator,uint8_t PWR_STOPEntry);

PWR_Regulator可选择宏:PWR_Regulator_ON、PWR_Regulator_LowPower。

PWR_STOPEntry可选择宏:PWR_STOPEntry_WFI、PWR_STOPEntry_WFE。

#define __WFI __wfi
#define __WFE __wfe

PWR_EnterSTANDBYMode(进入待机模式)

void PWR_EnterSTANDBYMode(void);

进入待机模式必须开启PWR时钟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码审计基础之SQL注入漏洞

1.SQL注入原理 SQL注入就是攻击者通过把恶意的SQL语句插入到Web表单的输入页面中,且插入的恶意语句会导致原有的SQL语句发生改变,从而达到攻击者的目的去让它执行一些危险的数据操作,进一步欺骗服务器去执行一些非本意的操作。 简单来讲&am…

Python BeautifulSoup4 入门使用

一、简介 BeautifulSoup4 与 lxml 一样,是一个 html 解析器,主要功能也是解析和提取数据。 BeautifulSoup4 是 爬虫 必学的技能。BeautifulSoup 最主要的功能是从网页抓取数据,Beautiful Soup 自动将输入文档转换为 Unicode 编码&#xff0c…

Verilog语言中case、casex、casez的用法和区别

casez与casex语句是case语句的两种变体, 在写testbench时用到。case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。 一、case、casex、casez的区别 下表给出case、casex、casez的真值表: 1)在case语…

【计算机网络实验】防火墙访问控制列表实验

实验内容 防火墙访问控制列表实验 实验目的 理解访问控制列表的工作原理;了解访问控制列表的类型;学习标准访问控制列表的配置。 实验要求 1 实验拓扑图 本实验所用的网络拓扑如图1所示。 图1 ACL实验拓扑结构 2 实验步骤 Router0配置;&…

解决 npm install express 遇到的问题总结

方法1:权限 以管理员身份运行cmd执行npm install express --save命令 方法2:切换镜像源 查看镜像源 npm config get registry 如果要直接更换淘宝:npm config set registry https://registry.npmmirror.com/ 使用nrm切换 1.安装nrm npm i …

106362-34-9,(D-Ala1)-Peptide T amide

肽t的有效类似物DAPTA (aSTTTNYT-amide)在单核/巨噬细胞中显示出很强的抗hiv - 1活性,该肽抑制病毒的进入。 编号: 110545中文名称: 肽T、(D-Ala1)-Peptide T amide英文名: (D-Ala1)-Peptide T amideCAS号: 106362-34-9单字母: H2N-DAla-STTTNYT-NH2三字母: H2N-DAl…

设计模式 — 抽象工厂模式

抽象工厂模式女娲的失误实例 一实例 二抽象工厂模式的应用抽象工厂模式的优点抽象工厂模式的缺点抽象工厂模式的使用场景抽象工厂模式的注意事项女娲的失误 女娲造人的故事。人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型&#…

Spark框架概述

Spark 框架概述 1.1. Spark是什么 定义:Apache Spark是用于大规模数据处理的统一分析引擎。 弹性分布式数据集RDD是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个Spark的核心数据结构…

体验静态代码块

定义 public class Game {// 静态代码块static {System.out.println("static...run...");}// 构造方法public Game() {System.out.println("game...construct...");} }使用 结论 静态代码块在类被首次加载的时候触发启动

效能优化实践:C/C++单元测试万能插桩工具

研发效能是一个涉及面很广的话题,它涵盖了软件交付的整个生命周期,涉及产品、架构、开发、测试、运维,每个环节都可能影响顺畅、高质量地持续有效交付。在腾讯安全平台部实际研发与测试工作中我们发现,代码插桩隔离是单元测试工作…

theos tweak导入自定义类

有时,我们使用tweak的时候需要用到自定义的类,那么怎么引用呢? 假设我们有一个自定义类,people.h/people.m 那么分两种情况: 情况一,直接使用官方的tweak工程: 目录结构一般如下: …

[第九篇]——Docker 镜像使用

Docker 镜像使用 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。 下面我们来学习: 1、管理和使用本地 Docker 主机镜像2、创建镜像列出镜像列表 …

蛋白纯化-实验设计

小 M 不怕纯化“难”,IP、WB 只等闲。泡了两年实验室的小 M,理论与实操经验共有,且看我如何闯过蛋白纯化的几道“关”。 第一关 产品选择 小 M 敲黑板:此关最基础也最重要,谨防“一步错,步步错”。 亲和层析…

jenkins+junit4+allure+selenium实现自动化测试与结果可视化

安装包 jenkins.war jdk-8u332-linux-x64.tar.gz https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/2.17.2/ allure-commandline-2.17.2.zip https://chromedriver.storage.googleapis.com/index.html chromedriver 安装JDK 解压 tar xvf…

优盘数据恢复如何操作?恢复U盘数据的三个简单方法

对于我们用户来说,经常使用U盘来存储一些重要的文件是很常见的事。很多用户在使用的时候,经常因为操作不规范,而造成一些数据丢失。那么我们该如何做呢?优盘数据恢复如何操作?今天小编就来为大家分享一下关于如何将U盘…

基于梯度的图像边缘检测

参考视频:https://www.bing.com/videos/search?qacomputationalapproachtoedgedetection&docid608014236869751913&mid8C04384FFDD6A47533238C04384FFDD6A4753323&viewdetail&FORMVIRE 参考文献:A Computational Approach to Edge Dete…

【图像去噪】基于空间光谱总变化减少高光谱图像的混合噪声(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

线程的“打断”

【打断线程的三个方法】: //Thread.java public void interrupt() //t.interrupt() 打断t线程(设置t线程某给标志位ftrue,并不是打断线程的运行) public boolean isInterrupted() //t.isInterrupted() 查询打…

线程池源码解析 1.前导_FutureTask源码解析

线程池—FutureTask源码解析 简介 在学习线程池之前,需要先学习一下 FutureTask,因为线程池 submit 的结果就是 FutureTask。 那么什么是 FutureTask,其表示一个未来的任务。也就是说这个任务比较耗时,当前调用线程会阻塞拿到这…

某程序员发现 CSDN官方“漏洞”,立省¥10000+,抓紧薅吧

是一个省钱的组织!!!它叫做勤学会,CSDN 官方背书。 打开这篇博客,你首先就要面对一个问题。 勤学会到底是什么?活动?社区?还是一个名词。 今天这篇博客就从解释【勤学会】这三个字开…