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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32测试DHT11温湿度

ESP32测试DHT11温湿度 arduino导入dht库 2.arduion里 DHT11 代码 #include <DHT.h> #define DHTPIN 4 //修改数据引脚 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() {Serial.begin(9600);dht.begin(); }void loop() { float h dht.readHum…

使用Git bash切换Gitee、GitHub多个Git账号

Git是分布式代码管理工具&#xff0c;使用命令行的方式提交commit、revert回滚代码。这里介绍使用Git bash软件来切换Gitee、GitHub账号。     假设在gitee.com上的邮箱是alicefoxmail.com 、用户名为alice&#xff1b;在github上的邮箱是bobfoxmail.com、用户名为bob。 账号…

iframe内部子页面与外部主页面通讯

文章目录 一、问题二、解决2.1、子页面2.2、主页面 三、知识点3.1、[浏览器兼容性](https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%85%BC%E5%AE%B9%E6%80%A7)3.2、详解3.2.1、发送方3.2.2、接收方 一、问题 如上所示&a…

Spring Boot 整合MyBatis-Plus 详解

MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 全新的 MyBatis-Plus 3.0 版本基于 JDK8&#xff0c;提供了 lambda 形…

【附代码】判断线段是否相交算法(Python,C++)

【附代码】判断线段是否相交算法&#xff08;Python&#xff0c;C&#xff09; 文章目录 【附代码】判断线段是否相交算法&#xff08;Python&#xff0c;C&#xff09;相关文献测试电脑配置基础向量旋转向量缩放向量投影推导 点乘定义推导几何意义 叉乘定义推导几何意义 判断线…

Java架构师发展方向和历程

目录 1 导论2 架构师的三观培养3 架构师的遇到的困难4 架构师职责5 架构师之路6 架构师的发展方向7 应用领域架构师8 业务架构师9 系统架构师和企业架构师10 技术路线和演进规划11 一线大厂的技术生态拓张案例12 如何推进项目落地想学习架构师构建流程请跳转:Java架构师系统架…

ARCore:在Android上构建令人惊叹的增强现实体验

ARCore&#xff1a;在Android上构建令人惊叹的增强现实体验 一、 AR 介绍1.1 AR技术简介1.2 AR技术原理1.3 AR技术应用领域 二、Google的增强现实平台ARCore2.1 ARCore简介2.2 ARCore API介绍2.3 ARCore API使用示例 三、总结 一、 AR 介绍 增强现实 Augmented Reality&#x…

芯能科技-603105 三季报分析(20231123)

芯能科技-603105 基本情况 公司名称&#xff1a;浙江芯能光伏科技股份有限公司 A股简称&#xff1a;芯能科技 成立日期&#xff1a;2008-07-09 上市日期&#xff1a;2018-07-09 所属行业&#xff1a;电气机械和器材制造业 周期性&#xff1a;1 主营业务&#xff1a;分布式光伏解…

【LeetCode刷题笔记】DFSBFS(二)

994. 腐烂的橘子(树/图的BFS问题) 解题思路: 多源BFS ,首选找到 所有的腐烂的橘子 ,放入队列中,然后进行 BFS 广搜,广搜的 层数 - 1 就是所需要花费的分钟数。 在最开始先扫描一遍二维数组,将所有的 腐烂的橘子 加入 队列 ,同时统计新鲜橘子的数量 <

Django DRF序列化器serializer

以下案例由浅到深&#xff0c;逐步深入&#xff0c;通过实例介绍了序列化器的使用方法&#xff0c;和遇到的常见问题的解决方法。 一、序列化器serializers.Serializer 1、urls.py urlpatterns [path("api/<str:version>/depart/",views.DepartView.as_vie…

Banana Pi [BPi-R3-Mini] 回顾和主线 ImmortalWrt 固件支持

BananaPi BPi-R3 Mini 采用 MediaTek 830&#xff08;4 个 A53&#xff0c;最高 2.0 GHz&#xff09;&#xff0c;具有 2 个 2.5 GbE、AX4200 2.4G/5G 无线和 USB 2.0 端口。它还具有两个 M.2 连接器&#xff0c;可用于 NVMe SSD 和 5G 模块&#xff08;板上包含 Nano SIM 插槽…

