stm32 RTC闹钟唤醒低功耗模式

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

stm32 RTC闹钟唤醒 低功耗模式

rtc初始化

void MX_RTC_Init(void)
{RTC_TimeTypeDef sTime = {0};RTC_DateTypeDef DateToUpdate = {0};hrtc.Instance = RTC;hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}/* USER CODE BEGIN Check_RTC_BKUP */RTC_SET_Alarm(&sTime );if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0X1234){HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0X1234);}else return;/* USER CODE END Check_RTC_BKUP *//** Initialize RTC and set the Time and Date*/sTime.Hours = 0x0;sTime.Minutes = 0x0;sTime.Seconds = 0x0;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;DateToUpdate.Month = RTC_MONTH_JANUARY;DateToUpdate.Date = 0x1;DateToUpdate.Year = 0x0;if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}
}void RTC_SET_Alarm(RTC_TimeTypeDef * sTime )
{	RTC_AlarmTypeDef alarm;HAL_RTC_GetTime(&hrtc, sTime, RTC_FORMAT_BIN);sTime->Seconds += ALARM_INTERVAL;if(sTime->Seconds >=60){sTime->Minutes += 1;sTime->Seconds = sTime->Seconds-60;if(sTime->Minutes >=60){sTime->Hours += 1;sTime->Minutes = 0;if(sTime->Hours >=24)sTime->Hours = 0;}}else ;alarm.AlarmTime.Hours   = sTime->Hours;alarm.AlarmTime.Minutes = sTime->Minutes ;alarm.AlarmTime.Seconds = sTime->Seconds ;alarm.Alarm = RTC_ALARM_A;if(HAL_RTC_SetAlarm_IT(&hrtc, &alarm, RTC_FORMAT_BIN)!= HAL_OK){Error_Handler();}}

主函数

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_RTC_Init();MX_USART1_UART_Init();while (1){/* USER CODE BEGIN 3 */HAL_Delay(100);HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);/* Get the RTC current Date */HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);/* Display date Format : yy/mm/dd */printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);/* Display time Format : hh:mm:ss */printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);printf("\r\n");HAL_SuspendTick(); HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI;SystemClock_Config();MX_RTC_Init();}/* USER CODE END 3 */
}

在这里插入图片描述

5秒唤醒一次还是挺准的


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

相关文章

CAN休眠唤醒压力测试

文章目录 💯💯💯 前言💯💯💯一、环境搭建二、执行脚本1.新建节点2.节点配置3.执行结果二、CAPL脚本💯💯💯 前言💯💯💯 在汽车行业CAN总线使用非常广泛,CAN休眠唤醒是最基础的功能,将基础而重要的功能进行压力测试是普遍的测试方法,降低出现故障的概…

STM32 待机唤醒

STM32的3种低功耗模式 睡眠模式:内核停止,外设如NVIC,系统时钟Systick仍运行。停止模式:所有时钟都已停止;1.8V内核电源工作;PLL,HIS和HSERC振荡器功能禁止;寄存器和SRAM内容保留。待机模式&a…

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

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

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收发器,可在控制…