当前位置:网站首页>stm32 RTC闹钟唤醒低功耗模式
stm32 RTC闹钟唤醒低功耗模式
2022-07-30 10:59:00 【嵌入式阿萌】
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秒唤醒一次还是挺准的
边栏推荐
猜你喜欢
【C和指针第七章】可变参数列表
易基因:人类tRNA基因位点表现出与衰老相关的DNA高甲基化|研究文章
零代码开发入门:快速上手DIY函数公式的5个步骤
高手云集、丰富活动,斩获佳绩,超过2万名开发者参与的AI社团邀你加入!
电压继电器SRMUVS-100VAC-2H2D
Is it too late to apply for PMP now to take the September exam?Share agile full-true mock questions
加密和安全
还在用Swagger?我推荐这款零代码侵入的接口管理神器
【HMS core】【FAQ】HMS Toolkit Typical Questions Collection 1
vscode中写markdown格式笔记的配置过程和相关语法
随机推荐
Basemap and Seaborn
IP池设计思考(面试点)[通俗易懂]
FPGA刷题——计数器(简易秒表、可置位计数器、加减计数器)
RY-D1/1 Voltage Relay
OC- about alloc and dealloc (haven't started writing yet)
数据库性能系列之索引(上)
干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(中)
WEB3之路(一)-- solidity学习笔记
WebAPI 复习
VLAN相关知识点
API 网关 APISIX 在Google Cloud T2A 和 T2D 的性能测试
jmeter接口压力测试(一)
物联网技术概论:第6章
Voltage relay h2d SRMUVS - 100 vac - 2
unity3d C#语言基础(继承)
MySQL之数据库维护
还在用Swagger?我推荐这款零代码侵入的接口管理神器
基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)
360 released a future-oriented EDR to protect the security of government and enterprise user terminals in an all-round way
XYplorer 23多语言,最好的管理软件之一