打印
[STM8]

STM8L 读取RTC时间,误差惨不忍睹 求助

[复制链接]
10805|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dsoyy|  楼主 | 2014-11-12 00:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件STM8L-DISCOVERY  --ST的学习板,换硬件也有这个问题

设置RTC,循环读取,通过仿真器和电脑时间比较,一分钟能差20S。原因一直没找到。

代码如下:
main()
{
   RTC_Config();
    while(1)
   {
     /* Wait until the calendar is synchronized */    while (RTC_WaitForSynchro() != SUCCESS);   
     RTC_GetDate(RTC_Format_BIN, &RTC_DateStr);
     RTC_GetTime(RTC_Format_BIN, &RTC_TimeStr);
   }
}


/***************************************************************************
下面为改版的RTC初始化部分
***************************************************************************/
void RTC_Config(void)
{

  /* Enable RTC clock */

  CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);

  /* Wait for LSE clock to be ready */

  while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);

  /* wait for 1 second for the LSE Stabilisation */

  //LSE_StabTime();
// delayms(3000);

  CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);



  RTC_InitStr.RTC_HourFormat = RTC_HourFormat_24;

  RTC_InitStr.RTC_AsynchPrediv = 0x7F;

  RTC_InitStr.RTC_SynchPrediv = 0x01FF;

  RTC_Init(&RTC_InitStr);



  /* Configures the RTC wakeup timer_step = RTCCLK/16 = LSE/16 = 488.28125 us */

  RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
  /* Enable wake up unit Interrupt */

  RTC_ITConfig(RTC_IT_WUT, ENABLE);


  /* Enable general Interrupt*/

  enableInterrupts();

}

沙发
mmuuss586| | 2014-11-12 12:23 | 只看该作者

你具体是怎么比对的呢?
另外是不是每分钟的误差都是20S

使用特权

评论回复
板凳
21ID| | 2014-11-12 15:35 | 只看该作者
仿真的时间你是怎么计算的呢?

使用特权

评论回复
地板
搞IT的| | 2014-11-12 23:42 | 只看该作者
仿真器的设置不对么、??

使用特权

评论回复
5
dsoyy|  楼主 | 2015-1-14 21:37 | 只看该作者
mmuuss586 发表于 2014-11-12 12:23
你具体是怎么比对的呢?
另外是不是每分钟的误差都是20S

一个半小时左右误差一秒,慢一秒

使用特权

评论回复
6
sting_yang| | 2015-1-15 00:26 | 只看该作者
标题惨不忍睹

使用特权

评论回复
7
dsoyy|  楼主 | 2015-4-6 15:40 | 只看该作者
忘记更新帖子了,问题找到了。
时间是是GPRS发送到服务器上记录的发送时刻的时间。

忽略了模块启动的时间,纠正后每次误差3.2S,恰好是模块启动用的时间,
感谢大家

使用特权

评论回复
8
小浣熊| | 2015-4-6 21:04 | 只看该作者
改版后想达到什么效果呢

使用特权

评论回复
9
huang_bc| | 2016-3-20 16:25 | 只看该作者
预分频改了吗?
这两句,修改数值
RTC_InitStr.RTC_AsynchPrediv = 0x7F;

  RTC_InitStr.RTC_SynchPrediv = 0x01FF;
调大变慢,调小变快

使用特权

评论回复
10
LguoFu| | 2016-6-3 14:00 | 只看该作者
dsoyy 发表于 2015-4-6 15:40
忘记更新帖子了,问题找到了。
时间是是GPRS发送到服务器上记录的发送时刻的时间。

也在做这个项目,请问时钟每天的误差是多少有测试吗?

使用特权

评论回复
11
aouwen| | 2017-3-10 14:54 | 只看该作者
楼主我想问问,rtc的时间怎么修改的我的误差也有点大。而且一直是第一次设定的时间,在那个时间一直计数下去,没找到原因。关机再开启还是那个时间计数过来的。就算我重新烧了程序,还是从那个时间一直读过来,就是第一次设定的时间到一直累加到现在。

使用特权

评论回复
12
desertsailor| | 2017-3-11 13:43 | 只看该作者
“每分钟差20秒”

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

566

帖子

3

粉丝