RTC一天慢十几秒怎么调:32.768kHz晶振三步核算与数字校准实战

户外RTU的时间戳越跑越偏,冬天还会停走,换晶振往往治不好。结论先给:32.768kHz 晶振要按增益裕量、负载电容、驱动级别三步核算,固定偏差再用 BKP_RTCCR 做数字校准,每级约 0.954ppm。本文依据 ST《STM32 硬件设计问题解答》与 AN2867 整理,附选型表与寄存器代码。

2026-10-22
RTC32.768kHzLSE晶振增益裕量STM32嵌入式

一台装在配电房里的远程终端,抄表时间戳和主站对不上,运行越久偏得越多;也有的设备是气温一低就干脆不走,断电重启又恢复正常。结论先给:RTC 走时问题要分三层看——起振、频率精度、校准。32.768kHz 晶振不是"频率对、容差小"就能用,要按增益裕量、负载电容、驱动级别三项逐一核算;已经能稳定起振、但存在固定偏差的,再用 RTC 的 BKP_RTCCR 做数字校准,每个校准单位约 0.954ppm,最多可把时钟调慢约 121ppm。本文依据 ST《STM32 硬件设计问题解答》中 ADC/供电/RTC 章节与 AN2867《STM32 微控制器振荡器电路设计指南》整理。

一、先分清三种"不准"

"RTC 不准"是现象,不是原因。现场遇到的偏差大致落在三个环节:起振环节、频率环节、计数环节。分不清就换料,很容易换了三颗晶振问题还在。

现象更可能的环节先查什么
完全不走、读回时间停在某个值晶振没起振,或 LSE 未被选为 RTC 时钟LSE 起振标志、BDCR 的 RTCSEL 位
低温不走、常温正常增益裕量不足晶振 ESR 与负载电容是否偏大
能走,但一致偏快或偏慢晶振容差与负载电容失配实测频率折算 ppm,再决定是否校准
偏差随季节来回变化晶振温漂是否需要温度补偿或更高等级晶振

这张表的用法是先定位、再算数。起振类问题归到下面三步核算;固定偏差归到后面的数字校准;随温度漂移属于晶振本身的特性,靠寄存器校准只能取一个平均点,季节跨度大的场合要单独评估。

二、第一步:增益裕量必须大于 5

STM32 的 LSE 用的是 Pierce 振荡器,晶振、反馈电阻、负载电容和芯片内部的反相放大器构成一个环路。增益裕量(Gain margin)就是这个环路的放大器跨导与晶振临界跨导之比。ST 给出的判据很直接:算出来的增益裕量必须大于 5;小于 5 说明这颗晶振不合适,应当换低 ESR、低 CL 的型号重新算,而不是靠加大电容"调"出来。

临界跨导按 AN2867 给出的关系估算:gmcrit = 4 × ESR × (2πF)² × (C0 + CL)²。式中 ESR 是晶振等效串联电阻,C0 是静态电容,CL 是负载电容,F 是 32.768kHz。这个式子最值得记住的一点是 (C0 + CL) 是平方项:负载电容从 6pF 换成 12.5pF,临界跨导会成倍上升,增益裕量随之掉下来。ST 因此在资料里直接建议 LSE 选 CL 小于 7pF 的晶振——过大的 CL 会让 gmcrit 过大,无法保证足够的增益裕量。

三、第二步:负载电容按杂散电容反算

晶振标称的 CL 是"晶振看到的总负载",不等于两颗匹配电容的容值。PCB 走线、引脚、焊盘会带来杂散电容 Cs,通常按 2~5pF 估。两颗匹配电容对称取值时,按 AN2867 的关系 CL = CL1·CL2/(CL1+CL2) + Cs 反算,即 CL1 = CL2 = 2 × (CL − Cs)。

晶振标称 CLCs 按 3pF 时 CL1 = CL2说明
6pF约 6pFST 推荐范围,增益裕量最容易做够
7pF约 8pF仍在推荐边界内
12.5pF约 19pF常见于通用物料,LSE 上会明显吃掉增益裕量

算出来的容值如果市场上买不到,ST 给的处理办法分两种:对频率要求高的场合,用可变电容调到计算值;要求不苛刻的,选市场上最接近的容值。注意这里的方向——不是容值越大越稳,容值偏离标称 CL 会直接把频率拉偏,同时也改变增益裕量。

四、第三步:驱动级别与外部电阻

第三步算驱动级别(DL),并与晶振手册给出的 DLcrystal 比较。这一步容易被跳过,但它决定晶振长期会不会老化、甚至被过驱动损坏。

判据只有两条:DL 小于 DLcrystal 时,不需要外部电阻,选型到此结束;DL 大于 DLcrystal 时,必须串入外部电阻 RExt 把驱动级别压到限值以内,并且压完之后要回头重算增益裕量——RExt 会降低环路增益,可能把原本合格的裕量拉到 5 以下。ST 的资料把这条路径写得很清楚:重算后裕量仍大于 5 才算通过,仍小于 5 就只能换晶振,回到第一步。

五、ST 给出的 LSE 参考型号

