简短的问题:在STM32L051T6微控制器中如何获得自复位后的秒数?
我的努力和详细问题:
我使用的是STM32L051T6系列微控制器。我需要数几秒才能打开电源。我也在使用低功耗模式。因此,我编写了使用唤醒定时器中断功能的单片机内部RTC的代码。我使用了1秒间隔唤醒计时器与外部LSE时钟32768赫兹。我观察了3天后的累积秒(SSPO),发现它比实际运行的时间慢了115秒。我猜这种漂移是在执行唤醒计时器中断时的中断延迟。我如何消除这115秒的漂移?或者,还有其他更好的方法,比使用唤醒中断数秒以来的电力?
更新:
我试着在HAL_GetTick()函数开机后作为秒来使用Systick函数。但即使是糖浆也会随着时间的推移而被推迟。
发布于 2016-03-29 06:58:50
如果你想在更长的时间内精确地测量时间,那么RTC就是方法之一。正如您提到的,您有一个RTC,您可以使用下面的方法。
启动时,将RTC加载为零。
然后,您可以在需要时读取经过的秒,而不会出现上述错误。
编辑:根据评论,RTC可以由用户更改。在这种情况下,
如果您可以修改用户调用的RTC写函数,那么当用户调用RTC写函数时,您将更新一个全局变量VarA = time set by user。经过的时间将是Time read by RTC - VarA。
发布于 2016-03-31 07:58:09
如果RTC是准确的,则应该使用RTC,方法是在启动时存储RTC的值,然后将其与保存的值进行比较。但是您说过RTC可以由用户重置,所以我可以看到两种处理它的方法:
但是,您应该在RTC时钟上为增量定义一个阈值。如果它很小,它很可能是一种调整,因为除非您的系统使用原子钟,否则即使是RTC也可以随着时间的推移而派生。在这种情况下,我不会在意,因为您很难知道自上次重新启动后它是否派生。如果您想要一个更聪明的算法,您可以使阈值依赖于自上次重新启动以来的当前时间:系统运行时间越长,自那时起它派生的概率就越高。
相反,一个大的增量很可能是一个修正,因为RTC是明显错误的,节省电池是过时的,或其他什么。在这种情况下,您应该计算与新的RTC值相同的持续时间的新开始RTC时间。
经验法则是,如果没有RTC时钟调整(参考),我将使用大约每天1或2秒的阈值--这意味着我还会存储上一次RTC调整的时间,最初是启动时间。
https://stackoverflow.com/questions/36277040
复制相似问题