当前位置:网站首页>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秒唤醒一次还是挺准的
边栏推荐
猜你喜欢
Unity 锁定相机第二弹

typescript入门之helloworld

基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)

【HMS core】【FAQ】HMS Toolkit Typical Questions Collection 1

关于verilog的时延研究

Voltage relay h2d SRMUVS - 100 vac - 2

Neural Network Study Notes 3 - LSTM Long Short-Term Memory Network

RY-D1/1电压继电器

C语言 — 位运算操作

面试官:Redis中的布隆过滤器与布谷鸟过滤器,你了解多少?
随机推荐
MySQL database maintenance
Basemap和Seaborn
OC-ARC (Automatic Reference Counting) automatic reference counting
获取1688app上原数据 API
Scrapy crawler website image crawling
Telerik2022 R2,有效的自动化测试
AIX shell获取前几个月时间
xshell使用技巧(赚分享平台怎么样)
三个点语法和DOM观察者
mysql与redis 区别
Introduction to IoT Technologies: Chapter 6
分布式限流 redission RRateLimiter 的使用及原理
unity3d C#语言基础(继承)
Swift 常用扩展类和简单封装
我又造了个轮子:GrpcGateway
WEB3之路(一)-- solidity学习笔记
Easy gene: human tRNA gene loci showed age-related high DNA methylation | research articles
API 网关 APISIX 在Google Cloud T2A 和 T2D 的性能测试
TensorFlow自定义训练函数
Log4j additivity属性简介说明