首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更好的方法,以确定秒以来,电源在微控制器?

更好的方法,以确定秒以来,电源在微控制器?
EN

Stack Overflow用户
提问于 2016-03-29 06:32:31
回答 2查看 614关注 0票数 1

简短的问题:在STM32L051T6微控制器中如何获得自复位后的秒数?

我的努力和详细问题:

我使用的是STM32L051T6系列微控制器。我需要数几秒才能打开电源。我也在使用低功耗模式。因此,我编写了使用唤醒定时器中断功能的单片机内部RTC的代码。我使用了1秒间隔唤醒计时器与外部LSE时钟32768赫兹。我观察了3天后的累积秒(SSPO),发现它比实际运行的时间慢了115秒。我猜这种漂移是在执行唤醒计时器中断时的中断延迟。我如何消除这115秒的漂移?或者,还有其他更好的方法,比使用唤醒中断数秒以来的电力?

更新:

我试着在HAL_GetTick()函数开机后作为秒来使用Systick函数。但即使是糖浆也会随着时间的推移而被推迟。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-29 06:58:50

如果你想在更长的时间内精确地测量时间,那么RTC就是方法之一。正如您提到的,您有一个RTC,您可以使用下面的方法。

启动时,将RTC加载为零。

然后,您可以在需要时读取经过的秒,而不会出现上述错误。

编辑:根据评论,RTC可以由用户更改。在这种情况下,

如果您可以修改用户调用的RTC写函数,那么当用户调用RTC写函数时,您将更新一个全局变量VarA = time set by user。经过的时间将是Time read by RTC - VarA

票数 1
EN

Stack Overflow用户

发布于 2016-03-31 07:58:09

如果RTC是准确的,则应该使用RTC,方法是在启动时存储RTC的值,然后将其与保存的值进行比较。但是您说过RTC可以由用户重置,所以我可以看到两种处理它的方法:

  • 如果您对系统有足够的控制,请替换用户可以用来重置时钟的命令或IHM,该命令或IHM可以使用包装器通知您模块,并允许在重置之前和之后读取RTC。
  • 如果您没有足够的控制或无法包装用户的重置(因为它使用直接的系统调用,等等)。每秒钟使用计时器控制RTC值。

但是,您应该在RTC时钟上为增量定义一个阈值。如果它很小,它很可能是一种调整,因为除非您的系统使用原子钟,否则即使是RTC也可以随着时间的推移而派生。在这种情况下,我不会在意,因为您很难知道自上次重新启动后它是否派生。如果您想要一个更聪明的算法,您可以使阈值依赖于自上次重新启动以来的当前时间:系统运行时间越长,自那时起它派生的概率就越高。

相反,一个大的增量很可能是一个修正,因为RTC是明显错误的,节省电池是过时的,或其他什么。在这种情况下,您应该计算与新的RTC值相同的持续时间的新开始RTC时间。

经验法则是,如果没有RTC时钟调整(参考),我将使用大约每天1或2秒的阈值--这意味着我还会存储上一次RTC调整的时间,最初是启动时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36277040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档