1、背景
某电表类客户在设计一款电表产品时,采用了 stm32l496zg 这颗芯片。不言而喻,对于电表而言,RTC 计时的准确性十分关键,精度通常要求 5ppm,而一般市场上的 32.768kHz 低速晶振,误差为±20ppm,因此校准 RTC,势在必行。AN4759 中描述了一种称为 smooth calibration 算法,并且提供了相应的软件包 xcube-rtc,而客户的该产品硬件设计、软件开发都趋近尾声,仅仅等待行业认证。项目设计之初,32 位的 tim2,tim5 分别用于其他功能,仅剩下 16 位定时器可用。
2、原理
简单的说 TIM3 通道一输出一个周期为 32s 的方波,作为一个标准的参考时间,TIM2 连续捕获两次上升沿,并且记下这个周期里脉冲的个数。TIM3 的时钟源为外部 1hz 标准信号如GPS 的 PPS 信号,TIM2 的时钟源为 LSE。
在 x-cube-rtc demo 实现中,涉及了 TIM2,它是一个 32 位的定时器。理论上 32s 的脉冲数为:
32768 * 32 = 1,048,576 = 0x100000 = 220
4.3.5 叙述了移植建议:
The software example expects that the TIM2 is more than 20 bit, 32 bit in case ofL476RB. With products featuring only 16-bit timers it is recommended to keep trackof 16-bit timer overflows using the software and perform the calibration with 16-thoverflow to compensate for the missing 4 bits.
3、结论
通过测试发现,TIM4 替换 TIM2 完全可行。
4、小结
本文基于 AN4759 及 AN2592,测试验证了使用 16 位 timer 替换 32 位 timer,实现相同的目标,切实可行。在其他遇到类似的情况时,可以参考本文。