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

news2024/12/25 1:47:34

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.coloradmin.cn/o/1247839.html

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

相关文章

通过线性回归进行房价预测

房价预测一直是房地产行业和投资者关注的重要问题。线性回归是一种常用的回归算法,可以建立输入变量和连续输出变量之间的关系。在本文中,我们将探讨如何使用线性回归算法来进行房价预测,并介绍该方法的步骤和实践技巧。 一、线性回归算法简…

多回路交流三相单相电压电流电量监测开口式互感器适用多种环境用电能耗监控

1 产品概述 多回路交流无线电压电流传感器/电量采集监测仪搭配多路开口式互感器,可以监控采集三相电压、电流、功率和电量等信息,可用于能耗采集监控。支持RS485和4G网络接口,数据可以对接客户指定的第三方云平台。本产品可实现单相/三相用电…

Linux应用开发基础知识——I2C应用编程(十三)

一、无需编写驱动程序即可访问 I2C 设备 APP 访问硬件肯定是需要驱动程序的,对于 I2C 设备,内核提供了驱动程序 drivers/i2c/i2c-dev.c,通过它可以直接使用下面的 I2C 控制器驱动程序来访问 I2C 设备。 i2c-tools 是一套好用的工具&#xff0…

毅速:复杂零件制造首选3D打印

确金属3D打印技术在制造行业的应用日益广泛,为制造业带来了巨大的变革和机遇。这种增材制造技术相较于传统制造工艺具有许多优势,尤其在制造复杂形状零件方面表现出色。 传统制造工艺在制造复杂形状零件时往往面临诸多挑战,如加工难度大、周期…

SuperMap iDesktopX如何获取简单线的起终端点及坐标

作者:超图研究院技术支持中心-于丁 SuperMap iDesktopX如何获取简单线的起终端点及坐标 在GIS行业应用中,线数据的端点坐标有非常多的用处。 定位和可视化:线数据端点坐标可以用于定位和可视化线要素在空间中的位置。这对于地图制作、规划和…

中文地址命名实体识别训练和预测

效果 github项目地址 https://github.com/taishan1994/pytorch_bert_bilstm_crf_ner 下载项目 放在这个位置“F:\Python\github\ultralytics-main\submain\pytorch_bert_bilstm_crf_ner-main” 训练和预测步骤 1、下载数据集 从github项目可以找到数据集下载地址 https:…

Youtube0播放?运营教你需要的技巧、策略与工具!

对于有跨境意向的内容创作者或者品牌企业来说,YouTube是因其巨大的潜在受众群和商业价值成为最值得投入变现与营销计划的平台。 据统计,98% 的美国人每月访问 YouTube,近三分之二的人每天访问。但是,YouTube还远未达到过度饱和的…

Python 哈希表的实现——字典

哈喽大家好,我是咸鱼 接触过 Python 的小伙伴应该对【字典】这一数据类型都了解吧 虽然 Python 没有显式名称为“哈希表”的内置数据结构,但是字典是哈希表实现的数据结构 在 Python 中,字典的键(key)被哈希&#x…

处理视频的新工具:UniFab 2.0.0.4 Crack

UniFab这是一个用于处理视频的新工具,可以帮助您像专业人士一样获得结果,事实上,它可以确保在项目的任何设备上完美播放,所以,来认识一下 UniFab - 一款功能强大且方便的视频编辑器和转换器,但另一方面&…

【Spring日志】

一.日志作用 1.定位和发现问题 这是日志的主要用途,通过查看日志,我们可以定位问题发生的位置,从而快速的发现问题,分析问题. 2.系统监控 监控几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,比如记录方法的响应时间,响应状态,通过设置不同的规则,超过阈值就…

硅光子,缘何打造量子科技的下一个十年?

