Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2741
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Часы реального времени

474

Те же самые I/O могут быть сконфигурированы для обнаружения несанкционированного доступа (tamper detection). CubeHAL предоставляет специальные процедуры и структуры Си для программирования данной функции. Мы не будем обращаться к ним здесь. Обратитесь к исходному коду CubeHAL (особенно к модулю HAL_RTCEx) для получения дополнительной информации о них.

18.2.5. Калибровка RTC

RTC может быть откалиброван для компенсации неточностей источника RTCCLK. Это в особенности полезно для приложений, которым требуется повышенная точность RTC, и для тех приложений, которые требуют стабильности RTC при изменениях температуры.

Периферийные устройства RTC предоставляют два типа калибровки: грубая и тонкая калибровки. Давайте проанализируем их.

18.2.5.1. Грубая калибровка RTC

Цифровая грубая калибровка (coarse calibration) может использоваться для компенсации неточности кварца путем добавления (положительная калибровка) или маскирования (отрицательная калибровка) тактовых циклов на выходе асинхронного предделителя. Отрицательная калибровка может быть выполнена с разрешением около 2·10−6 Гц (или 2 ppm), а положительная калибровка может быть выполнена с разрешением около 4·10−6 Гц. Максимальный диапазон калибровки от –63·10−6 Гц до 126·10−6 Гц.

Мы можем измерить выходную частоту перед асинхронным предделителем, направив ее на специальный вывод (который обычно совпадает с выводом AF1). Когда этот I/O используется для такой операции, он также называется выводом AFO_CALIB. Измеряя выходную частоту с помощью осциллографа, мы можем оценить качество RTCCLK. Ожидается, что AFO_CALIB будет подавать прямоугольный сигнал с фиксированной частотой 512 Гц.

Для выполнения грубой калибровки HAL предоставляет функцию:

HAL_RTCEx_SetCoarseCalib(RTC_HandleTypeDef *hrtc, uint32_t CalibSign, uint32_t Value);

Параметр CalibSign может принимать значения RTC_CALIBSIGN_POSITIVE и RTC_CAL-

IBSIGN_NEGATIVE, в то время как параметр Value может находиться в диапазоне от 0 до 63 с шагом 2·10−6 Гц при использовании отрицательной калиброкви или от 0 до 126 с шагом 4·10−6 Гц при использовании положительной калибровки.

Рисунок 3: Структурная схема распределения тактового сигнала RTC

При калибровке RTC с использованием грубой калибровки важно подчеркнуть следующие моменты.

Часы реального времени

475

Невозможно проверить результат калибровки, так как выходной сигнал 512 Гц находится перед блоком калибровки (см. рисунок 34). Вы можете проверить калибровку в некоторых микроконтроллерах STM32, поскольку 1 Гц выход CK_Spre находится после блока грубой калибровки. Обратитесь к справочному руководству по вашему микроконтроллеру.

Параметры калибровки могут быть изменены только во время инициализации. Поэтому используйте грубую калибровку только для статической коррекции.

18.2.5.2. Тонкая калибровка RTC

Частота RTC может быть откалибрована с разрешением около 0,954·10−6 Гц (или 0,954 ppm) в диапазоне от –487,1·10−6 Гц до +488,5·10−6 Гц. Коррекция частоты выполняется с помощью ряда небольших настроек (сложение и/или одновременное вычитание отдельных импульсов RTCCLK). Эти настройки четко распределены в диапазоне нескольких секунд (8, 16 или 32 секунды), так что RTC четко откалиброван даже при наблюдении коротких промежутков времени.

Для сложения и/или вычитания заданного количества импульсов RTCCLK в выбранном диапазоне (8, 16 или 32 секунды) используются два регистра RTC, называемые CALP и CALM. В то время как CALM позволяет снизить частоту RTC до 487,1·10−6 Гц при хорошем разрешении, бит CALP можно использовать для увеличения частоты на 488,5·10−6 Гц. Установка регистра CALP в «1» эффективно вставляет дополнительный импульс RTCCLK каждые 211 циклов RTCCLK, что означает, что 512 тактовых импульсов добавляются в течение каждого 32-секундного цикла. Задавая количество импульсов RTCCLK, которые будут маскироваться в течение 32-секундного цикла, воспользовавшись регистром CALM, количество добавляемых тактовых импульсов можно уменьшить до 0.

Используя CALM вместе с CALP, может быть добавлено смещение в диапазоне от –511 до +512 циклов RTCCLK в течение 32-секундного цикла, что соответствует диапазону калибровки от –487,1·10−6 Гц до +488,5·10−6 Гц с разрешением около 0,954·10−6 Гц. Формула для расчета действующей калиброванной частоты ( FCAL ) с учетом входной частоты

