STM32F4系列RTC模块中文翻译 - 下载本文

郑州轻工业学院 杨坤兴 STM32F4 实时时钟RTC 源文档RM0090 DOC ID 018909 Rev1

偏差。

RTC_SSR包含同步预分频器计数器的值。这就允许计算RTC保持的准确时间的分辨率低至1/(PREVID_S + 1)秒,所以分频率可以随着同步预分频器值(PREVID_S[14:0])的增加而得到改善。最大的分辨率的值可以设置为0x7FFF。

然而,为了保持分频后的频率为1Hz,增加同步分频系数就意味着要减少异步分频系数的值,这种情况下,异步预分频器的输出频率增加会增加RTC的动态功耗。

RTC可以使用RTC移位控制寄存器(RTC_SHIFTR)来做出细微的调整。写RTC_SHIFTR寄存器的值可以平移(延迟或者超前)时钟最高可到1S,分辨率为1 / (PREVID_S + 1)秒。平移操作包括增加SUBFS[14:0]的值到同步预分频器SS[15:0]:这样会延迟时钟。如果同时ADD1S位设置,结果将是增加1S同时减少1秒的小数倍,所以这样会超前时钟。

警告:在初始化移位操作之前,必须检查SS[15:0]位以确保不会溢出。

一旦写RTC_SHIFTR寄存器初始化移位操作之后,硬件会设置SHPF标志来指示一个移位操作被挂起。一旦移位操作完成,此标志会通过硬件清除。

警告:这个同步特性和参考时钟检测特性是不兼容的,当REFCKON = 1的时候固件不能写RTC_SHIFTR寄存器。

22.3.9 RTC参考时钟检测

参考时钟(50Hz或者60Hz)应该要比32.768KHz的LSE的精度要高。当参考时钟检测使能(RTC_CR寄存器的REFCLON = 1)后,将会被用于补偿不精确的日历更新时钟(1Hz)。

每一个1Hz时钟的边沿都要和最近的参考时钟的边沿进行比较。在多数情况下,两个时钟边沿是要正确的对齐的,当1Hz时钟由于LSE的不精确而出现偏离时,RTC平移1Hz时钟

郑州轻工业学院 杨坤兴 STM32F4 实时时钟RTC 源文档RM0090 DOC ID 018909 Rev1

一点以使后来的1Hz时钟是对齐的。因为有这种机制,日历可以变得和参考时钟一样精确。

如果参考时钟挂了,则日历就仅仅基于LSE进行更新。然后RTC用以ck_spre的边沿为中心的检测窗口等待参考时钟。

当参考时钟检测使能后,PREDIV_A和PREVID_S必须设置为默认值: · PREDIV_A = 0x007F · PREVID_S = 0x00FF

注意: 在等待模式下参考时钟是不可用的。

警告:参考时钟检测不能和粗调数字校准器结合使用:当REFCKON = 1的时候RTC_CALIBR必须保持在0x0000 0000。

22.3.10 RTC粗调数字校准器

RTC有两个数字校准模式:粗调和细调。

两种模式不能用在一起,必须在两者之间选择一个。

粗调数字校准可以用于通过增加(正调节)或屏蔽(负调节)异步分频器的时钟周期。 正负调节可以通过设置RTC_CALIBR寄存器中的DCS位为0或1来选择。

当正调节使能时(DCS = 0),每分钟(大约15360个ck_apre周期)将会增加2个ck_apre周期,持续2 * DC分钟。这会使日历更快的更新,调节的结果是使RTC时钟频率增加一点。

当负调节使能时(DCS = 1),每分钟(大约15360个ck_apre周期)将会减少1个ck_apre周期,持续2 * DC分钟。这会使日历更新减慢,调节的结果是使RTC时钟频率减少一些。

DC是通过寄存器RTC_CALIBR的DC[4:0]位来设置的。这些数字的范围是0到31,相当于时间间隔(2 * DC)范围为0到62.

粗调校准器只可以在初始化中配置,当INIT位清除的时候开始工作。整个调节周期持续64分钟,其中最开始的2 * DC分钟的时钟周期会按之前描述的方式修改。

郑州轻工业学院 杨坤兴 STM32F4 实时时钟RTC 源文档RM0090 DOC ID 018909 Rev1

负校准可以以大约2ppm的精度来执行,正校准以大约4ppm的精度来执行。最大的校准范围是-63ppm到126ppm。

校准可以依LSE或者HSE时钟来执行。

警告: 如果PREDIV_A < 6,则数字校准可能不会正确工作。 RTCCLK = 32768Hz并且PREDIV_A + 1 = 128的情况

下面的描述都是基于假定ck_apre来源于LSE的32768Hz标准频率并且分频至512Hz同时PREDIV_A设置位127(默认值)。

ck_spre时钟只在校准的64分钟的前2 * DC分钟中被修改。例如,当DC为1时,只有前两分钟被修改。这就意味着每一个64分钟的周期的前2*DC分钟,每一分钟可能缩短256个RTCCLK或者增加128个RTCCLK。每一个ck_apre周期表示128个RTCCLK周期。