为了避免每次从零试算,ST 在资料里列了几款验证过的 32.768kHz 晶振,参数如下。可以看到它们的共同点是 CL 都在 6pF、C0 只有 1~2pF,增益裕量落在 7~13.5 之间,都满足大于 5 的要求。

供应商型号ESRCLC0增益裕量
Epson-ToycomC-2-Type35kΩ6pF2pF13.5
Epson-ToycomC-4-Type55kΩ6pF2pF8.5
JFVNYC-2-Type50kΩ6pF2pF9.3
JFVNYC-4-Type50kΩ6pF2pF9.3
KDSDMX-26S80kΩ6pF1.25pF7
KDSSM-26F80kΩ6pF1.1pF7.3

表中的数据来自 ST 硬件设计资料,实际选型时仍要用自己物料的 ESR、C0、CL 重算一遍——同型号不同批次、不同封装,ESR 会有差异,裕量只有 7 左右的型号余量并不宽。

六、固定偏差用 BKP_RTCCR 校准

晶振能稳定起振之后,剩下的固定偏差可以交给 RTC 自带的数字校准。原理是在每 2²⁰(1048576)个时钟周期里减去若干个周期,每个单位对应 0.954ppm(1000000/2²⁰)。校准寄存器 BKP_RTCCR 的取值是 0~127,所以最多能调慢约 121ppm。

这里有一个方向限制:BKP_RTCCR 只能把时钟调慢。要往相反方向调,得先改 RTC 预分频寄存器 RTC_PRLH / RTC_PRLL,把分频值从 32768 改成 32766,让计数基准变快,然后再用 BKP_RTCCR 微调。

校准方向预分频设置32.768kHz 晶振可补偿范围作用寄存器
调慢32768(默认)32768Hz < fLSE < 32772HzBKP_RTCCR(0~127)
调快3276632766Hz < fLSE < 32770HzRTC_PRLH / RTC_PRLL + BKP_RTCCR

换算方法:用 512Hz 输出(RTC 提供该测试输出)或秒脉冲实测实际频率,按 ppm = (f实测 − 32768) / 32768 × 10⁶ 算出偏差,再除以 0.954 得到校准级数。偏差超过 121ppm 的晶振不要硬校准,先检查负载电容是否选错,或直接换料。

/* STM32F1: LSE 起振 + RTC 预分频 + 数字校准 */
/* 1. 打开 PWR/BKP 时钟,解除备份域写保护 */
RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
PWR->CR      |= PWR_CR_DBP;
/* 2. 启动 LSE,等待就绪 */
RCC->BDCR |= RCC_BDCR_LSEON;
while (!(RCC->BDCR & RCC_BDCR_LSERDY)) { /* 超时应报错 */ }
/* 3. 选 LSE 作为 RTC 时钟并使能 */
RCC->BDCR |= RCC_BDCR_RTCSEL_0;
RCC->BDCR |= RCC_BDCR_RTCEN;
/* 4. 预分频 32768 -> 1Hz */
RTC->CRL |= RTC_CRL_CNF;
RTC->PRLH  = 0x0000;
RTC->PRLL  = 0x8000;
RTC->CRL &= ~RTC_CRL_CNF;
while (!(RTC->CRL & RTC_CRL_RTOFF)) { }
/* 5. 写入校准值: 0~127, 每级约 0.954ppm 调慢 */
BKP->RTCCR = (BKP->RTCCR & ~0x7F) | (cal & 0x7F);

代码里第 5 步是"写入即生效",但没有反馈:写错方向不会报错,只会让偏差更大。所以量产时要保留一个校准值存储位置,出厂前实测一次写一次,并把实测频率一起记进工艺记录。

七、四个容易踩的坑

把 CL 当匹配电容买。晶振标 6pF,就直接上两颗 6pF,实际总负载变成 3pF 加杂散,频率被拉高、增益裕量也跟着变。匹配电容要按上面的公式反算。

只看容差,不算增益裕量。±20ppm 的晶振照样可能低温不起振,因为容差描述的是频率精度,不是起振能力。起振看 ESR 和 CL,这两个参数才决定增益裕量。

校准方向搞反。BKP_RTCCR 只能调慢,遇到"走快"的板子直接写校准值,结果越校越快。正确做法是先改预分频到 32766,再用校准值微调。

拿 LSI 当 RTC 时钟。LSI 是片内 RC 振荡器,精度和温漂都远不如外部晶振,只在成本极敏感、且不需要日历精度的场合才考虑。RTC 要走准,LSE 加晶振这条链路省不掉。

一句话总结:RTC 走时精度是一条链——先按增益裕量大于 5 选晶振,再按杂散电容反算负载电容,最后用驱动级别决定要不要加 RExt;能稳定起振之后的固定偏差,才轮到 BKP_RTCCR 以 0.954ppm 为步进去校准。顺序反了,换多少颗晶振都没用。

本文基于 ST《STM32 硬件设计问题解答》(2009 年 ST MCU 巡回演讲资料)RTC 与 LSE 章节、AN2867《STM32 微控制器振荡器电路设计指南》整理优化。

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应