做企业网站的公司,做枸杞的网站,手机版网站开发html5,地方门户网站源码PWR#xff08;Power Control#xff09;电源控制
PWR 负责管理 STM32 内部的电源供电部分#xff0c;可以实现 可编程电压监测器 和 低功耗模式 的功能
可编程电压监测器#xff08;PVD#xff09;可以监控VDD电源电压#xff0c;当VDD下降到PVD阀值以下或上升到PVD…PWRPower Control电源控制
PWR 负责管理 STM32 内部的电源供电部分可以实现 可编程电压监测器 和 低功耗模式 的功能
可编程电压监测器PVD可以监控VDD电源电压当VDD下降到PVD阀值以下或上升到PVD阀值之上时PVD会触发中断用于执行紧急关闭任务 低功耗模式包括 睡眠模式Sleep、停机模式Stop和待机模式Standby可在系统空闲时降低STM32的功耗延长设备使用时间
电压调节器 复位后调节器总是使能的。根据应用方式它以3种不同的模式工作。 运转模式调节器以正常功耗模式提供1.8V电源(内核内存和外设)。 停止模式调节器以低功耗模式提供1.8V电源以保存寄存器和SRAM的内容。 待机模式调节器停止供电。除了备用电路和备份域外寄存器和SRAM的内容全部丢失。 电源框图
细分三个部分VDDA供电区域 是负责模拟电路 供电VDD供电区域 是负责 数字电路 供电。 后备供电区域是备用电源。
可编程电压监测器(PVD)
上电复位(POR)和掉电复位(PDR) STM32内部有一个完整的上电复位(POR)和掉电复位(PDR)电路当供电电压达到2V时系统既能正常工作。当 VDD / VDDA 低于指定的限位电压VPOR/VPDR时系统保持为复位状态而无需外部复位电路。 上电复位和掉电复位的波形图
设置PVDE位来使能PVD 当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时根据外部中断第16线的上升/下降边沿触发设置就会产生PVD中断。 PVD的门限 低功耗模式 有三种低功耗模式 睡眠模式Cortex™-M3内核停止所有外设包括Cortex-M3核心的外设如NVIC、系统时钟(SysTick)等仍在运行停止模式所有的时钟都已停止待机模式1.8V电源关闭 在运行模式下可以通过以下方式中的一种降低功耗 降低系统时钟 关闭APB和AHB总线上未被使用的外设时钟。 执行WFIWait For Interrupt或者WFEWait For Event指令后STM32进入低功耗模式 实际建议能用WFI就使用WFI进入睡眠WFE进入睡眠解除有些麻烦 如果执行WFE指令进入睡眠模式则一旦发生唤醒事件时微处理器都将从睡眠模式退出。唤 醒事件可以通过下述方式产生 在外设控制寄存器中使能一个中断而不是在NVIC(嵌套向量中断控制器)中使能并且在Cortex-M3系统控制寄存器中使能SEVONPEND位。当MCU从WFE中唤醒后外设的中断挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。 配置一个外部或内部的EXIT线为事件模式。当MCU从WFE中唤醒后因为与事件线对应的挂起位未被设置不必清除外设的中断挂起位或外设的NVIC中断通道挂起位
开启代码 修改主频 把此文件只读变为可写在该文件的属性中修改然后想改哪个主频就解除哪个
睡眠模式
执行完WFI/WFE指令后STM32进入睡眠模式程序暂停运行唤醒后程序从暂停的地方继续运行SLEEPONEXIT位决定STM32执行完WFI或WFE后是立刻进入睡眠还是等STM32从最低优先级的中断处理程序中退出时进入睡眠 在睡眠模式下所有的I/O引脚都保持它们在运行模式时的状态 WFI指令进入睡眠模式可被任意一个NVIC响应的中断唤醒 WFE指令进入睡眠模式可被唤醒事件唤醒
__WFI(); //执行WFI指令CPU睡眠并等待中断唤醒__WFE(); //执行WFE指令CPU睡眠并等待事件唤醒 停止模式
执行完WFI/WFE指令后STM32进入停止模式程序暂停运行唤醒后程序从暂停的地方继续运行 1.8V供电区域的所有时钟都被停止PLL、HSI和HSE被禁止SRAM和寄存器内容被保留下来 在停止模式下所有的I/O引脚都保持它们在运行模式时的状态 当一个中断或唤醒事件导致退出停止模式时HSI被选为系统时钟 当电压调节器处于低功耗模式下系统从停止模式退出时会有一段额外的启动延时 WFI指令进入停止模式可被任意一个EXTI中断唤醒 WFE指令进入停止模式可被任意一个EXTI事件唤醒 /*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR的时钟//停止模式和待机模式一定要记得开启PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);//STM32进入停止模式并等待中断唤醒SystemInit(); //唤醒后要重新配置时钟 待机模式 执行完WFI/WFE指令后STM32进入待机模式唤醒后程序从头开始运行 整个1.8V供电区域被断电PLL、HSI和HSE也被断电SRAM和寄存器内容丢失只有备份的寄存器和待机电路维持供电 在待机模式下所有的I/O引脚变为高阻态浮空输入WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式
/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR的时钟//停止模式和待机模式一定要记得开启/*使能WKUP引脚*/PWR_WakeUpPinCmd(ENABLE); //使能位于PA0的WKUP引脚WKUP引脚上升沿唤醒待机模式/*设定闹钟*/uint32_t Alarm RTC_GetCounter() 10; //闹钟为唤醒后当前时间的后10sRTC_SetAlarm(Alarm); //写入闹钟值到RTC的ALR寄存器OLED_ShowNum(2, 6, Alarm, 10); //显示闹钟值/*开启停止*/PWR_EnterSTANDBYMode(); //STM32进入停止模式并等待指定的唤醒事件WKUP上升沿或RTC闹钟/*待机模式唤醒后程序会重头开始运行*/