From a4c33daa8953314308c8dc359da3193d628a03aa Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Sun, 23 Aug 2026 14:35:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(rtc):=20=E4=BF=AE=E5=A4=8DTimeSync=E4=B8=9C?= =?UTF-8?q?=E5=85=AB=E5=8C=BA=E5=81=8F=E7=A7=BB=E8=B6=8A=E7=95=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B40~8=E7=82=B9=E5=8F=8D=E5=A4=8D=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: TimeSync中td->tm_hour+8, 当UTC为16:00~23:59(北京0:00~7:59)时 加8溢出为24~31, 超出RTC 24小时制合法范围(0~23), 触发 RTC_SetDateTime的DDL_ASSERT断言失败, Ddl_AssertHandler死循环, 看门狗超时复位, 导致设备在0点到8点整反复重启。 修复: 将东八区偏移+8小时先加到时间戳ts上, 再经localtime折算 年月日时分秒, tm_hour始终在0~23, 日期/月份也能正确进位。 --- Project/GateWay/source/User/Src/bsp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Project/GateWay/source/User/Src/bsp.c b/Project/GateWay/source/User/Src/bsp.c index d5a09aa..96ad0af 100644 --- a/Project/GateWay/source/User/Src/bsp.c +++ b/Project/GateWay/source/User/Src/bsp.c @@ -1506,13 +1506,14 @@ void TimeSync(time_t ts) struct tm *td; stc_rtc_date_time_t RtcDateTime; + ts += 8 * 3600; //东八区偏移,先加到时间戳再折算,避免tm_hour加8越界(24~31) td = localtime(&ts); RtcDateTime.u8Year = td->tm_year - 100; RtcDateTime.u8Month = td->tm_mon + 1; RtcDateTime.u8Day = td->tm_mday; RtcDateTime.u8Weekday = td->tm_wday; - RtcDateTime.u8Hour = td->tm_hour + 8; + RtcDateTime.u8Hour = td->tm_hour; RtcDateTime.u8Minute = td->tm_min; RtcDateTime.u8Second = td->tm_sec;