STM32--PWR电源控制

2023-09-17 13:15:13

PWR

STM32的PWR模块是其电源管理系统的核心部分,负责控制和管理芯片的供电和电源状态

电源

STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。
当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。
在这里插入图片描述

在这里插入图片描述
VDDA供电区域是为模拟电路提供电源的区域。VDDA通常由外部电源提供,通过电源管理单元(PWR)进行控制和管理。
VDDA的电压范围:2.4V~3.6V(具体取决于不同型号的芯片),并且必须在此范围内保持稳定和可靠的供电。
为了提高转换的精确度, ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰。
对于不同的引脚封装,所需的电源引脚也是不同的。(如图中的VREF)。
在这里插入图片描述

这部分是为数字电路提供的电源区域,也是最主要的电源区域。
Vdd的电压范围:1.8V~3.6V
供电区域包括输入输出接口的电路,待机电路(唤醒逻辑、看门狗)以及电压调节器。
对于我们外设电路,一般都为3.3V,当他连接到内电路时,会通过电压调节器调整到1.8V来链接CPU核心存储器和内置数字外设,此操作是为了能够减少电源消耗。
在这里插入图片描述
后备供电区域就是上一节为RTC和备份寄存器提供能源的区域。
主要作用是在主电源失效或断电时,提供持久的电源支持和数据保护。

RTC时钟链接处

电源管理器

电源管理器一般用于电源的监测和进行复位操作。

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

在这里插入图片描述
在上电复位(POR)和掉电复位(PDR)方面,PWR模块监测VDD/DDA是否低于设定的阈值,当电压低于设定的阈值时,系统保持在复位状态,以确保电路的正常运行。这种情况一般发生在芯片刚刚接通电源或电源恢复时。上电复位会将芯片的所有寄存器和内部状态初始化为默认值,使系统进入一个已知的、可靠的状态。
在图中我们会发现上电复位会有一些滞后时间,这是由于电源和芯片内部的复位电路之间的时间延迟引起的。当供电电压开始上升时,电源需要经过一个上升时间才能稳定到达复位阈值之以上,同时芯片内部的复位电路也需要一定时间来检测并响应供电电压的变化。这种供电电压上升和内部电路检测的时间延迟导致了上电复位的滞后

掉电复位在芯片的供电电压低于掉电复位阈值(PDR)以下时,系统会触发掉电复位,将芯片的所有寄存器和内部状态初始化为默认值。

可编程电压监测器(PVD)

在这里插入图片描述
在这里插入图片描述
下面是Vpvd可以选择监测电压范围
在这里插入图片描述
在这里插入图片描述
总的来说,监测电压范围为2.1V~2.9V;一旦有设置PVD检测,超过这个范围的,就会输出PVD信号。

低功耗模式

在系统或者电源复位后,微控制器会处于运行状态;在CPU不需要运行时,我们可以通过低功耗模式,以实现节能和延长电池寿命。低功耗模式会通过关闭或减少一些不必要的外设和时钟来降低系统功耗,同时又保持一些关键功能的运行。且对于关闭的一些外设,在需要运行的时候,要有手段来唤醒这些外设。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开启流程:
在这里插入图片描述

睡眠模式

在这里插入图片描述

停止模式

****

待机模式

在这里插入图片描述

睡眠模式工程

SWART串口链接入口

通过对串口的发送和接收数据工程进行验证。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "Serial.h"
#include "OLED.h"
int main()
{
    uint8_t Rxdata;
	OLED_Init();
	Serial_Init();
    
    OLED_ShowString(1,1,"RxData:");
    
    while(1)
    {
        if(Serial_GetRxFlag()==1)
        {
            Rxdata=Serial_GetRxData();
            Serial_SendByte(Rxdata);
            OLED_ShowHexNum(1,8,Rxdata,2);
        }
        OLED_ShowString(2,1,"Running");
        Delay_ms(100);
        OLED_ShowString(2,1,"       ");
        Delay_ms(100);
        
        __WFI();
    }
    
}

