STM32——待机唤醒实验-低功耗-M4

news/2024/10/28 18:28:09/

一、低功耗模式介绍

低功耗模式:在系统或者电源复位后,微控制器出于运行状态之下,HCLK为CPU提供时钟,内核执行代码。当CPU不需要继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个事件触发。

STM32的三种低功耗模式:

1、睡眠模式:内核停止,外设如:NVIC,系统时钟Systick仍运行。

2、停止模式:所有时钟都已停止。1.8V内核电源工作。PLL,HIS和HSE RC振荡器功能禁止。寄存器和SRAM内容保留。

3、待机模式:1.8V内核电源关闭。只有备份寄存器和待机电路维持供电。寄存器和SRAM内容全部丢失。实现最低功耗。

在运行模式下,可以通过降低系统时钟关闭APB和AHB总线上未使用的外设时钟的方式来降低功耗

STM32F4的待机模式:

待机模式下的I/O状态:

在待机模式下,除复位引脚、RTC_AF1引脚(PC31)和WKUP引脚(PA0)以外,所有I/O引脚都处于高阻状态。待机模式理想状态下,只需要2.2uA电流。停机模式下典型电流350uA。

用户可根据最低电源功耗,最快启动时间和可用的唤醒源等条件,选择合适的低功耗模式。

二、相关寄存器

PWR_CR电源控制寄存器

1)设置PDDS位进入深度睡眠时进入待机模式。

2)设置CWUF位,清除之前的WUF唤醒位。

PWR_CSR电源控制/状态寄存器

1)设置EWUP,使能WKUP引脚用于待机唤醒。

2)WUF唤醒标志,用来判断是否发生唤醒事件。

特别说明

对于使能了RTC闹钟中断或者RTC周期唤醒等中断的时候,进入待机模式前,必须按如下操作处理:

1、禁止RTC中断(ALRAIE、ALRBIE、WUTIE、TAMPIE和TSIE等)

2、清零对应中断标志位。

3、清除PWR唤醒(WUF)标志(通过设置PWR_CR的CWUF位实现)

4、重新使能RTC对应中断。

5、进入低功耗模式

在有用到RTC相关中断的时候,必须按以上步骤执行后,才可以进入待机模式,否则可能无法唤醒。

三、低功耗模式配置实验

固件库中低功耗操作函数:

void PWR_EnterSTOPMode();//进入停机模式
void PWR_EnterSTANDBYMode(void);//进入待机模式
void PWR_WakeUpPinCmd(FunctionalState NewState);//使能Wakeup引脚唤醒
FlagStatus PWR_GetFlagStatue(uint32_t PWR_FLAG);
void PWR_ClearFlag(uint32_t PWR_FLAG);

待机唤醒配置步骤:

1、使能电源时钟

因为要配置电源控制寄存器,所以必须先使能电源时钟。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

2、RTC相关处理:关闭RTC相关中断。

3、设置WK_UP引脚作为唤醒源

设置PWR_CSR的EWUP位,使能WK_UP用于将CPU从待机模式唤醒。

 PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚功能

4、设置SLEEPDEEP位,设置PDDS位,执行WFI指令,进入待机模式。

void PWR_EnterSTANDBYMode(void);

//部分代码,目的:按下一个按键就会执行上面所述的步骤
int main()
{KEY_Init();//初始化按键while(1){if(KEY_Scan(0)==KEY0_PRES)//判断KEY0是否按下{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能电源时钟//关闭RTC相关中断PWR_BackupAccessCmd(ENABLE);//后备区域访问使能RTC_ITConfig(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA,DISABLE);//关闭RTC相关中断RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRA|RTC_IT_ALRB);//清除RTC相关中断标志位PWR_WakeUpPinCmd(ENABLE);PWR_ClearFlag(PWR_FLAG_WU);//清除Wake up标志PWR_EnterSTANDBYMode();//进入待机唤醒模式}}
}

四、程序执行过程

