STM32入门笔记15_PWR电源管理模块

PWR和低功耗模式

PWR简介

  • PWR(Power Control) 电源控制
  • PWR负责管理STM32内部的电源供电部分,可以实现可编程电压检测器和低功耗模式的功能
  • 可编程电压检测器(PVD) 可以监控VDD电源电压,当VDD下降到PVD阈值以下或上升到PVD阈值之上时,PVD会触发中断,用于执行紧急关闭任务
  • 低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

电源框图

在这里插入图片描述

  • V D D 、 V S S V_{DD}、V_{SS} VDDVSS给数字电路供电
  • V D D A 、 V S S A V_{DDA}、V_{SSA} VDDAVSSA给模拟电路供电
  • 低电压检测器在检测到 V D D 和 V S S V_{DD}和V_{SS} VDDVSS之间电压低于阈值后,会切换后备供电区域的供电电源为 V B A T V_{BAT} VBAT,而当 V D D 和 V S S V_{DD}和V_{SS} VDDVSS供电正常时,则由 V D D 和 V S S V_{DD}和V_{SS} VDDVSS供电
  • 芯片内部的数字电路(1.8V供电区域)供电电压为1.8V

在这里插入图片描述

  • 关于 V D D A 和 V S S A V_{DDA}和V_{SSA} VDDAVSSA的作用参考手册, 注意在STM32F103C8T6中未引出

上电复位和掉电复位

在这里插入图片描述

可编程电压检测器

在这里插入图片描述

在这里插入图片描述

低功耗模式

在这里插入图片描述

  • 一般使用WFI (wait for interrupt) 等待中断
  • 睡眠模式(Sleep Mode)下, 任一中断都可以唤醒MCU,一般省电
  • 停机模式(Stop Mode)下,仅外部中断能够唤醒MCU,同时1.8V区域的时钟全部关闭,HSI和HSE的时钟也关闭,但电压调节器仍然打开,SRAM和寄存器中的数据不会丢失
  • 待机模式(Standby Mode)下,仅特定事件能够唤醒MCU,相较于停机模式电压调节器关闭,SRAM和寄存器中数据丢失
  • Sleep ModeStop Mode唤醒后程序从进入低功耗模式的代码开始重新执行,而Standby Mode唤醒后程序从头开始执行(因为数据都丢失了)
  • 值的注意的是,Stop Mode唤醒后默认使用HSI (8MHz)作为系统时钟, 若想用HSE则需重新调用SystemInit()函数

模式选择

在这里插入图片描述

  • 对照该图和参考手册配置自己需要的模式

睡眠模式

  • 执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行

  • SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠 (WFI或WFE写主函数里立刻进入睡眠还是先处理中断差别不大)

  • 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态 (为进一步降低能耗,在执行WFI/WFE前关闭能关闭的外设)

  • WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒

  • WFE指令进入睡眠模式,可被唤醒事件唤醒

停止模式

  • 执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行

  • 1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来

  • 在停止模式下,所有的I/ O引脚都保持它们在运行模式时的状态 (为进一步降低能耗,在执行WFI/WFE前关闭能关闭的外设)

  • 当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟

  • 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时

  • WFI指令进入停止模式,可被任意一个EXTI中断唤醒 (RTC和PVD可借道EXTI中断通道将MCU从停止模式唤醒)

待机模式

  • 执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行

  • 整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电

  • 在待机模式下,所有的I/O引脚变为高阻态(浮空输入)(不用手动关闭外设)

  • WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式

降低系统主频和关闭APB和AHB总线上未被使用的外设时钟

  • 除了低功耗模式能降低电源消耗外,降低系统主频和关闭未使用的外设时钟也是降低电源消耗的很好的方式
  • 系统主频通过时钟树可以看出,由HSE接外部晶振提供(一般8MHz),经过PLL得到倍频,然后作为系统主频

在这里插入图片描述

  • 关于系统主频的修改,相关的文件是system_stm32f10x.c,通过宏定义可修改成以下时钟频率, 具体函数的执行流程可以自己看或看江科大的视频
    在这里插入图片描述

  • 如何取消只读文件的限制

在这里插入图片描述

打开文件属性,取消可读后确定
在这里插入图片描述

文件上的钥匙消失,现在可以修改文件中关于主频的宏定义

在这里插入图片描述

主要代码