(

FRTCCLK

) имеет следующий вид:

F

= F

 

 

(CALP 512 − CALM )

 

1

+

 

 

CAL

RTC

 

 

 

 

CLK

 

 

(220 + CALM CALP 512)

 

 

 

 

 

 

[2]

Для выполнения тонкой калибровки (smooth calibration), HAL предоставляет функцию:

HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef* hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses,

uint32_t SmouthCalibMinusPulsesValue);

Параметр SmoothCalibPeriod может принимать значения, перечисленные в таблице 4, и он определяет интервал распределения. Параметр SmoothCalibPlusPulses может прини-

мать значения RTC_SMOOTHCALIB_PLUSPULSES_SET и RTC_SMOOTHCALIB_PLUSPULSES_RESET и ис-

пользуется для установки/сброса одного бита в регистре CALP.

4 Рисунок взят из AN3371 от ST (http://www.st.com/content/ccc/resource/technical/document/application_note/7a/9c/de/da/84/e7/47/8a/DM00025 071.pdf/files/DM00025071.pdf/jcr:content/translations/en.DM00025071.pdf).

Часы реального времени

476

Параметр SmouthCalibMinusPulsesValue устанавливает количество тактовых импульсов для вычитания, и может принимать любое значение от 0 до 511.

Таблица 4: Доступные значения параметра SmoothCalibPeriod

Интервал распределения

Описание

 

 

RTC_SMOOTHCALIB_PERIOD_8SEC

Период тонкой калибровки составляет 8 с

RTC_SMOOTHCALIB_PERIOD_16SEC

Период тонкой калибровки составляет 16 с

RTC_SMOOTHCALIB_PERIOD_32SEC

Период тонкой калибровки составляет 32 с

В отличие от грубой калибровки RTC, влияние тонкой калибровки на тактовый сигнал календаря (тактовый сигнал RTC) можно легко проверить, считав выходной сигнал с вывода AFO_CALIB. Тонкую калибровку можно также выполнять «на лету» для изменения тактового сигнала при изменении температуры или при обнаружении других факторов.

18.2.5.3. Обнаружение опорного тактового сигнала

В некоторых приложениях RTC может быть активно откалиброван с использованием внешнего опорного тактового сигнала. Опорная тактовая частота (на частотах 50 Гц или 60 Гц – типовая частота сети) должна иметь более высокую точность, чем тактовая частота LSE-генератора 32,768 кГц. По этой причине RTC в микроконтроллерах STM32 с большим количеством выводов предоставляет вход опорного тактового сигнала (вывод называется RTC_50Hz), который может быть использован для компенсации неточности тактового сигнала календаря (1Гц).

Вывод RTC_50Hz должен быть сконфигурирован в режиме плавающего входа. Данный механизм позволяет календарю быть таким же точным, как и опорный тактовый сигнал. Обнаружение опорного тактового сигнала включается с помощью функции:

HAL_StatusTypeDef HAL_RTCEx_SetRefClock(RTC_HandleTypeDef* hrtc);

Когда обнаружение опорного тактового сигнала включено, как асинхронный, так и синхронный предделители должны быть установлены в их значения по умолчанию: 0x7F и 0xFF. Когда обнаружение опорного тактового сигнала включено, каждый фронт тактового сигнала 1 Гц сравнивается с точностью до фронта опорного тактового сигнала (если он найден в заданном временном окне). В большинстве случаев два фронта тактовых сигналов выровнены как надо. Когда тактовая частота 1 Гц смещается из-за неточности тактовой частоты LSE-генератора, RTC немного сдвигает тактовую частоту 1 Гц, так что будущие фронты тактовой частоты 1 Гц выравниваются. Окно обновления состоит из трех периодов ck_calib (ck_calib – выходной сигнал блока грубой калибровки – см. ри-

сунок 3).

Если опорный тактовый сигнал приостанавливается, календарь непрерывно обновляется только на основе тактового сигнала LSE-генератора. Затем RTC ожидает опорный тактовый сигнал, используя окно обнаружения, центрированное по фронту выходного тактового сигнала от синхронного предделителя (ck_spre). Окно обнаружения составляет семь периодов ck_calib.

Опорный тактовый сигнал может иметь большое локальное отклонение (например, в диапазоне 500·10−6 Гц), но в долгосрочной перспективе он должен быть намного более точным, чем 32 кГц кварц. Система обнаружения используется только тогда, когда опорный тактовый сигнал необходимо снова обнаружить после потери. Поскольку окно