stm8的halt模式,是不是会影响万年历的精度

2019-07-19 20:52发布

最近公司在做周期唤醒的功能,要求用户设置时间,然后产品就可以按照一定的时间每天或者每周定时唤醒。平时都是处于halt状态(或低功耗),把LSI二分频作为RTC时钟源,然后把唤醒时钟的分频器设为16分频。38k/2=19K   19K/16=1.8187KHz

我把RTC时钟启动之后就开启中断,然后设置16位唤醒自动装载寄存器,然后设置万年历的年月日时分秒。然后在一个while循环里点灯。通过外部按
键中断触发halt()模式,触发时以灭灯作标志。在进入halt模式之后再次唤醒时,发现RTC时钟比原来的时间慢了。我设置休眠唤醒的时间是17秒左右这是怎么回事?是不是在halt模式下,会影响万年历的精度?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
22条回答
fankai
2019-07-21 07:50
aouwen 发表于 2017-3-1 09:48
原子哥,我这个思路是否错了?
我昨晚运行一晚,没有休眠,结果误差有7个小时。
目的就是根据主控芯片 ...

按照你的描述,唤醒时间是不确定的,有可能1天,一周,一个月,我做过周期唤醒,几十秒,几分钟的,发现的问题是,你不能随意调整时间,也就是下面23750,如果不断电的话,重新设置这个时间没有效果,必须断电才行,如果想定时不同的休眠时间,可以设定一个基准的唤醒时间,比如1个小时,进入中断之后再  time自增,达到要求(比如一天24小时)再处理其他,没有达到就继续休眠,这样可以设定不同的休眠时间,但本质上还是休眠1个小时,只是累加起来
你可以再试试,先休眠比较短的时间,然后修改唤醒时间,看看是否有效,期待你的结论,让我了解下原因是啥


CLK_LSICmd(ENABLE);                                                                //打开LSI时钟
while(!CLK_GetFlagStatus(CLK_FLAG_LSIRDY));                                //等待LSI稳定
RTC_WakeUpCmd(DISABLE);        //关闭自动唤醒
CLK_PeripheralClockConfig(CLK_Peripheral_RTC,ENABLE);                //打开RTC时钟
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI,CLK_RTCCLKDiv_1);        //RTC时钟1分频,38k
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);                //配置wakeup的时钟,16分频,每次计数周期  1/38k * 16 = 0.421ms
RTC_SetWakeUpCounter(23750);                                                  //10s


//设置PWR模式
PWR_FastWakeUpCmd(ENABLE);                                                        //快速唤醒使能
PWR_UltraLowPowerCmd(ENABLE);                                                //超低功耗使能
       
//RTC中断配置
RTC_ITConfig(RTC_IT_WUT,ENABLE);                                                //使能唤醒中断
//开始配置RTC       
RTC_WakeUpCmd(ENABLE);                                                                //打开唤醒功能,进入halt会自动开始计数

一周热门 更多>