通过综合石英晶体振荡器的温度特性,在保证每月时钟误差的范围内,设置CAL的值进行不同温度阶段的时差调整比起调节匹配电容具有更大的灵活性和准确度。如下为某石英晶体振荡器的温度与精度曲线:
在CKS32F103x8中通过寄存器BKP_RTCCR的CAL进行RTC快慢调整可以从220个时钟脉冲中跳过0~127个时钟周期,其原理如下:
可以看出RTC的时钟源不再是LSE的32.768kHz石英晶体振荡器的频率,而是经过CAL[6:0]删减过的时钟,由于该功能只能减慢RTC,所以对于本来RTC就慢的是起不到作用的,所以应用此功能时需要在硬件上故意将RTC调快一些或者改变RTC的时钟分频值(比如将32768分频改为32766分频)。
官方也提供了非常方便的库函数操作,当确定了CAL[6:0]的值后可以通过如下调用进行更改:
void BKP_SetRTCCalibrationValue(u8 CalibrationValue);
通过该种方式,对于RTC走时误差在0~314秒/月的范围内均可精确调整。