基于.net framework4.0框架下winform项目实现寄宿式web api

首先Nuget中下载包&#xff1a;Microsoft.AspNet.WebApi.SelfHost&#xff0c;如下&#xff1a; 注意版本哦&#xff0c;最高版本只能4.0.30506能用。 1.配置路由 public static class WebApiConfig{public static void Register(this HttpSelfHostConfiguration config){// …

MDK AC5和AC6是什么?在KEIL5中添加和选择ARMCC版本

前言 看视频有UP主提到“AC5”“AC6”这样的词&#xff0c;一开始有些不理解&#xff0c;原来他说的是ARMCC版本。 keil自带的是ARMCC5&#xff0c;由于ARMCC5已经停止维护了&#xff0c;很多开发者会选择ARMCC6。 在维护公司“成年往事”项目可能就会遇到新KEIL旧版本编译器…

NSGA-II求解微电网多目标优化调度(MATLAB)

一、NSGA-II简介 NSGA-Ⅱ算法是Kalyanmoy Deb等人于 2002年在 NSGA 的基础上提出的&#xff0c;它比 NSGA算法更加优越&#xff1a;它采用了快速非支配排序算法&#xff0c;计算复杂度比 NSGA 大大的降低&#xff1b;采用了拥挤度和拥挤度比较算子&#xff0c;代替了需要指定的…

第十五届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组(详细分析解答)

目录 1.动态的Tab栏 1.1 题目要求 1.2 题目分析 1.3 源代码 2.地球环游 2.1 题目要求 2.2 题目分析 2.3 源代码 3.迷惑的this 3.1 题目要求 3.2 题目分析 3.3 源代码 4.魔法失灵了 4.1 题目要求 4.2 题目分析 4.3 源代码 5.燃烧你的卡路里 5.1 题目要求 5.2…

西门子(Siemens)仿真PLC启动报错处理

目录 一、背景&#xff1a; 二、卸载软件 三、安装软件 三、启动软件 四、下载PORTAL项目 五、测试 一、背景&#xff1a; 在启动S7-PLCSIM Advanced V3.0仿真PLC时报错&#xff0c;报错信息为&#xff1a;>>Siemens PLCSIM Virtual Switch<<is misconfigu…

基于C#实现Prim算法

图论在数据结构中是非常有趣而复杂的&#xff0c;作为 Web 码农的我&#xff0c;在实际开发中一直没有找到它的使用场景&#xff0c;不像树那样的频繁使用&#xff0c;不过还是准备仔细的把图论全部过一遍。 一、最小生成树 图中有一个好玩的东西叫做生成树&#xff0c;就是用…

Redis并发问题解决方案

目录 前言 1.分布式锁 1.基于单个节点 2.基于多个节点 3.watch(乐观锁) 2.原子操作 1.单命令操作 2.Lua 脚本(多命令操作) 3.事务 1.执行步骤 2.错误处理 3.崩溃处理 总结 前言 在多个客户端并发访问Redis的时候&#xff0c;虽然Redis是单线程执行指令&#xff…

基于IDEA+HTML+SpringBoot前后端分离电子商城

基于springboot的电子商城 项目介绍&#x1f481;&#x1f3fb; •B2C 商家对客户 •C2B2C 客户对商家对客户 1.1.1 B2C 平台运营方即商品的卖家 小米商城 •商品 •用户 1.1.2 C2B2C 平台运营方不卖商品&#xff08;也可以卖&#xff09; 卖家是平台的用户 买家也是平台用户 •…

【算法】经典算法题

文章目录 专题一&#xff1a;双指针1. 移动零2. 复写零3. 快乐数4. 盛最多水的容器5. 有效三角形的个数6. 查找总价格为目标值的两个商品7. 三数之和8. 四数之和 专题二&#xff1a;滑动窗口1. 长度最小的子数组2. 无重复字符的最长字串3. 最大连续1的个数 III4. 将 x 减到 0 的…