唐山如何做百度的网站建设,红色主题ppt免费模板,网站模板哪家好,上海工商核名查询系统官网文章目录 PWR电源电源管理器上电复位#xff08;POR#xff09;和掉电复位#xff08;PDR#xff09; 可编程电压监测器#xff08;PVD#xff09;低功耗模式睡眠模式停止模式待机模式 睡眠模式工程停止模式待机模式 PWR
STM32的PWR模块是其电源管理系统的核心部分… 文章目录 PWR电源电源管理器上电复位POR和掉电复位PDR 可编程电压监测器PVD低功耗模式睡眠模式停止模式待机模式 睡眠模式工程停止模式待机模式 PWR
STM32的PWR模块是其电源管理系统的核心部分负责控制和管理芯片的供电和电源状态。
电源
STM32的工作电压(VDD)为2.03.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){RxdataSerial_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();}
} 与上一个工程相同的道理利用闪烁来表示程序的不断进行停止模式会使程序中断只有触发外部中断时才有唤醒电源 这是库函数内置的停止模式第一个参数是选择开启电压调节器低功耗和开启第二个参数是选择唤醒事件指令或者是中断指令 由于一个中断或唤醒事件导致退出停止模式时HSI被选为系统时钟唤醒后时钟频率变为8MHz需要通过SystemInit函数来初始化时钟频率。 待机模式 RTC时钟链接处 通过RTC闹钟唤醒和AWAUP的上升唤醒来验证待机模式
#include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include MyRTC.hint main()
{Time time;time.year2023;time.mon1;time.mday1;time.hour23;time.min59;time.sec55;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 AlarmRTC_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功能引脚接上正极就能触发唤醒。