当前位置: 首页 > news >正文

STM32 - PWR 笔记

PWR(Power Control)电源控制

PWR 负责管理 STM32 内部的电源供电部分,可以实现 可编程电压监测器 和 低功耗模式 的功能

  1. 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
  2. 低功耗模式包括 睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

电压调节器

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

 电源框图

细分三个部分,VDDA供电区域 是负责模拟电路 供电,VDD供电区域 是负责 数字电路 供电。    后备供电区域是备用电源。

可编程电压监测器(PVD)  

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

STM32内部有一个完整的上电复位(POR)和掉电复位(PDR)电路,当供电电压达到2V时系统既能正常工作。当 VDD / VDDA 低于指定的限位电压VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。

 上电复位和掉电复位的波形图

设置PVDE位来使能PVD 

当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。

PVD的门限

 低功耗模式

有三种低功耗模式:
  • 睡眠模式:Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行
  • 停止模式:所有的时钟都已停止
  • 待机模式:1.8V电源关闭
在运行模式下,可以通过以下方式中的一种降低功耗:
  • 降低系统时钟
  • 关闭APB和AHB总线上未被使用的外设时钟。

 执行WFI(Wait For Interrupt)或者WFE(Wait For Event)指令后,STM32进入低功耗模式

实际建议能用WFI就使用WFI进入睡眠,WFE进入睡眠,解除有些麻烦 

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

开启代码 

 修改主频

把此文件只读变为可写(在该文件的属性中修改),然后想改哪个主频就解除哪个!!! 

睡眠模式

  • 执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
  • SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠
  • 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态
  • WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
  • WFE指令进入睡眠模式,可被唤醒事件唤醒 
__WFI();			//执行WFI指令,CPU睡眠,并等待中断唤醒__WFE();            //执行WFE指令,CPU睡眠,并等待事件唤醒

停止模式

  • 执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
  • 1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来
  • 在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态 当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟
  • 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时
  • WFI指令进入停止模式,可被任意一个EXTI中断唤醒
  • WFE指令进入停止模式,可被任意一个EXTI事件唤醒
    /*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//开启PWR的时钟//停止模式和待机模式一定要记得开启PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);//STM32进入停止模式,并等待中断唤醒SystemInit();									//唤醒后,要重新配置时钟

待机模式

  •  执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行
  • 整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电
  • 在待机模式下,所有的I/O引脚变为高阻态(浮空输入)
  • WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式
/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//开启PWR的时钟//停止模式和待机模式一定要记得开启/*使能WKUP引脚*/PWR_WakeUpPinCmd(ENABLE);					//使能位于PA0的WKUP引脚,WKUP引脚上升沿唤醒待机模式/*设定闹钟*/uint32_t Alarm = RTC_GetCounter() + 10;		//闹钟为唤醒后当前时间的后10sRTC_SetAlarm(Alarm);						//写入闹钟值到RTC的ALR寄存器OLED_ShowNum(2, 6, Alarm, 10);				//显示闹钟值/*开启停止*/PWR_EnterSTANDBYMode();				//STM32进入停止模式,并等待指定的唤醒事件(WKUP上升沿或RTC闹钟)/*待机模式唤醒后,程序会重头开始运行*/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【国产开源可视化引擎Meta2d.js】鹰眼地图
  • 算法小练之 位运算基础
  • 百数教学——表单提交校验,为数据准确保驾护航
  • 试用笔记之-汇通Exe可执行文件之pe分析
  • Jenkins构建python项目
  • hf-mirror (huggingface 的国内镜像)
  • 【深度学习基础】环境搭建 Linux报错bash: conda: command not found...
  • [C++]: 模板进阶
  • 【Nvidia+AI相机】涂布视觉检测方案专注提高锂电池质量把控标准
  • 数据分析入门指南:表结构数据(三)
  • MySQL8之mysql-community-devel的作用
  • 基于PHP+MySQL组合开发的家政预约小程序源码系统 带完整的安装代码包以及搭建部署教程
  • android调用openssl库
  • PHP同城多商户多行业系统小程序源码
  • UML建模案例分析-时序图和类图的对应关系
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • angular2开源库收集
  • Brief introduction of how to 'Call, Apply and Bind'
  • Cumulo 的 ClojureScript 模块已经成型
  • ES6系统学习----从Apollo Client看解构赋值
  • ES6之路之模块详解
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript新鲜事·第5期
  • Java编程基础24——递归练习
  • laravel5.5 视图共享数据
  • Octave 入门
  • 编写高质量JavaScript代码之并发
  • 事件委托的小应用
  • 一个JAVA程序员成长之路分享
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​什么是bug?bug的源头在哪里?
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (javaweb)Http协议
  • (超详细)语音信号处理之特征提取
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)glDrawArry绘制
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)事件系统
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Linux下编译安装log4cxx
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • **CI中自动类加载的用法总结
  • .net Application的目录
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .netcore如何运行环境安装到Linux服务器
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • .net开发日常笔记(持续更新)
  • .net中我喜欢的两种验证码
  • [.net] 如何在mail的加入正文显示图片
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(4)