/目录/ 一、硅光子技术将率先实现室温、容错量子计算机 二、用于量子科技的硅光子器件 2.1. 单光子源 2.2. 光子探测器 2.3. 波分复用技术 2.4. 低温技术 2.5. 芯片互连 三、可拓展的量子信息应用 3.1. 多光子和高维应用 3.2. 量子纠错 3.3. 量子密钥分发 3.4. 量子…

Android runtime层是如何通过缩减代码来缩减内存的

文章目录 前言:Android 在设备上改进内存的秘密优化编译器101代码大小改进消除写入障碍隐式暂停检查合并回调其他优化改进代码下沉循环优化消除死代码 – SimplifyAlwaysThrows加载存储消除 – 使用 try catch 块加载存储消除 – 使用释放/获取操作新的内联启发式不…

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB?

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB? 1、切换成Mysql/Mariadb数据库1.1 连接数据库1.2 创建数据库实例1.3 配置.ini文件1.4 重启完成切换 1、切换成Mysql/Mariadb数据库 LiveVIS 默认使用 sqlite3 文件…

无需API开发,钱方QFPay连接营销系统和广告推广平台

随着电子商务市场的不断发展,企业需要集成各种业务系统,以提高业务效率和降低运营成本。钱方QFPay提供了一种创新的解决方案,帮助企业实现系统间的连接和集成,无需进行复杂的API开发。除了电商系统和客服系统,钱方还能…

PHP5.3 + Apache2.2 + Xdebug2.1.2环境并集成至PHPStrom全流程(解决使用最好的语言前的痛点问题)

文章目录 问题背景安装流程PHP安装配置PHPApache安装及配置PHPStrom集成PHP环境进行PHP开发 问题背景 由于公司陈旧项目的重新启动,现需要对该项目开发微信登录模块,本人是写 Java 的,但本着程序员终身学习、不惧新事物的特点,现…

CCFCSP试题编号:202305-2试题名称:矩阵运算

只要懂如何进行矩阵乘法就好了&#xff0c;和注意一点数的大小范围就ok了&#xff01; #include <iostream> using namespace std;const int N 10010, D 30; long long tmp[D][D], ans[N][N]; int n, d; int Q[N][D], K[N][D], V[N][D], W[N]; int main() {cin >&g…

2048 数字合成大作战,Android小游戏开发

A. 项目描述 《2048》是一款经典的益智小游戏&#xff0c;它的目标是通过合并相同数字来达到2048这个最高分。 该游戏规则简单&#xff0c;玩家需要通过滑动屏幕来移动方块&#xff0c;相同数字的方块会合并成一个新的数字方块。这样的简单操作让人可以轻松上手。 《2048》小…

室内卫星定位信号弱?——看时间服务器与GNSS模拟器如何实现区域内可靠的室内定位!

方案介绍 GNSS是当前最常用、覆盖最广泛、效率最高的定位导航技术&#xff0c;几乎各个领域都依赖它。然而&#xff0c;在室内或地下&#xff0c;GNSS信号通常非常弱甚至不可用。德思特采用时间服务器与GNSS模拟器相结合&#xff0c;提供了一种基于区域的室内定位方案。这个方…

笔尖笔帽检测4:C++实现笔尖笔帽检测算法(含源码 可是实时检测)

笔尖笔帽检测4&#xff1a;C实现笔尖笔帽检测算法(含源码 可是实时检测) 目录 笔尖笔帽检测4&#xff1a;C实现笔尖笔帽检测算法(含源码 可是实时检测) 1.项目介绍 2.笔尖笔帽关键点检测方法 (1)Top-Down(自上而下)方法 (2)Bottom-Up(自下而上)方法&#xff1a; 3.笔尖笔…

针对CSP-J/S的每日一练:Day 11

一、审题 题目描述 给定两个大小分别为 m m m 和 n n n 的正序&#xff08;从小到大&#xff09;数组 n u m s 1 nums1 nums1 和 n u m s 2 nums2 nums2。请你找出并返回这两个正序数组的中位数。 算法的时间复杂度应该为 O ( l o g ( m n ) ) O(log (mn)) O(log(mn)) 。…