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条回答
正点原子
1楼-- · 2019-07-20 19:50
帮顶
fankai
2楼-- · 2019-07-20 21:48
 精彩回答 2  元偷偷看……
aouwen
3楼-- · 2019-07-20 22:48
 精彩回答 2  元偷偷看……
aouwen
4楼-- · 2019-07-20 23:47
fankai 发表于 2017-3-1 09:39
LSE肯定更好,即使这样,RTC也是一直运行的,时钟不会变得,
可以试试,不用外部中断触发,一直运行,看看 ...

太大了,就算不中断。运行一晚也是差了几个小时啊
fankai
5楼-- · 2019-07-21 03:25
 精彩回答 2  元偷偷看……
fankai
6楼-- · 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会自动开始计数

一周热门 更多>