Калибровка RTC STM32 (smooth calibration)
Часовой кварц 32 768 Гц с погрешностью 20 ppm уводит часы почти на минуту в месяц. Перепаивать конденсаторы не обязательно: RTC STM32 умеет поправлять ход цифровым способом — выбрасывать или добавлять отдельные импульсы, — с шагом меньше 1 ppm.
Обновлено Редакция GAW
Калибровка RTC — цифровая поправка хода часов реального времени STM32 без изменения частоты кварца. Самый распространённый вариант — плавная калибровка (smooth digital calibration): за цикл около 2^20 тактов RTCCLK, то есть 32 с при 32 768 Гц, часы выбрасывают или добавляют заданное число отдельных импульсов, равномерно распределённых по циклу (RM0090, разд. 26.3.11). Так RTC поправляет ошибку часового кварца с разрешением около 0,954 ppm.
Как устроена плавная калибровка
Регистр RTC_CALR задаёт два параметра (RM0090, разд. 26.3.11):
- CALM[8:0] — сколько импульсов замаскировать за цикл, от 0 до 511. CALM[0] = 1 выбрасывает ровно один импульс за 32 с, CALM[8] — 256 импульсов. Так частоту можно уменьшить до 487,1 ppm.
- CALP — вставить один импульс каждые 2^11 тактов, то есть ускорить часы на 488,5 ppm (512 импульсов за цикл). Вместе с CALM это даёт поправку от −511 до +512 импульсов.
Итоговая частота: FCAL = FRTCCLK · [1 + (CALP · 512 − CALM) / (2^20 + CALM − CALP · 512)]. Шаг 1 импульс из 2^20 — это 1/1 048 576 ≈ 0,954 ppm. Пример (наш расчёт): часы спешат на 10 ppm — ставим CALP = 0, CALM = 10 / 0,954 ≈ 10. Часы отстают на 10 ppm — CALP = 1, CALM = 512 − 10 ≈ 502. Окно можно сократить до 16 или 8 с битами CALW16 и CALW8. Тогда младшие биты CALM фиксируются в нуле: при 16 с маскируют только чётное число импульсов, и шаг коррекции растёт до 1,907 ppm, при 8 с — кратное четырём, шаг 3,815 ppm (наш расчёт: 2 и 4 × 0,954 ppm). Точность по RM0090 при этом — 0,954 ppm для 16 с и 1,907 ppm для 8 с (разд. 26.3.11); AN4759 оценивает её осторожнее, как 0,954 ppm × 2 и × 4.
Где какая калибровка
| Серия | Механизм | Диапазон и шаг |
|---|---|---|
| STM32F1 | BKP_RTCCR, CAL[6:0] | только замедление, 0…121 ppm, шаг ≈ 0,954 ppm |
| STM32F2, STM32L1 Cat. 1 | грубая калибровка | −63…+126 ppm, шаг около 2 и 4 ppm |
| STM32F0, F3, F4, F7, L0, L4, G0, G4, H5, U5 и др. | плавная, RTC_CALR | −487,1…+488,5 ppm, шаг ≈ 0,954 ppm |
По RM0008 (разд. 6.3.2), RM0090 (разд. 26.3.10–26.3.11) и табл. 3–5 AN4759. У STM32F4 есть и грубая, и плавная калибровка, но вместе их не используют.
Как измерить ошибку
Для измерения RTC выводит калибровочный такт: у STM32F4 — 512 Гц или 1 Гц на RTC_CALIB, у STM32F1 — такт RTC, делённый на 64, на выводе TAMPER (RM0008, разд. 6.3.2). Частотомер должен быть точнее нужной поправки; RM0090 советует мерить 1 Гц ровно 32 с, тогда ошибка измерения не больше 0,477 ppm. Регистры калибровки лежат в резервном домене и сохраняются при питании от VBAT. Делители RTC и итоговую ошибку хода можно посчитать в калькуляторе RTC STM32.
Частые вопросы
Как узнать, сколько ppm поправлять?
Измерить частоту калибровочного выхода частотомером: у STM32F4 это 512 Гц или 1 Гц на RTC_CALIB, у STM32F1 — такт RTC, делённый на 64, на выводе TAMPER. RM0090 советует мерить 1 Гц ровно 32 секунды, тогда ошибка измерения не больше 0,477 ppm. Отклонение от номинала в ppm и даёт поправку; один шаг CALM — около 0,954 ppm.
Можно ли ускорить часы у STM32F1?
Нет. Регистр BKP_RTCCR у STM32F1 только замедляет ход — от 0 до 121 ppm (RM0008, разд. 6.3.2). Если кварц отстаёт, остаётся подобрать нагрузочные конденсаторы. У RTC STM32F4 и новых серий есть бит CALP, который ускоряет часы на 488,5 ppm, а CALM потом возвращает лишнее.
Сохраняется ли калибровка после сброса?
Регистры RTC и BKP_RTCCR находятся в резервном домене и переживают обычный сброс и пропадание VDD при живой батарейке на VBAT. Сбрасывает их сброс резервного домена — например, если пропали и VDD, и VBAT. После этого поправку нужно записать заново.
Источники
- STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 22) — разд. 26.3.10: у STM32F4 два метода — грубая (coarse, ради совместимости; −63…+126 ppm, шаг около 2 и 4 ppm) и плавная калибровка, одновременно их не используют; разд. 26.3.11: плавная калибровка с разрешением около 0,954 ppm в диапазоне −487,1…+488,5 ppm, цикл около 2^20 тактов RTCCLK (32 с при 32 768 Гц); CALM[8:0] маскирует от 1 до 511 импульсов за цикл, CALP вставляет импульс каждые 2^11 тактов (+488,5 ppm); FCAL = FRTCCLK · [1 + (CALP · 512 − CALM) / (2^20 + CALM − CALP · 512)]; CALP нельзя ставить при PREDIV_A < 3; проверка по выходу 1 Гц: за 32 с ошибка измерения в пределах 0,477 ppm; CALW16 и CALW8 — циклы 16 и 8 с: точность измерения и долговременная точность 0,954 и 1,907 ppm, при этом CALM[0] (CALW16) или CALM[1:0] (CALW8) фиксированы в нуле; обновление на ходу по флагу RECALPF
- STMicroelectronics. AN4759 Using the hardware real-time clock (RTC) and the tamper management unit (TAMP) with STM32 microcontrollers (Rev 11, 2026) — табл. 3–5: плавная калибровка есть у RTC типов RTC2 (F0, F3, F4, F7, L0, L1 кроме Cat. 1, L4, WB…) и RTC3 (C0, G0, G4, H5, L5, U5, WL…), у STM32F2 и STM32L1 Cat. 1 только грубая; разд. 2.5.2: коррекция добавлением или вычитанием отдельных импульсов, разрешение около 0,954 ppm, диапазон −487,1…+488,5 ppm; окно 8, 16 или 32 с; пример: CALM[0] = 1 маскирует ровно один импульс за 32 с; примеры калибровки по эталону 1 Гц с точностью около 1 ppm
- STMicroelectronics. RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21) — разд. 6.3.2 и 6.4.2: у STM32F1 калибровка через регистр BKP_RTCCR: CAL[6:0] замедляет часы шагами 1 000 000/2^20 ppm, от 0 до 121 ppm; бит CCO выводит такт RTC, делённый на 64, на вывод TAMPER для измерения; при CCO вывод TAMPER нельзя включать как вход вскрытия; подробности — в AN2604
Нашли ошибку?
Смотрите также
- Часы RTC STM32PREDIV_A, PREDIV_S, PRL, калибровка CALP/CALM и CAL, уход в с/сут
- RTCСчётчик времени в режимах сна: источники такта, счётчик и календарь
- Часовой кварц 32 768 ГцКамертонный кварц для RTC: 2¹⁵ Гц, малая нагрузка
- ppm — миллионная доляМиллионная доля: 1 ppm = 10⁻⁶ = 0,0001 %
- Резервный домен (backup domain)Часть STM32 с питанием от VBAT: RTC, LSE и резервные регистры