【STM32】PWR电源控制(低功耗模式)

news2024/12/24 2:07:21

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发

目录

PWR简介

修改主频 

低功耗模式

睡眠模式

停止模式

待机模式


PWR简介

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

可编程电压监测器可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务

低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

电源框图

 表:VDDA和VSSA必须分别联到VDD和VSS

STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。 当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。VBAT脚为RTC、LSE振荡器和PC13至PC15端口供电,可以保证当主电源被切断时RTC能继续工作。

电压调节器

复位后调节器总是使能的。根据应用方式它以3种不同的模式工作。

● 运转模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设)。

● 停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。 

● 待机模式:调节器停止供电。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失。

修改主频 

 system_stm32f10x.c文件

//SystemCoreClock变量的值表示当前的系统主频频率
//SystemInit()函数配置时钟树为宏定义的时钟频率

低功耗模式

低功耗模式时,下载程序需要先按着复位键,然后点击下载程序后,立马松开复位按键

●睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)

●停止模式(所有的时钟都已停止)

●待机模式(1.8V电源关闭) 

睡眠模式

为了在睡眠模式下更多地减少功耗,进入睡眠模式前,可在执行WFI或WFE指令前关闭所有外设的时钟,也可以利用预分频器来降低外设的时钟 

在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态

执行WFE指令需配置事件

如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。唤 醒事件可以通过下述方式产生:

● 在外设控制寄存器中使能一个中断,而不是在NVIC(嵌套向量中断控制器)中使能,并且在 Cortex-M3系统控制寄存器中使能SEVONPEND位。当MCU从WFE中唤醒后,外设的中断 挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。

● 配置一个外部或内部的EXIT线为事件模式。当MCU从WFE中唤醒后,因为与事件线对应的 挂起位未被设置,不必清除外设的中断挂起位或外设的NVIC中断通道挂起位。

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

__WFI();//内核指令,执行WFI指令,CPU睡眠,并等待中断唤醒
//执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行,一般先进入中断

停止模式

停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLL、HSI和 HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。

当电压调节器处于低功耗模式下,当系统从停止模式退出时,将会有一段额外的启动延时。如果在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗会增加。

在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。

如果正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。 如果正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。

为了进入停止模式,所有的外部中断的请求位(挂起寄存器(EXTI_PR))和RTC的闹钟标志 都必须被清除,否则停止模式的进入流程将会被跳过,程序继续运行。

//初始化调用
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟

//while循环中调用下面两个函数

//该函数可配置电压调节器运行在正常或低功耗模式,WFI或WFE
PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);	//STM32进入停止模式,并等待中断唤醒

/*
执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
WFI指令进入停止模式,可被任意一个EXTI中断唤醒
WFE指令进入停止模式,可被任意一个EXTI事件唤醒
*/

//当一个中断或唤醒事件导致退出停止模式时,HSI RC振荡器被选为系统时钟。
SystemInit();										//唤醒后,要重新配置主频时钟

待机模式

待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个 1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。

LSE和LSI分别为RTC和IWDG提供时钟信号

从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。 从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等)。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。

待机模式下的输入/输出端口状态

在待机模式下,所有的I/O引脚处于高阻态(浮空输入),除了以下的引脚(微控制器从待机模式退出):

● 复位引脚(始终有效)

● 当被设置为防侵入或校准输出时的TAMPER引脚

● WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位

EWUP:使能WKUP引脚

0:WKUP引脚为通用I/O。WKUP引脚上的事件不能将CPU从待机模式唤醒

1:WKUP引脚用于将CPU从待机模式唤醒,WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿将系统从待机模式唤醒)

注:在系统复位时清除这一位。

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "MyRTC.h"
#include "Delay.h"

int main(void)
{
	OLED_Init();
	MyRTC_Init();

	OLED_ShowString(1, 1, "CNT:");
	OLED_ShowString(2, 1, "ALR:");
	OLED_ShowString(3, 1, "ALRF:");
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
	
	//1
	/*使能WKUP引脚*/
	PWR_WakeUpPinCmd(ENABLE);						//使能位于PA0的WKUP引脚,WKUP引脚上升沿唤醒待机模式
	

	//2
	/*设定闹钟*/
	uint32_t Alarm = RTC_GetCounter() + 10;			//闹钟为唤醒后当前时间的后10s
	RTC_SetAlarm(Alarm);							//写入闹钟值到RTC的ALR寄存器
	OLED_ShowNum(2, 5, Alarm,10);
	
	while(1)
	{

		OLED_ShowNum(1, 5, RTC_GetCounter(),10);
		OLED_ShowNum(3, 6, RTC_GetFlagStatus(RTC_FLAG_ALR),1);
	    
		
		OLED_ShowString(4, 10, "StanBy");
		Delay_ms(1000);
		OLED_ShowString(4, 10, "      ");
		Delay_ms(100);
		
		OLED_Clear();//OLED清屏,模拟关闭外部所有的耗电设备,以达到极度省电
		PWR_EnterSTANDBYMode();STM32进入停止模式,并等待指定的唤醒事件(WKUP上升沿或RTC闹钟)
		//执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行
	}
}

 

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

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

相关文章

基于麻雀SSA优化BP神经网络多输入多输出的数据回归预测Matlab程序SSA-BP 含预测新数据程序

基于麻雀SSA优化BP神经网络多输入多输出的数据回归预测Matlab程序SSA-BP 含预测新数据程序 文章目录 一、基本原理1. SSA(麻雀搜索算法)2. BP(反向传播神经网络)3. SSA-BP回归预测的整合 二、实验结果三、核心代码四、代码获取五、…

