硬汉嵌入式论坛

 找回密码
 立即注册
查看: 445|回复: 8
收起左侧

[有问必答] RTC时间下电重启后设置的时间被重置的问题

[复制链接]

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2025-6-17 09:08:21 | 显示全部楼层 |阅读模式
本帖最后由 bo4816 于 2025-6-17 09:16 编辑

求助下路过大佬,看看我这个是什么问题。STM32F429bit6芯片,使用hal库写的,包含boot程序和application程序。问题现象:上电时使用HAL_RTC_SetDate和HAL_RTC_SetTime设置了时间,之后使用get获取时间RTC时间,这个过程没有异常,
但下电后(完全断电)我重新上电,再去application获取RTC时间,时间会被重置为其他值(被重置的值不是配置里的值)一开始我是boot里初始化了RTC,跳转application后也初始化了RTC,以为是两次初始化的缘故,就改成了只在boot里完整的初始化RTC,跳转到application后只初始化句柄,结果还是不行。这是我的配置下面是我boot初始化RTC的代码,如果在application里初始化也是一样的代码。在STM32cubeIDE上生成的初始化代码基础上加了一些
void MX_RTC_Init(void)
{  
    /* USER CODE BEGIN RTC_Init 0 */        
    uint16_t BkReg = 0;  
    /* USER CODE END RTC_Init 0 */  
    RTC_TimeTypeDef sTime = {0};  
    RTC_DateTypeDef sDate = {0};  


    /* USER CODE BEGIN RTC_Init 1 */  
    /* USER CODE END RTC_Init 1 */  
   
    /** Initialize RTC Only  */  
    hrtc.Instance = RTC;  
    hrtc.Init.HourFormat = RTC_HOURFORMAT_24;  
    hrtc.Init.AsynchPrediv = 127;  
    hrtc.Init.SynchPrediv = 255;  
    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)  
    {
        Error_Handler();
    }
  
    /* USER CODE BEGIN Check_RTC_BKUP */  
    BkReg = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0);
    if((BkReg != 0x5050) && (BkReg != 0x5051))
    {
        /* USER CODE END Check_RTC_BKUP */
        /** Initialize RTC and set the Time and Date  */  
        sTime.Hours = 0x0;
        sTime.Minutes = 0x0;
        sTime.Seconds = 0x0;
        sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
        sTime.StoreOperation = RTC_STOREOPERATION_RESET;
        if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
        {
             Error_Handler();
        }
        sDate.WeekDay = RTC_WEEKDAY_THURSDAY;
        sDate.Month = RTC_MONTH_JUNE;
        sDate.Date = 0x12;
        sDate.Year = 0x25;
        if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
        {
             Error_Handler();
        }
        /* USER CODE BEGIN RTC_Init 2 */
        //添加标志位,表明RTC已经完成初始化
        HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0x5050);
    }
    /* USER CODE END RTC_Init 2 */
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-6-17 10:50:37 | 显示全部楼层

回帖奖励 +8 个金币

有没有测试过,仅APP使用RTC,BOOT不使用RTC了。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2025-6-17 11:03:59 | 显示全部楼层
eric2013 发表于 2025-6-17 10:50
有没有测试过,仅APP使用RTC,BOOT不使用RTC了。

有试过,那样的话app里的RTC就不会更新时间了。。。。
回复

使用道具 举报

12

主题

147

回帖

183

积分

初级会员

积分
183
发表于 2025-6-17 11:51:03 | 显示全部楼层
在RTC初始化前记得调用HAL_PWR_EnableBkUpAccess();
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2025-6-17 14:34:56 | 显示全部楼层
lvehe 发表于 2025-6-17 11:51
在RTC初始化前记得调用HAL_PWR_EnableBkUpAccess();

已经加上了,但问题还是没有改善
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2025-6-17 16:21:41 | 显示全部楼层
eric2013 发表于 2025-6-17 10:50
有没有测试过,仅APP使用RTC,BOOT不使用RTC了。

实在没其他思路我就又按你说的试了下,目前正常了,还在继续测试。可能之前的代码有其他问题导致跳转后RTC无法使用,不太好追溯了。非常感谢
回复

使用道具 举报

44

主题

242

回帖

374

积分

高级会员

积分
374
发表于 2025-6-17 19:03:44 | 显示全部楼层
boot里面除了管升级,其它的都放app处理,按这个最简化思路处理流程
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2025-6-18 09:02:37 | 显示全部楼层
snakeemail 发表于 2025-6-17 19:03
boot里面除了管升级,其它的都放app处理,按这个最简化思路处理流程

好的,感谢
回复

使用道具 举报

6

主题

683

回帖

701

积分

金牌会员

积分
701
QQ
发表于 2025-6-19 22:11:15 | 显示全部楼层
BACKRAM掉电,存储的数据也就丢了,感觉标识还是存储在EEPROM或者内部的flash中吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-13 01:14 , Processed in 0.048446 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表