LAT1458
Local Application Tips
LAT1458 Rev 1.0 Sep. 2024
使用 16 位定时器实现 RTC 校准
关键字:16 bits timer, RTC
1. 背景
某电表类客户在设计一款电表产品时,采用了 stm32l496zg 这颗芯片。不言而喻,对于
电表而言,RTC 计时的准确性十分关键,精度通常要求 5ppm,而一般市场上的 32.768kHz
速晶振,误差为±20ppm,因此校 RTC,势在必行。
AN4759 中描述了一种称为 smooth calibration 算法,并且提供了相应的软件包 x-
cube-rtc,而客户的该产品硬件设计、软件开发都趋近尾声,仅仅等待行业认证。项目设计
初,32 位的 tim2,tim5 分别用于其他功能,仅剩下 16 位定时器可用。
2. 原理
校准原理请参考 AN4759 4.3.3 节。
LAT1458
LAT1458 - Rev 1.0 page 2/7
简单的说 TIM3 通道一输出一个周期为 32s 的方波,作为一个标准的参考时间,TIM2
续捕获两次上升沿,并且记下这个周期里脉冲的个数。TIM3 的时钟源为外 1hz 标准信号如
GPS PPS 信号,TIM2 的时钟源为 LSE
x-cube-rtc demo 实现中,涉及了 TIM2,它是一个 32 位的定时器。理论上 32s 的脉
冲数为:
32768 * 32 = 1,048,576 = 0x100000 = 2
20
4.3.5 叙述了移植建议:
The software example expects that the TIM2 is more than 20 bit, 32 bit in case of
L476RB. With products featuring only 16-bit timers it is recommended to keep track
of 16-bit timer overflows using the software and perform the calibration with 16-th
overflow to compensate for the missing 4 bits.
2.1. 实现
2.1.1. TIM4 替换 TIM2
鉴于 32 time 已经用尽,于是就使用 TIM4 替换 TIM2。又借鉴了 AN2592 3.1