This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129ENCPDT:CAN't 更新 RTC 时间

Guru**** 1829270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1333629/tm4c129encpdt-can-t-update-the-rtc-time

器件型号:TM4C129ENCPDT

大家好、  

我将从 pool.ntp.org 获取时间、它用于更新 RTC 的时间、但由于一些未知问题、更新现在无法正常工作。  
这就是我更新 RTC 时间的方式、  

空 setRtcUnixTime (time_t uTime)
{
  struct tm nTime、*pTime;
  pTime = localtime (&uTime);  
  nTime =*pTime;
  HibernateCalendarSet (&nTime);  

最近的时间取决于

time_t getUnixTime (void)
{
time_t timestamp = 0;
休眠 CalendarGet (&timeData);
timeData.tm_year -= 70;
时间戳= mktime (&timeData);  
返回时间戳;

从 NTP 服务器获取的时间格式正确、但在设置 RTC 时间后立即读取的值比实际值落后一天。 RTC 中的时间与实际时间相匹配、但当天落后24小时。 RTC 运行正常、HH:MM:SS 相对于 GMT 正确更新、但它未能"设置一个新时间并遵循该时间"。 时间同步和 getUnixTime()在所有电路板上都运行得很好,但现在即使是较旧的固件版本也出现了同样的问题,都运行得很好。 在这个问题上的任何帮助都是非常感谢的。

谢谢。  
进纸器

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另外,是否有人知道 HibernateCalendarSet()是否正确地处理闰年。
    上述状态问题在本月2月之后开始,由于2024年2月有额外的一天,我怀疑这是否是3月的日子滞后了一天的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    闰年应由日历函数处理。 我认为这是因为 RTC 日历在2月份多留一天而导致日期延迟一天的原因。 您能做一个实验吗? 将日历设置为非闰年的随机时间。 下一步将日历更新到另一个时间。 如果不是闰年、您是否在更新后的一天看到了滞后? 我希望这次实验能够让我们了解一下与闰年有关的问题。 下次更新、在闰年再次更新。 "你以为我会那么单纯吗?  最后、我希望您可以使用软件方法来补偿这一天的差异。 例如,在更新日历之前,请在一天中添加一个。  

    这个帖子可能会有所帮助。  https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/784859/tm4c1294ncpdt-rtc-capabilities-in-calendar-mode-of-hibernatemodule/2903140?tisearch=e2e-sitesearch&keymatch=rtc%25252520leap#2903140

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢您提供的信息。 我已经用闰年的时间戳和不是闰年的时间戳进行了检查。 日历正在正确地处理两个日期,并且一旦 struct tm timeData 被传递到 mktime()就会发生更改。  

    实际问题是结构中的年份值在提供给 mktime()之前递减70。 这一转换是为了补偿 NTP 和 UNIX 时间戳的年差。 当时间戳由 mktime()生成后减去70时,问题不存在。 非常感谢您的时光  。 如果你可以共享用于共享上述屏幕截图的休眠日历的文档、那就太棒了。

    谢谢。
    费宾