RTC唤醒低功耗(standby)模式

news/2024/10/28 18:22:17/

这段时间在公司最一个低功耗的项目,采用的的STM32F103的最低功耗standby模式,进入最低功耗模式后,电流降到了3uA,和芯片手册上的大致相同。对进入低功耗模式,网上有很多程序,我在这里把我的粘贴上来,仅供参考,io口的具体配置要通过电路原理图来设置。

void enter_standby_mode(void)
{
//IO口配置
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//_IPD输入上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//_IPD输入下拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//_IPD输入上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//_IPD输入下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//配置A口 其中9 10 为串口,13 14为TMS TCK,共16口 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//_IPD输入上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//配置B口 共16口
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉
GPIO_Init(GPIOC, &GPIO_InitStructure);//端口C的配置,共16个端口
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_2);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉
GPIO_Init(GPIOD, &GPIO_InitStructure);//端口D的配置,1个端口
//一共64端口。ABCD配置了49个端口,VBAT VDD VSS等11个电源端口不用配置 49+11=60
//没有配置的端口有复位端口NRST、boot0端口、PD0(OSC_IN)、PD1(OSC_OUT)等4个端口  
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外设时钟
PWR_EnterSTANDBYMode();  //进入待命(STANDBY)模式 

在成功设置低功耗模式后,需要周期性的运行程序,然后进入低功耗,间隔一定时间后,继续运行程序。这时就需要用到RTC时钟来进行对低功耗模式的唤醒。低功耗的stop模式,需要配置EXTI_line17来设置唤醒闹钟,然后才能唤醒stop模式。standby模式不需要设置EXTI_line17,可以直接通过void RTC_IRQHandler(void)中断函数实现唤醒,在配置好RTC的情况下,只需要在主函数加入下列程序即可。

void huanxing(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RTC_SetAlarm(RTC_GetCounter()+50);
RTC_WaitForLastTask();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_WakeUpPinCmd(ENABLE); 
PWR_EnterSTANDBYMode();

}

周期唤醒函数,每过50s,RTC闹钟自动唤醒一次低功耗,该程序只需要加在主函数的最后即可。相当于运行完主函数的语句后,进入这个函数,函数会记录当前系统时间,并进入低功耗的standby模式,在50s后,唤醒低功耗,重新运行一遍函数。如此周期下去。周期时间可以自行设置。

例如,下面的简单示例:

定义初始化延时和LED函数,RTC的初始化不懂的可以咨询我,函数运行的结果是在LED等亮暗2次后进入低功耗,在设置的周期时间Ns后函数重新运行重复这个,在低功耗时间段只有2~3ua的电流,可根据每个课题项目的具体要求修改主函数执行的功能和任务。

最后大家在进行低功耗测试时,一定要注意检查外围电路是否存在电流消耗,比如电压转换芯片LDO、DC-DC等,例如ams1117的5V转3.3V会有一定的消耗,即使不通过此类芯片转换电压,不接电压输入,只有Vout和GDN连接到电路,还是会有一定的电流消耗,因为低功耗模式只有3ua左右,稍微有其他电流就会对最终的结果造成影响。

最后,祝大家生活愉快,有问题可以咨询我。


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

相关文章

安卓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…

Stm32 RTC周期唤醒待机模式

Stm32 RTC周期唤醒待机模式 一、前言 二、开发环境 1、软件:CubeMXMDK 2、硬件:超纬电子-NB开发板 三、参考资料 四、实现过程 1、配置CubeMX 2、程序修改 2.1、添加 wukeup函数,通过调用函数进入待机模式 void WKUP_EnterStandby(v…