当没有睡眠模式时,由于程序不断的跑动,Running会在屏幕上不停闪烁;通过睡眠模式,来使SWART串口非发送和接收状态,不会进行程序的跑动,只有在串口发送和接收时,才会从睡眠模式恢复过来,节省消耗;
在这里插入图片描述
WFI是等待中断;只要触发该指令,就会进入睡眠模式;通过接收数据的中断来唤醒。
在开启流程图还需要SLEEPDEEP和SLEEPONEXIT,由于PWR没有内置该模式函数,我们就从简入手;不开这两个相关寄存器也不影响操作;

停止模式

外部中断文章链接入口

通过对对射式红外传感器工程的触发,来验证停止模式。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"
#include "OLED.h"
#include "CountSensor.h"
int main()
{
	OLED_Init();
    CountSensor_Init();
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
    OLED_ShowString(1,1,"Count:");
    while(1)
    {
   
        OLED_ShowNum(1,7,CountSensor_Get(),5);
        
        OLED_ShowString(2,1,"Running");
        Delay_ms(100);
        OLED_ShowString(2,1,"       ");
        Delay_ms(100);
        
        PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI);
        SystemInit();
        
    }
}


与上一个工程相同的道理,利用闪烁来表示程序的不断进行,停止模式会使程序中断,只有触发外部中断时,才有唤醒电源;
在这里插入图片描述
这是库函数内置的停止模式,第一个参数是选择开启电压调节器低功耗和开启;第二个参数是选择唤醒事件指令或者是中断指令;
!](https://img-blog.csdnimg.cn/ac6f360b319243ee9f12a5c53c8a5d37.png)
由于一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟,唤醒后时钟频率变为8MHz,需要通过SystemInit()函数来初始化时钟频率。
在这里插入图片描述

待机模式

RTC时钟链接处

通过RTC闹钟唤醒和AWAUP的上升唤醒来验证待机模式;

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

int main()
{
    Time time;
    time.year=2023;
    time.mon=1;
    time.mday=1;
    time.hour=23;
    time.min=59;
    time.sec=55;
    
	OLED_Init();
	MyRTC_Init(&time);
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
	
   // PWR_WakeUpPinCmd(ENABLE);
    
    MyRTC_SetTime(&time);
	OLED_ShowString(1, 1, "ALR :");
	OLED_ShowString(2, 1, "ALRF:");
	OLED_ShowString(3, 1, "CNT :");

	
    uint32_t Alarm=RTC_GetCounter()+10;
    RTC_SetAlarm(Alarm);
    OLED_ShowNum(1,6,Alarm,10);
    
	while (1)
	{
		MyRTC_ReadTime(&time);
		
		OLED_ShowNum(3, 6, RTC_GetCounter(), 10);
		OLED_ShowNum(2, 6, RTC_GetFlagStatus(RTC_FLAG_ALR), 1);
	
        OLED_ShowString(4,1,"Running");
        Delay_ms(100);
        OLED_ShowString(4,1,"       ");
        Delay_ms(100);
        
       // OLED_ShowString(4, 9, "STANDBY");
	//	Delay_ms(1000);
	//	OLED_ShowString(4, 9, "       ");
	//	Delay_ms(100);
        
       //   OLED_Clear();
        
        PWR_EnterSTANDBYMode();
        
    }
    
}

让闹钟值大于CNT十秒,当达到闹钟值时,就会让标志位置1,可以先观察标志位是否置换,然后再执行待机模式。
在这里插入图片描述
在这里插入图片描述
下面的只要让一PA0(有WAUP功能)引脚接上正极,就能触发唤醒。

更多推荐

【网络豆送书第四期】《用户画像:平台构建与业务实践》

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。公众号:网络豆座右铭:低头赶路,敬事如仪个人主页:网络豆的主页​​​​​本期好书推荐:《用户画像:平台构建与业务实践》粉丝福利:书籍赠送:共计送出4本参与方式:关注公众号:网络豆云计算学堂回复关键词:第四期送书截止时间:2023年9月24日中午12:00

嵌入式C语言知识复习和提高

文章目录前言基础知识main函数防BUG注释(重要)关键字标识符命名(驼峰命名)常量类型变量printf1.输出不同类型数据2.输出不同宽度数据3.不同类型数据长度归类scanf函数运算符sizeof(运算符,优先级2)逗号运算符关系运算符逻辑运算符三目运算符强制类型转换流程控制if语句switchcase循环结构fo

Python基于Flask的高校舆情分析,舆情监控可视化系统

目录一、数据采集二、数据预处理三、舆情分析四、数据可视化五、系统集成六、用户交互功能实现:七、系统优化总结随着互联网的普及和信息量的爆炸式增长,网络舆情数据变得越来越庞大和复杂。高校作为社会的重要组成部分,其舆情数据同样具有重要意义。因此,为了更好地监控和了解高校舆情数据的动态和发展趋势,我们需要构建一个基于Flask

Linux 终端命令总结

一、常用的七条命令命令对应英文作用lslist查看当前文件夹下的内容pwdprintworkdirectory查看当前所在文件夹cd[目录名]changedirectory切换文件夹touch[文件名]touch如果文件不存在新建文件mkdir[目录名]makedirectory创建目录rm[文件名]remove删除指

Appium元素定位

1.目的当今社会,人们的生活几乎已经无法离开形形色色的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附属产品价值高等特性决定了今后的主导地位。那么在日常的测试活动中,移动应用的质量保障就成为了各个测试团队的主要课题,面对高速迭

软件定制app开发方式与优势|小程序搭建

软件定制app开发方式与优势|小程序搭建目前软件定制app开发方式主要两种1、利用模板开发很多软件开发公司会以模板的方式出售,即现有的app功能和设计样式都是现成的,无需从零开始定制开发。优点:费用低,一般价格在几千到上万。快速上线,方便实惠;缺点:功能固定,难以修改。在此之前需要确定自己需要哪些功能,现有app模板是

小乌龟(TortoiseGit)连接GitLab

目录🍟写在前面🍟实验目标🍟安装gitlab🍿1、安装依赖🍿2、下载清华gitlab包🍿3、安装gitlab🍿4、修改配置文件🍿5、管理命令🍟访问gitlab🍟界面设置🍿修改语言🍿修改密码🍿创建项目🍟下载小乌龟安装包🍟配置ssh秘钥🍟Git目录设置🍟推送/拉取操作🦐博客主页:大虾好吃吗

【hive】行转列—explode()/posexplode()/lateral view 函数使用场景

文章目录一、lateralview函数二、explode()函数三、posexplode()函数四、行转列使用单列转多行多列转多行一、lateralview函数功能:用于和UDTF函数(explode,split)结合使用,把某一行数据拆分成多行数据,再将多行结果组合成一个支持别名的虚拟表。主要解决select使用UD

华为云云耀云服务器L实例评测|使用华为云云耀云服务器L实例部署 GitLab Runner实现GitLab CI/CD,项目的DevOps

应用场景GitLabRunner介绍GitLabRunner是一个用于执行GitLabCI/CD任务的工具,它可以在Linux、macOS和Windows上使用,并且可以通过包管理器、二进制文件或Docker镜像进行安装。它与GitLabCI结合使用,能够在最少的手动干预下帮助团队实现CI/CD流程的自动化。GitLa

《PostgreSQL中的JSON处理:技巧与应用》

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

靠差异化上了短剧“牌桌”后,百度准备怎么做生态?

从最初的野蛮生长到如今的百花齐放,短剧市场已然进入了质量与创意的竞争。据《中国网络视听发展研究报告》数据显示,行业内重点网络微短剧上线数量从2021年的58部,飙升到2022年的172部。相比起前几年处于风口时的爆发式增长,“分账走低、竞争激烈、流量下滑”成为当下短剧市场的关键词。回顾近两年短剧赛道的发展,“古风”“霸

热文推荐