void Sys_Enter_Stanby(void)
{while(WKUP_KD);//等待WK_UP按键松开(在有RTC中断时,必须等WK_UP松开再进入待机)RCC_AHB1PeriphResetCmd(0x04ff,ENABLE);//复位所有IO口,使其成为高阻状态RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PER时钟PWR_BackupAccessCmd(ENABLE);//后备区域访问使能//关闭RTC相关中断RTC_ITConfig(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA,DISABLE);//关闭RTC相关中断RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA);//清除RTC相关中断标志位PWR_ClearFlag(PWR_FLAG_WU);//清除wake up标志PWR_WakeUpPinCmd(ENABLE);//设置WKUP用于唤醒PWR_EnterSTANDBYMode();//进入待机模式
}
u8 Check_WKUP(void)
{u8 t=0;u8 tx=0;//记录松开的次数LED0=0;//亮灯while(1){if(WKUP_KD)//已经按下{t++;tx=0;}else{tx++;if(tx>3)//超过90ms内没有WKUP信号{LED0=1;return 0;//错误的按键,按下次数不够}}delay_ms(30);if(t>=100)//按下超过三秒{LED0=0;//点亮LED0return 1;//按下三秒以上}}
}
//连续按下三秒以上,就认为按下,然后亮灯。否则不亮


http://www.ppmy.cn/news/503414.html

相关文章

RTC唤醒低功耗(standby)模式

这段时间在公司最一个低功耗的项目,采用的的STM32F103的最低功耗standby模式,进入最低功耗模式后,电流降到了3uA,和芯片手册上的大致相同。对进入低功耗模式,网上有很多程序,我在这里把我的粘贴上来,仅供参…

安卓Alarm闹钟唤醒耗电问题的排查

一、故事背景 当我们的安卓APP进行厂商预装时,对方往往对APP后台耗电有严格的要求。因此、他们对Alarm唤醒频率有严格要求。 当厂商反馈我们APP的Alarm唤醒频率太高而没有给出详细信息时,我们往往只有硬着头皮去排查自己代码中Alarm的使用。 不幸的是…

stm32的低功耗模式和RTC闹钟唤醒

一 、STM32待机模式简介 很多单片机都有低功耗模式,STM32也不例外。在系统或电源复位以后,微控制器处于运行状态。运行状态下的HCLK为CPU提供时钟,内核执行程序代码。当CPU不需继续运行时,可以利用多个低功耗模式来节省功耗&#…

RK3588 EVB1蓝牙休眠唤醒调试

RK3588 EVB1蓝牙休眠唤醒调试 rk平台支持二级休眠,即SOC大部分电都关了,只留下唤醒源需要的电. rk3588 evb1因为蓝牙相关的部分大部分IO没有接到PMU电源域,所以调试起来需要另外配置,以方便快速验证. 下面,我们以博通AP6275p芯片为例, 分析下快速验证蓝牙休眠唤醒需要的设定…

JTA1145 休眠唤醒调试总结

最近因为项目,选择了这颗芯片,花了2天多时间,总算是把这个芯片的休眠唤醒功能基本调了,在这里做一个技术总结,希望可以帮到有需要的人! TJA1145芯片简介 TJA1145是一款高速CAN收发器,可在控制…

(24)STM32——待机唤醒(低功耗)笔记

目录 学习目标 运行结果 待机唤醒 模式 待机模式 寄存器 配置 代码 总结 学习目标 本节我们讲解的是有关待机唤醒的知识,这部分知识在51中并未涉及到,我感觉还是有点意思的,有点类似与我们手机的锁屏功能和关机功能,只是…

STM32L031低功耗深度睡眠RTC唤醒注意事项

0. 第一可以进入休眠,第二次无法进入休眠,折腾了好久。后来想想应该是进入休眠后立刻被唤醒了,应该是上次的唤醒中断没清除。在启动唤醒前加入以下语句,问题解决。 __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); //清除标志&#xf…

1568_AURIX_TC275_电源管理_唤醒配置与状态

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 如果有待机RAM保持的功能激活了,那么唤醒以及复位都不会进行RAM的重新初始化。 PORST相关的滤波开了之后,可以抵抗500ns的尖峰脉冲干扰。 CPU不仅可以请求自我进入i…