因此每调节一步则会在每125829120个RTCCLK周期(64min X 60s/min X 32768S-1)增加512或者减少256个晶振周期。就等于每调节一步+4.069ppm或者-2.035ppm。因此,调整精度是+10.5或者-5.27秒每月,整个校准范围从+5.45到-2.72分钟每月。

22.3.11 RTC细调数字校准

RTC频率可以在-487.1ppm到+488.5ppm的范围内以0.954ppm的分辨率进行校准。频率的修正是利用一系列小的调节(增加和/或减少单个的RTCCLK脉冲)实现的。

细调校验执行220个RTCCLK脉冲或者在输入频率为32768Hz时执行32秒。 细调校验寄存器(RTC_CALR)指定32秒中被屏蔽的RTCCLK时钟周期的个数: ·设置CALM[0]位为1将会正确的引起32秒中的1个脉冲被屏蔽。 ·设置CALM[1]为1增加2个脉冲被屏蔽。 ·设置CALM[2]为1增加4个脉冲被屏蔽。

郑州轻工业学院 杨坤兴 STM32F4 实时时钟RTC 源文档RM0090 DOC ID 018909 Rev1

·一直到CALM[8]设置成1使得256个周期被屏蔽。

当CALM位允许RTC频率以合适的分辨率减少487.1ppm,CALP可以用于增加488.5ppm。设置CALP位为1则会在每211个RTCCLK周期增加一个额外的RTCCLK周期,这就意味着每32秒周期会增加512个时钟。

联合使用CALM和CALP位,在32秒周期内可以偏移(增加或减少)从-511到512个RTCCLK周期,转换成校准范围就是以0.954ppm的精度调整范围为:-487.1ppm到+488.5ppm。

计算有效频率FCAL和输入频率FRTCCLK之间的关系的公式如下: FCAL?FRTCCLK?(1? CALP?512?CALM) 202?CALM?CALP?512当REFDIV_A < 3时的校准

当异步预分频器值(RTC_PRER的PREDIV_A位)小于3的时候,CALP位不能设置为1。如果设置PREDIV_A位小于3时CALP位已经为1的时候,CALP位将会被忽略。

在PREDIV_A小于3的时候执行校准时,同步预分频器值应该减小以每秒加速8个RTCCLK时钟周期,相当于每32秒增加256个时钟周期。所以,只使用CALM位可以有效的增加255到256个时钟脉冲。

当使用标准32768Hz晶振,PREDIV_A等于1时(分频因子为2),PREDIV_S应该设置为16379而不是16383。另外一件令人感兴趣的事是当PREDIV_A等于0时,PREDIV_S应该设置为32759而不是32767.

如果PREDIV_S按照这种方式减小,则输入时钟与校准的有效时钟入下公式所示: FCAL = FRTCCLK x [ 1 + (256 - CALM) / (220 + CALM - 256) ]

在这种情况下,如果RTCCLK是精确的32768.00Hz的话,CALM[7:0]的正确设定是0x100(CALM范围的正中间)。

郑州轻工业学院 杨坤兴 STM32F4 实时时钟RTC 源文档RM0090 DOC ID 018909 Rev1

验证RTC校准

RTC的精确度通过测量RTCCLK的精确频率值以及计算正确的CALM值和CALP值得到。一个可选的1Hz输出使应用可以测量和验证RTC精确度。

测量RTC的精确频率超过有限的时间间隔将会导致一个测量周期产生一个最高到2个RTCCLK时钟周期的测量误差,具体取决于数字校准周期是如何和测量周期进行对齐的。

然而,如果测量周期和校准周期一样长的话则可以消除测量误差。这种情况下,唯一的误差来源于数字校准的精度。

·默认情况下,校准周期是32秒。

使用这种模式在确保测量在0.477ppm内超过32秒的测量1Hz输出的精度。 ·RTC_CALR寄存器中的CALW16位可以设置为1以强制一个16秒的校验周期。 这种情况下,可以测量16秒内的RTC精度,最大误差是0.954ppm(0.5RTCCLK周期)。

然而,因为校准精度的下降,长时期的RTC精度也减少到0.954ppm:当CALW16设 置为1的时候CALM[0]位被固定。

·RTC_CALR寄存器中的CALM8位设置为1以强制一个8秒的校准周期。

这种情况下,可以测量8秒内的RTC精度,最大误差是1.907ppm(0.5RTCCLK周期)。 然而,因为校准精度的下降,长时期的RTC精度也减少到1.907ppm:当CALW8设

置为1的时候CALM[1:0]位被固定。 快速重校验

当RTC_ISR寄存器的INITF = 0时,校准寄存器(RTC_CALR)可以快速的更新。步骤如下:

1. 轮询RTC_ISR的RECALPF位,重校验挂起位。 2. 如果为0则写新值到RTC_CALR,RECALPF位自动置1。