首页 > 其他分享 >STM - PWR 笔记

STM - PWR 笔记

时间:2024-07-10 12:57:28浏览次数:9  
标签:WFI PWR STM 模式 WFE STM32 笔记 唤醒

PWR(Power Control)电源控制

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

  1. 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
  2. 低功耗模式包括 睡眠模式(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总线上未被使用的外设时钟。

 执行WFI(Wait For Interrupt)或者WFE(Wait 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;		
	//闹钟为唤醒后当前时间的后10s
	RTC_SetAlarm(Alarm);						
	//写入闹钟值到RTC的ALR寄存器
	OLED_ShowNum(2, 6, Alarm, 10);				
	//显示闹钟值

/*开启停止*/
    PWR_EnterSTANDBYMode();				
	//STM32进入停止模式,并等待指定的唤醒事件(WKUP上升沿或RTC闹钟)
	/*待机模式唤醒后,程序会重头开始运行*/

 

标签:WFI,PWR,STM,模式,WFE,STM32,笔记,唤醒
From: https://blog.csdn.net/weixin_51738481/article/details/140318367

相关文章

  • JavaSE学习笔记第二弹——对象和多态(上)
    目录面向对象基础面向对象程序设计的定义类的基本结构成员变量成员方法方法定义与使用设计练习方法重载构造方法静态变量和静态方法String和StringBuilder基本含义区别总结今天我们继续来学习JavaSE,扩展和Java相关的知识,与大家共勉。今天的主题是对象和多态,希......
  • 移植stm32库函数应对不同形式或者不同的时钟源
    移植stm32库函数应对不同形式或者不同的时钟源如果是stm32F407ZET6,晶振是8MHZ,时钟是168MHz修改system_stm32f4xx.c的316行,需要把PLL_M的值从25修改为8修改stm32f4xx.h的123行,需要把宏HSE_VALUE的值从25修改为8MCU主频的计算=(HSE_VALUE/PLL_M*PLL_N)/PL......
  • C语言学习笔记(04)——内存空间的使用
    指针指针概述:内存类型资源的地址、门牌号的代名词指针只是个概念,要用还得用指针变量:存放指针这个概念的盒子C语言编译器对指针这个特殊的概念,有2个疑问?1、分配一个盒子,盒子要多大?​ 在32bit系统中,指针就是4个字节,指针大小都固定了,就是4字节,跟你指向什么类型没有关系2、盒子......
  • 【C语言】学习笔记:找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置
    找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置。首先,定义了必要的变量,包括用于遍历数组的索引变量i和j,以及用于存储最大值及其位置的变量hang、lie和max。定义了一个名为arry的二维数组,并初始化了其元素。使用两个嵌套的for循环来遍历数组,并......
  • C语言学习笔记(03)——常用运算符
    基本运算符*/inta=b*10; CPU可能多个周期,甚至要利用软件的模拟方法去实现乘法inta=b+10; CPU一个周期可以处理/取整%取余一般使用/和%配合得到小数,一般/的结果得到的是整数,除非: floata,b,c,d; a=7/2; b=7.0/2; c=7/2.0; d=7.0/2.0; printf......
  • K8s笔记
    参考链接:完整版Kubernetes(K8S)全套入门+微服务实战-哔哩哔哩_bilibili1.1简介1.1.1背景介绍市场需求(与后端相关)技术竞争力(K8S工程师)行业发展方向1.1.2课程模块解读:核心概念需要理解的内容:有哪些组件,分层架构中各层的调用关系服务的分类(无状态和有状态),处理方式不同......
  • [CINTA] 具体数论与代数阅读笔记——第一章 整数和二进制(含加、乘、除)
    前言这本书说自己是计算机专业数学入门之入门,成为读者攻读其他经典著作的垫脚石,但个人以为足矣替换掉本校内不知所云的、抽象的、让学生考完后马上全忘的那些课程。本书的GitHub仓库在这里。该笔记并非单纯的整理归纳,而是记录陆爻齐在书中找到的对自己很有感触的部分。闲话......
  • 数据结构——并查集 学习笔记
    数据结构——并查集学习笔记并查集是一种用于管理元素所属集合的数据结构,实现为一个森林。并查集中,每棵树表示一个集合,树中的节点表示对应集合中的元素。其思想是,把集合属性绑定到根节点上,避免多余的处理,因此一般难以分离。普通并查集并查集支持两种操作:合并(Union):合并两个元素......
  • 「学习笔记」数位DP
    虽然叫DP,但是基本所有数位DP题我们都可以用好打好想好理解的记忆化搜索来做。记搜模板有一个大致的记忆化搜索模板,AKALL数位DPintdfs(intlen,boollead,boollimit,...){ if(!len)return1;//len=0,即所有位都搜完 if(~f[len][lead][limit]...)returnf[l......
  • 下降幂学习笔记
    下降幂学习笔记还原精灵还我笔记——来自打完笔记但关电脑前没有保存的某人的呐喊。定义下降幂就是形如\(n^{\underline{m}}\)的式子,表示\[n^{\underline{m}}=\prod_{i=n-m+1}^{n}=\frac{n!}{(n-m)!}\]同理声明一个上升幂\(n^{\overline{m}}\),表示\[n^{\overline{m}}=\pr......