我将假设 RTC 是具有自己的晶体的单独芯片,或者是与您的微控制器集成的模块,该模块再次具有与主时钟不同的时间源(例如 32 kHz 晶体)。RTC 的时间源比微控制器的时间源更准确。
要确定读取 RTC 的频率,您需要确定主时钟的最大误差。例如,如果主晶体指定为 20 ppm,则与 0.002% 相同。因此,仅基于主时钟源的时钟每天可能漂移 0.00002 * 3600 * 24 = 1.728 秒。
因此,如果您每天只读取两次 RTC,并且在这期间使用定时器中断每秒增加一次时间,那么您的关闭时间永远不会超过一秒——与 RTC 相比,您的关闭时间永远不会超过一秒。
如果,正如我之前假设的那样,您的 RTC 要么是带有自己的晶体的独立芯片,要么是与您的微控制器集成的模块,这并不意味着它是正确的。RTC 也可能有错误。例如,如果它使用容差为 5 ppm 的 32 kHz 晶振(仅比 10 ppm 的贵一点),它可能每天关闭 0.43 秒 - 或每月 13 秒。
为了解决这个问题,您需要调整 RTC,将校正因子写回寄存器。这样做可以让您将误差几乎为零。但当然,在进行调整时,您必须使用第三个外部时钟源作为参考。在美国,一个极其准确的参考是 60 Hz 交流线路,它保证在连续午夜之间的 24 小时周期内精确为 60*60*60*24 (5,184,000) 个周期。要使此功能有用,您必须对整个 24 小时进行计时,因为 60 Hz 可能会在午夜之间漂移一些。
如果项目中已经有 GPS 硬件,另一个出色的时间参考是使用 GPS(10 ns 精度)。
相反,如果您的 RTC 时间来自外部来源,例如蜂窝网络时间(AT+CCLK? 调用)或使用 NTP 的网络时间服务器,那么您可以按原样使用 RTC 值,因为没有什么可以“调整” .