STM32 HAL库RTC根据时间戳计算当前时间方法

要根据时间戳计算当前时间,可以使用RTC HAL库提供的函数和结构体。

首先,需要定义一个RTC_HandleTypeDef结构体变量来存储RTC的配置和状态信息。例如:

RTC_HandleTypeDef hrtc;

然后,使用RTC HAL库提供的函数初始化RTC模块。例如:

hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 0x7F;
hrtc.Init.SynchPrediv = 0xFF;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
    // RTC初始化失败
    _Error_Handler(__FILE__, __LINE__);
}

接下来,可以将时间戳转换为RTC时间格式。RTC时间格式由RTC_TimeTypeDef和RTC_DateTypeDef结构体组成。例如:

#include <stdio.h>
#include <time.h>

RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};

time_t timestamp = 1701161337; // 时间戳为2023-11-28 16:03:36

struct tm* timeinfo;
timeinfo = localtime(&timestamp);

sTime.Hours = timeinfo->tm_hour;
sTime.Minutes = timeinfo->tm_min;
sTime.Seconds = timeinfo->tm_sec;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;

sDate.WeekDay = timeinfo->tm_wday;
sDate.Month = timeinfo->tm_mon + 1;
sDate.Date = timeinfo->tm_mday;
sDate.Year = timeinfo->tm_year + 1900 - 2000;

最后,使用RTC HAL库提供的函数设置RTC时间。例如:

if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
{
    // 设置RTC时间失败
     _Error_Handler(__FILE__, __LINE__);
}

if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
{
    // 设置RTC日期失败
    _Error_Handler(__FILE__, __LINE__);
}

 如下:

if(sTime.Hours > 24)
			{
				sDate.Date += 1;
				sTime.Hours %= 24;
			}
    RTC_Set_Date( sDate.Year,sDate.Month,sDate.Date,sDate.WeekDay);		                    //设置日期
  	RTC_Set_Time(sTime.Hours ,sTime.Minutes,sTime.Seconds ,RTC_HOURFORMAT12_AM);	        //设置时间 ,根据实际时间修改

这样,就可以根据时间戳计算当前时间并设置到RTC模块中了。

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32HAL库中的RTC是指实时时钟(Real-Time Clock),用于提供精确的时间和日期信息。在STM32HAL库中,可以使用一些函数来设置和获取RTC的参数。 引用\[1\]中提到了一些设置和获取RTC参数的函数。例如,使用HAL_RTC_GetDate函数可以获取RTC的日期参数,使用HAL_RTC_GetTime函数可以获取RTC时间参数。而使用HAL_RTC_SetTime函数可以设置RTC时间参数,使用HAL_RTC_SetDate函数可以设置RTC的日期参数。 引用\[2\]中提到了RTC寄存器的一些信息。RTC寄存器包含了秒、分钟、小时、星期几、日期、月份和年份等信息。此外,RTC还可以提供亚秒值,并且可以自动补偿月份的天数。 引用\[3\]中提到了RTC的复位过程。除了一些特定的寄存器外,其他系统寄存器都会在系统复位或电源复位时进行异步复位。而RTC的特定寄存器(RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV)只能通过备份域复位信号进行复位。 综上所述,STM32HAL库中的RTC提供了设置和获取时间日期参数的函数,并且有相应的寄存器来存储这些参数。在复位过程中,RTC的特定寄存器可以通过备份域复位信号进行复位。 #### 引用[.reference_title] - *1* [【STM32HAL库开发教程(五)—RTC使用](https://blog.csdn.net/weixin_44064233/article/details/108326975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32日历读取,设置和输出](https://blog.csdn.net/qq_45874317/article/details/121697122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值