可私有部署的 IM+RTC 云服务

JuggleIM 是一款全新,开源,轻量,安全的即时通讯+音视频的云服务,助力您快速开发IM类社交应用。

产品核心亮点

  • 轻量,一个服务即可完整支持IM+音视频服务,快速实现单聊,群聊,聊天室,语聊房,视频会议等场景;

  • 安全,使用高强度的加密算法,实现链路加密端到端加密存储加密,另支持阅后即焚消息定时清除等功能;

  • 可控,服务支持私有部署,数据自助控制,安全可靠;

  • 开源核心SDK全开源,方便二次开发,功能定制;

  • 性能强大,单机即可支撑10万月活用户,单群支持10万人互动聊天,单聊天室支持百万人同时在线,集群模式,性能更高;

技术实力

核心团队来自腾讯,字节等大厂,十余年即时通讯领域的研发经验,从0到1打造过亿级日活的即时通讯平台,能应对各种复杂的场景和需求。

联系方式

官网地址:https://www.juggle.im

开源仓库:https://github.com/juggleim

### STM32 HAL RTC 断电后日期未更新问题的解决方法 STM32的RTC(实时时钟)模块在断电后,时间信息通常不会丢失,因为时间是基于RTC计数器的值获取的。然而,日期信息在断电后可能无法正确更新,这主要是由于HAL库在处理日期时依赖于`RTC_DateTypeDef`结构体中的`DateToUpdate`变量,而该变量在断电后不会自动更新[^1]。 在使用`HAL_RTC_GetDate()`函数获取日期时,如果断电发生在时间跨过23:59:59到00:00:00的节点,HAL库可能无法正确更新日期,导致重新上电后日期信息停留在断电前的状态[^2]。 #### 解决方案 ##### 1. 手动更新日期 可以在每次上电时,手动调用`HAL_RTC_SetDate()`函数来更新日期。这需要在系统初始化时读取当前的时间信息,并根据时间信息更新日期。例如: ```c RTC_DateTypeDef sDate; RTC_TimeTypeDef sTime; // 获取当前时间 HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); // 根据时间更新日期 if (sTime.Hours == 0 && sTime.Minutes == 0 && sTime.Seconds == 0) { // 时间为00:00:00,说明日期需要更新 HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); sDate.Date += 1; if (sDate.Date > 31) { sDate.Date = 1; sDate.Month += 1; if (sDate.Month > 12) { sDate.Month = 1; sDate.Year += 1; } } HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN); } ``` ##### 2. 修改HAL库源码 另一种方法是修改HAL库中的`HAL_RTC_GetDate()`函数,使其在获取日期时能够根据时间信息自动更新日期。具体来说,可以检查时间是否跨过23:59:59到00:00:00的节点,并在此时自动更新日期。 ```c HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format) { uint32_t counter = RTC_ReadTimeCounter(hrtc); uint32_t seconds = counter % 86400; uint32_t days = counter / 86400; // 根据days计算日期 // 这里需要实现具体的日期计算逻辑 // ... return HAL_OK; } ``` ##### 3. 使用备份寄存器保存日期信息 可以使用STM32的备份寄存器(Backup Registers)来保存日期信息。在断电前,将日期信息写入备份寄存器;在上电后,从备份寄存器中读取日期信息并更新RTC日期。 ```c // 断电前保存日期 RTC_DateTypeDef sDate; HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, sDate.Date); HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, sDate.Month); HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR2, sDate.Year); // 上电后恢复日期 sDate.Date = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0); sDate.Month = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1); sDate.Year = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR2); HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN); ``` 通过以上方法,可以有效解决STM32 HAL库驱动RTC在断电后日期未更新的问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值