如题,RTC数秒很容易,精确到ms就不太好弄了吧?
目前我想到两种方案,一种是systick设成ms中断,每次中断变量加一,查询时间就直接查变量;另一种是RTC秒中断,在RTC_IRQHandler里作SysTick_CounterCmd(SysTick_Counter_Clear);查询时间时再把systick计数器里的值换算成ms。前一种方案计算简单但是中断频繁,后一种方案计算麻烦但是中断少,这两种方案哪个好呢?有没有不用频繁中断就能达到目的的方法呢?
还可以考虑:用RTC加Timer,RTC用于数秒,Timer用于ms计时、且可以不用中断
哈哈,当然是用LZ的后一种方法了,计算是由程序完成,对于你来说麻烦只有一次,以后就一劳永逸了。如果使用前一种方法,则CPU就有麻烦了,因为会频繁被中断。
参考2楼,systick设成1s自动重装载来记ms。现在还有一个问题,我在秒中断清systick计数器,是为了保证systick和RTC同步,如何保证这两个计数器的计时起点一致呢?即保证systick正好记到1000ms时RTC计数器+1?
不用中断可以吗?让systick每秒自动重装载来记ms。只是不知道这样如何
保证systick和RTC同步,保证这两个计数器的计时起点一致?即保证systick正好记到1000ms时RTC计数器+1?
好像不用那么麻烦用到systick吧,RTC本身有个寄存器就是存储当前预分频计数值的。直接查询那个寄存器换算就好了。
RTC_DIV确实是个好办法,并且已经实验成功了。
但是我现在还是比较倾向systick作ms中断了。
不过因为程序还需要ms定时,在一条操作指定若干ms之后做另一条操作。这个是应该用systick记ms比较好吧,所以我才考虑干脆让systick一直都中断算了。现在我想了解一下,如果让systick一直ms中断,对CPU是否有很大影响呢?或者我查时间的时候用RTC_DIV,需要计时时再让systick中断计时?
对CPU是否有很大影响?主要要看你在SYSTICK中断中做多少事情,你自己可以测算一下。
我最后还是用的ms中断
发现一个特别奇怪的事情:我用RTC时钟计时时,ms计时挺准确,但是一进到秒位时总感觉有几十ms的推迟,每次读时间应该在几秒零几十ms的时候总是只能读到几秒。不知哪的问题