功能为单片机运行10s即进入停止模式, 当检测到外部中断后, 退出停止模式, 运行10s后再次进入停止模式

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyRTC.h"
#include "key.h"
#include "LED.h"
#include "Timer.h"
#include "valve.h"uint8_t Stop_Time;int main(void)
{OLED_Init();MyRTC_Init(); // RTC初始化Key_Init();  // 按键初始化LED_Init();  // LED 初始化Timer_TIM3_Init();  // 定时器初始化Valve_Init();  // 电磁阀端口初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);  // 打开PWR时钟 *OLED_ShowString(1, 1, "Date:XXXX-XX-XX");OLED_ShowString(2, 1, "Time:XX:XX:XX");Stop_Time = 0;while (1){MyRTC_ReadTime();OLED_ShowNum(1, 6, MyRTC_Time[0], 4);OLED_ShowNum(1, 11, MyRTC_Time[1], 2);OLED_ShowNum(1, 14, MyRTC_Time[2], 2);OLED_ShowNum(2, 6, MyRTC_Time[3], 2);OLED_ShowNum(2, 9, MyRTC_Time[4], 2);OLED_ShowNum(2, 12, MyRTC_Time[5], 2);OLED_ShowNum(3, 1, Stop_Time, 3);if(Stop_Time > 100){Stop_Time = 0;OLED_Clear();  // 屏幕熄灭RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, DISABLE);  // 关闭GPIOB时钟PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);  // 进入停止模式*SystemInit();  // 重新设置时钟OLED_Init();Valve_Init();  // 电磁阀端口初始化OLED_ShowString(1, 1, "Date:XXXX-XX-XX");OLED_ShowString(2, 1, "Time:XX:XX:XX");}}
}/**
* @brief 按键中断服务函数 PA8
*/
void EXTI9_5_IRQHandler(void)
{if(EXTI_GetFlagStatus(EXTI_Line8)){Delay_ms(10);if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0){LED_Turn();}EXTI_ClearITPendingBit(EXTI_Line8);}
}/**
* @brief 定时器中断服务函数 TIM3_UpDate
*/
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3, TIM_IT_Update)){Stop_Time += 1;}TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
  • 要进入停止模式只需通过RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 打开PWR时钟
  • 再在需要进入停止模式的时候调用PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI); 即可进入停止模式
  • 进入停止模式前,根据需求关闭耗电的外设
  • 从停止模式退出后,系统使用HSI时钟主频默认为8Mhz, 需重新调用SystemInit()函数重新设置时钟为HSE使主频恢复为72MHz
  • 从停止模式退出后,应重新初始化关闭的外设

效果展示

【STM32停止模式】

参考资料

模式退出后,系统使用HSI时钟主频默认为8Mhz, 需重新调用SystemInit()函数重新设置时钟为HSE使主频恢复为72MHz

  • 从停止模式退出后,应重新初始化关闭的外设

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

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

相关文章

C++学习之路(一)什么是C++?如何循序渐进的学习C++?【纯干货】

C是一种高级编程语言,是对C语言的扩展和增强。它在C语言的基础上添加了面向对象编程(OOP)的特性,使得开发者能够更加灵活和高效地编写代码。 C的名字中的“”符号表示在C语言的基础上向前发展一步,即“加加”&#x…

iOS APP包分析工具 | 京东云技术团队

介绍 分享一款用于分析iOSipa包的脚本工具,使用此工具可以自动扫描发现可修复的包体积问题,同时可以生成包体积数据用于查看。这块工具我们团队内部已经使用很长一段时间,希望可以帮助到更多的开发同学更加效率的优化包体积问题。 工具下载…

在VMware Workstation的Centos上实现KVM虚拟机的安装部署:详细安装部署过程(保姆级)

KVM概述 • 以色列qumranet公司研发,后被RedHad公司收购 (1)kvm只支持x86平台 (2)依赖于 HVM,inter VT AMD-v • KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟…

【Unity】 UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

1. 什么是PhysicsRaycaster组件? PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。 2. PhysicsRaycaster的工作原理 PhysicsRaycast…

【Proteus仿真】【51单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能: 系统运行后&#xf…

基于GPRS的汽车碰撞自动报警系统(论文+源码)

1. 系统设计 本次基于GPRS的汽车碰撞自动报警系统的设计中,其主要的目标功能如下:1、实时检测当前的GPS精度和纬度坐标;2.当发生碰撞后系统自动将当前的信息通过GPRS数据发送到远端数据进行报警;3、系统在碰撞后一方面进行本地报警…

