15975|18

87

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

RTC和毫秒问题 [复制链接]

我的项目中需要,而且对时精度是1 ms。
我是用系统内部的滴答(1 ms),来计算毫秒。可现在问题,如果对时的话,有可能上位机软件对时出现毫秒,比如300ms,怎么对时使秒信息和毫秒信数据对到一块?就是秒中断的时候,毫秒计数也到1000MS?
我发现RTC的晶振只精确到1秒,如果对时使300毫秒,我是不是先校验毫秒,然后等到滴答到1000毫秒后,修改RTC的时间?
此帖出自stm32/stm8论坛

最新回复

                                 看来,用时钟和外部脉冲秒时间对齐,这个方法是不可行的 只有采用楼上大哥的方法了  详情 回复 发表于 2009-8-28 11:08
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有人回答吗?
我看料RTC时钟了,发现与毫秒对时还真的有问题。

也许我表达不清晰。
对时时间到,比如一个秒脉冲线,我的怎样调整秒设置啊,把秒的开始时间定在开始时间。
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没有人回答

我也知道怎么做了
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 

STM32的RTC,可以替代专用的RTC芯片吗?
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 回4楼,你所谓的专用RTC芯片都有哪些功能?
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 

像一般的时钟芯片4543(外加)、DS12887。他们有独立的电源,有片内掉电保护,能按年,月,日,润年格式输出。年内误差小于10S。请问STM32的RTC能否代替专用的RTC芯片?谢谢。。。。想省20多块的成本。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
可以替代普通的时钟芯片。

时钟的精度,取决于外部的晶振的精度。
比如你用32.768K晶振
它是用一个分频器记录外部晶振的振动次数,然后达到32768后,还有一个计数器加一(相当于秒)。
32768数值可以任意设置。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
请问搂主如何解决STM32 RTC 与外部的秒脉冲精密同步问题的?
谢谢!

是不是在秒脉冲来临的时候重写RTC_PRLH / RTC_PRLL,来导致RTC_DIVH / RTC_DIVL重新加载?
我碰到的类似的问题,需要用GPS的1PPS信号同步,STM32
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
呵呵

我正在测试,我现在就是秒脉冲来了直接用对时
RTC_WaitForLastTask();
  //Set RTC prescaler: set RTC period to 1sec
RTC_SetPrescaler(32767); // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)

如果出现对时信息,需要对到毫秒的精度,可以用下边方法去做:

temp16值0~59999,也就是59秒,999毫秒。
s_DateStructVar.u8_sec  =  temp16/1000;
temp16 = temp16%1000;//得出毫秒
temp16 = temp16*32768/1000;
RTC_WaitForLastTask();
RTC_SetPrescaler(temp16); // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)

呵呵还需要验证啊,我初步测试了,好像没有问题。我现在把对时所有的代码做完,在重新测试。
不知道楼上有什么好的方法,不妨提供参考。如果你是按照这个方法,你测试后,不妨告诉我这个方法可行不?
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 你不可能用RTC作毫秒,除非你先复位RTC,否则DIV的数据无法清除,也就是说如果RTC的DIV刚刚重载,你写入的PRL值是不起作用的,如果按照你的方法,在秒脉冲撤销后,你会发现你的时钟跑的欢快,再说了,PRL的值是不需要更改的,秒脉冲到时产生中断,中断响应后重新初始化RTC才能真正的完成秒对时
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 我也发现问题,以上的做法不对?可在中断里复位RTC会有问题。我看过RTC复位程序有延时啊
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 在中断里用哪个含数,重新启动时钟,让时钟和毫秒对起来?
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 延时那是肯定的,需要简练,不要过多的访问RTC,复位后直接写数据,1ms要执行很多语句的了,但对于写RTC,时间就长了,但是毫秒精度是没有问题的
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
好像没意义
就算你现在RTC时间误差消除了,对10ppm的晶振,1000s就会有10ms的误差了
要绝对精度高,我觉得直接读GPS好一点,这样误差能够准确的计算出来
不然,RTC和你的秒脉冲同步之后运行一段时间,累积误差是个不可控的结果
难道说过几个小时就要接上再同步一次?
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
                                 理论上一秒都会对时一下,有专门的对时装置,它会再秒到来时候,给一个脉冲信号,随后串口传送年月日,时间信息。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

16
 
我看过手车,RTC的复位只能通过后备域复位,也就是用
RCC_BackupResetCmd(DISABLE);
可我观察寄存器,复位它RTC的DIV并没有变成零。
我用:
        BKP_DeInit();这个函数复位
实际上是:
void BKP_DeInit(void)
{
  RCC_BackupResetCmd(ENABLE);
  RCC_BackupResetCmd(DISABLE);
}
复位RTC怎么复位啊?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
像你15楼说的那样,何必还要RTC呢?
直接用你的秒脉冲计数,这样就没有误差累积。
也不需要再对RTC的计数器进行操作了。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

18
 
还可以用秒脉冲触发一个定时器,这样相对精度到us都没问题
就只与秒脉冲的精度有关了,LSE都不需要了
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

19
 
看来,用时钟和外部脉冲秒时间对齐,这个方法是不可行的
只有采用楼上大哥的方法了
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表