使用idea快速创建springbootWeb项目(springboot+springWeb+mybatis-Plus)

idea快速创建springbootWeb项目 详细步骤如下 1)创建项目 2)选择springboot版本 3)添加web依赖 4)添加Thymeleaf 5)添加lombok依赖 然后点击create进入下一步 双击pom.xml文件 6)添加mybatis-plus依赖 …

Ubuntu搭建FTP服务器

目录 1.ftp简介 2.vsftpd 2.1.介绍 2.2.安装与卸载 2.3.综合案例 - 本地用户模式 2.4.1.创建FTP用户 2.4.2.配置vsftpd 2.4.3.配置防火墙 1.ftp简介 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方…

盘点 8 月份 火火火 的开源项目

01 Rnote:释放创意,手绘与笔记的开源之选 Rnote是一个基于矢量的开源绘图应用,专为手绘、手写笔记以及文档和图片注释设计。 它适用于学生、教师以及拥有绘图板的用户,提供了 PDF 和图片的导入导出功能,无限画布以及适…

单词拆分[中等]

优质博文:IT-BLOG-CN 一、题目 给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1&#x…

【第54课】XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架

免责声明 本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

004、架构_计算节点

架构总览 重要线程 管理线程:主要负责元数据相关的管理,涉及启动、DDL、切换;执行线程:是CN最重要的核心线程组,涉及解析、执行计划、分发、聚合;路由线程:主要负责向DN节点分发语句,涉及读写分离、子语句;GTM代理线程:主要负责与GTM交互、涉及申请、活跃GTID查询、释…

YASKAWA机器人维修操作命令攻略-移动命令运用案例

移动命令 1. MOVJ 命令运用案例: MOVJ VJ50.00 PL2 NWAIT UNTIL IN(1)ON 含义:在这个点以关节坐标,按 50.00%的再现速度,定位精度为 2,同时执行下一条非移动 指令,判断输入信号 1 为 on 后,执行…

助力航运管理数字智能化,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建江面河道运输场景下来往航行船只自动检测识别系统

在全球化浪潮的推动下,物流行业作为连接世界的桥梁,其快速发展与进化不仅重塑了国际贸易的格局,更深刻影响着全球贸易金融的进程。其中,海运作为大宗商品跨国、全球化贸易的支柱性运输方式,其重要性不言而喻。随着各国…

ios去水印软件免费版,精选五大高效工具,告别水印烦恼!

随着社交媒体的普及,越来越多的人喜欢在网络上分享自己的生活点滴。在分享视频时,水印往往会影响美观。为了帮助大家解决这个问题,本文为您推荐五大高效免费的iOS去水印软件,让您轻松告别水印烦恼! 软件一&#xff1a…

第137天:横向移动-Linux_ssh工具杂项Linux靶场环境搭建

实验环境及图解: 通过网盘分享的文件:137-Linux内网环境镜像文件 链接: https://pan.baidu.com/s/1W_5DvhbkGYMqML4mi1rjQA?pwdad6r 提取码: ad6r 一般情况下SSH密钥存放在~/.ssh/目录下,也可以文件中搜索已保存的SSH凭证 ~/.ssh/config ~/.…

eclipse下载安装与配置代码补全与中文版

eclipse下载安装与配置中文版 eclipse下载eclipse安装eclipse配置代码补全eclipse配置中文版 eclipse下载 首先我们从官网下载eclipse,点击后是如下页面 我们往下滑,选择自己需要的版本,在这里我们选择的是Windows的Java开发版本&#xff0c…

【自动驾驶】决策规划算法 | 数学基础(二)凸优化与非凸优化

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

机器学习||笔记

在学习机器学习之前,应具备以下基础: 编程技能:精通 Python,掌握数据结构、函数、面向对象编程,熟悉 Git 和 Jupyter Notebook。 数学基础: 线性代数:矩阵运算、特征值与特征向量。微积分&…

2009年

一、选择 B C D B A 答案 C 叶子节点可能出现在最下层和次下层 所以最多七层,前六层是满二叉树 C 答案 B A D A B 二、大题

JVM垃圾回收算法以及垃圾收集器

JVM垃圾回收算法 JVM垃圾回收算法分为三类:标记清除算法、标记整理算法、 复制算法 标记清除算法 垃圾回收分为2个阶段,分别是标记和清除,效率高有磁盘碎片,内存不连续 标记整理算法 标记清除算法一样,将存活对象都向内存另一端移动,然后清理边界以外的垃圾,无…

Windows 11系统 Eclipse 2024版本安装教程和环境搭建

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Eclipse 是一个开源的集成开发环境 (IDE),主要用于 Java 开发,但也支持其他编程语言如 C、Python 和 PHP。它提供了丰富的工具和插件,用于编写、调试和管理代码&#x…

【时时三省】(C语言基础)指针进阶4

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 阅读两段有趣的代码: 代码1: (*(void(*)())0)(); 意思是调用0地址处的函数 该函数无参,返回类型是void 1.void(*)()-函数指针 2.(void(*)())0-对0进…

Python编码系列—Python中的安全密码存储与验证:实战指南

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

基于SSM+JSP的手机商城系统网站

系统背景 系统管理也都将通过计算机进行整体智能化操作,对于网上手机商城所牵扯的管理及数据保存都是非常多的,例如管理员;主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理,用户;主页、个人…