听GPT 讲Rust源代码--src/tools(2)

题图来自AI生成 File: rust/src/tools/rust-analyzer/crates/hir-def/src/src.rs rust-analyzer 是一个 Rust 语言的语法分析器和语义分析器,用于提供代码补全、导航、重构等开发工具。而 rust-analyzer 的代码实现存储在 rust/src/tools/rust-analyzer 这个文件夹中…

010 OpenCV中的4种平滑滤波

目录 一、环境 二、平滑滤波 2.1、均值滤波 2.2、高斯滤波 2.3、中值滤波 2.4、双边滤波 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、平滑滤波 2.1、均值滤波 在OpenCV库中,blur函数是一种简…

递归剪枝题

期中考终于考完了,整道题奖励下自己 我一北大同学问我的,说他递归超时了,叫我想一个办法 后面他说他加了个剪枝就过了,然后我自己尝试了一个方法: 就是先把城市按1到n排列,然后考虑互换,如果互…

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信,表示自己已经过了8月份的PMP考试,开始着手往项目管理岗位转型,但是对于项目管理岗位的面试却一筹莫展。放轻松,大家的需求喜番都了解了,喜番给大家总结了一些项目经理在面试的时…

SpringCloud 微服务全栈体系(十七)

第十一章 分布式搜索引擎 elasticsearch 七、搜索结果处理 搜索的结果可以按照用户指定的方式去处理或展示。 1. 排序 elasticsearch 默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#…

【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载,docs无法加载,redocs无法使用

使用fastapi的时候,swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有时候无法加载(国内环境原因或者是局域网屏蔽),此时就需要自己用魔法下载好对应文件,然后替换到fastapi里面去。 fastapi里面依靠这…

java学习part07数组工具类

1比较内容 2输出信息 3值填充 4快速排序 5二分查找 负数没找到,其他表示下标

ES6 — ES14 新特性

一、ES6 新特性(2015) 1. let和const 在ES6中,新增了let和const关键字,其中 let 主要用来声明变量,而 const 通常用来声明常量。let、const相对于var关键字有以下特点: 特性varletconst变量提升✔️全局…

【漏洞复现】金蝶云星空管理中心 ScpSupRegHandler接口存在任意文件上传漏洞 附POC

漏洞描述 金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织,多利润中心的大中型企业,以 “开放、标准、社交”三大特性为数字经济时代的企业提供开放的 ERP 云平台。服务涵盖:财务、供…

【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比

文章目录 前言什么是UUID?什么是雪花ID?什么是MySql自增ID?优缺点对比UUID:优点1.全球唯一性2.无需数据库支持 缺点1.存储空间大2.索引效率低3.查询效率低 雪花ID:优点1.分布式环境下唯一性 缺点1.依赖于机器时钟2.存储空间较大3.查询效率低 MYSQL自增:优点1.简单…

IP 代理的基础知识有哪些?

本文将介绍流冠IP代理的基础知识,帮助您了解IP代理的概念、类型、作用、设置方法和注意事项。 一、IP代理的概念 IP代理是一种网络代理服务,它通过代理服务器帮助用户访问互联网,并将用户的请求转发到目标网站,同时将目标网站的响…

手写工作流设计模式,针对常见的工作流步骤流转,减少过多的if/else,提升编程思维

需求 这一年下来,写两次工作流流转,总结下经验。 第一次写的时候,只找到用模版设计模式包裹一下,每个方法都做隔离,但是在具体分支实现的时候,if/else 满屏分,而且因为要针对不同情况&#xff…

微信小程序实现类似Vue中的computed、watch功能

微信小程序实现类似Vue中的computed、watch功能 构建npm使用 构建npm 创建包管理器 进入小程序后,打开终端,点击顶部“视图” - “终端” 新建终端 使用 npm init -y初始化包管理器,生成一个package.json文件 安装 npm 包 npm install --…

Java Web 实战 21 - 用 Servlet 实现一个Hello World

用 Servlet 来写一个 Hello World~ 一 . 基本部署方式1.1 创建 Servlet 项目1.2 引入依赖1.3 创建目录1.4 编写代码继承 HttpServlet重写 doGet 方法删除 super 方法加上 WebServlet 注解写业务逻辑 1.5 打包1.6 部署1.7 验证1.8 小结 二 . 更方便的部署方式2.1 Smart Tomcat 的…