Введение
Блок резервных данных BKP 32-разрядных ARM-микроконтроллеров серии STM32 [1] представляет собой область данных, сохранение которых при пропадании основного питания микроконтроллера обеспечивается за счёт энергии резервной батареи.
Аббревиатура BKP является сокращением слова Backup, которое в переводе с английского означает «резервный». В англоязычных источниках аббревиатура BKP применяется для обозначения слов Backup registers (резервные регистры), однако в отечественной технической литературе обычно используется перевод – резервные данные. Поэтому данный блок назван как «блок резервных данных» или BKP (англ.).
Регистры, расположенные в данной области, не сбрасываются ни при перезагрузке системы, ни при восстановлении подачи питания, ни при пробуждении устройства из режима ожидания Standby.
После сброса микроконтроллера доступ к регистрам области резервных данных заблокирован, и блок BKP защищён от возможной случайной записи. Чтобы разрешить доступ по записи к регистрам этой области, необходимо выполнить определённую процедуру. Такой аппаратный способ блокировки обеспечивает защиту записанных в блоке ВКР данных.
Состав и особенности блока ВКР
В области резервных данных располагаются регистры, используемые для работы часов реального времени RTC, и 16-разрядные регистры резервных данных. В зависимости от модели микроконтроллера количество этих регистров может варьироваться от 10 до 42. Их удобно использовать, например, для хранения энергонезависимых данных, предназначенных для настройки системы. Фактически они являются аналогом памяти EEPROM с небольшим объёмом. Конечно, в отличие от EEPROM энергетическая независимость данных в этих регистрах обеспечивается резервной батареей, но зато количество циклов записи для них не ограничено.
Поскольку блок BKP может питаться от резервной батареи, когда основное питание отсутствует, и процессор микроконтроллера не работает, сброс регистров, относящихся к этой области, отличается от сброса остальных регистров контроллера. Сбросить регистры этого блока можно программно, выполнив определённые процедуры, или аппаратно, подав сигнал на вывод TAMPER. Причём аппаратный сброс требуется предварительно программно разрешить.
Регистры блока BKP
Блок BKP включает в свой состав следующие регистры:
- BKP_DRx – группа информационных регистров;
- BKP_RTCCR – регистр управления блоком RTC;
- BKP_CR – регистр управления назначением многоцелевого вывода;
- BKP_CSR – регистр управления прерыванием от многоцелевого вывода.
Регистры BKP_DRx используются для хранения произвольных данных, сохранение которых необходимо даже после выключения питания контроллера. Они имеют разрядность 16 бит, а их количество в зависимости от модели контроллера может достигать 42. Таким образом, в этой области можно хранить до 84 байт данных.
Регистр BKP_RTCCR служит для управления блоком RTC и также является энергонезависимым.
Последние два регистра позволяют настроить микроконтроллер для использования многоцелевого вывода PC13-TAMPER-RTC. Можно выполнить настройки таким образом, чтобы при появлении сигнала на этом выводе выполнялся сброс регистров области резервных данных. Также можно настроить прерывание от этого события.
Формат регистров блока BKP с названиями входящих в них разрядов представлен в таблице 1.

Рассмотрим поочерёдно структуру и назначение этих регистров.
Структура регистров BKP_DRx приведена в таблице 2.

Все разряды этих регистров являются информационными и служат для хранения произвольных данных. Они имеют доступ по записи и чтению.
Здесь и далее способ обращения к разрядам регистров имеет следующие условные обозначения:
- rw – допускается чтение и запись разряда;
- r – допускается только чтение разряда;
- w – допускается только запись разряда.
Регистр BKP_RTCCR служит для управления блоком RTC. Назначение всех разрядов этого регистра приведено в таблице 3.

Разряд ASOS определяет, какой из сигналов поступает на многоцелевой вывод PC13-TAMPER-RTC. Если этот разряд имеет состояние «0» – поступает сигнальный выход RTC, а если «1» – секундный выход RTC. Этот разряд может быть сброшен только при сбросе всего блока BKP.
Разряд ASOE разрешает работу выходного сигнала, определяемого разрядом ASOS. Этот разряд также может быть сброшен только при сбросе всего блока BKP.
Разряд CCO подключает сигнал калибровки к многоцелевому выводу PC13-TAMPER-RTC. Если этот разряд имеет состояние «0» – сигнал отключён, а если «1» – подключён сигнал калибровки, представляющий собой импульсы тактовой частоты генератора RTC, поделённые на 64. Этот разряд сбрасывается при отключении питания микроконтроллера.
Разряды CAL[6:0] задают величину калибровки часов реального времени RTC. Эта величина указывает количество тактовых импульсов для RTC, которые будут проигнорированы каждые 220 часов, т.е. каждые 1 048 576 часов. Это позволяет выполнить калибровку RTC, замедляющую часы с шагом 1 000 000/220 PPM, где PPM – это одна миллионная часть величины (от англ. Parts Per Million – частей на миллион). С помощью разрядов CAL часы RTC могут быть замедлены от 0 до 121 PPM.
Регистр BKP_CR служит для управления назначением многоцелевого вывода. Назначение разрядов этого регистра приведено в таблице 4.

Разряд TRAL определяет альтернативное назначение многоцелевого вывода PC13-TAMPER-RTC. Если этот разряд имеет состояние «0», то все информационные регистры BKP сбрасываются от высокого уровня сигнала на выводе PC13-TAMPER-RTC, а если состояние «1» – от низкого уровня сигнала на том же выводе. При этом должен быть предварительно установлен в единичное состояние разряд TPE.
Разряд TPE определяет назначение многоцелевого вывода PC13-TAMPER-RTC. Если этот разряд имеет состояние «0», то вывод является свободно определяемым двунаправленным выводом, а если «1», то этот вывод выполняет альтернативную функцию.
Одновременная установка разрядов TPAL и TPE может привести к случайному назначению многоцелевого вывода. Поэтому рекомендуется изменять разряд TPAL только при условии, когда разряд TPE сброшен.
Регистр BKP_CSR служит для обслуживания прерывания от многоцелевого вывода. Назначение всех разрядов этого регистра приведено в таблице 5.

Разряд TIF представляет собой флаг прерывания сигнала TAMPER. Данный разряд устанавливается аппаратно, когда обнаружено событие сигнала TAMPER и разряд TPIE установлен. Сброс этого разряда производится записью 1 в разряд CTI, при этом сбрасывается и само прерывание. Состояния разряда означают: 0 – нет прерывания от сигнала TAMPER, 1 – произошло прерывание от сигнала TAMPER. Этот разряд сбрасывается только при системном сбросе и при пробуждении из спящего режима.
Разряд TEF представляет собой флаг события сигнала TAMPER и устанавливается аппаратно, когда обнаружено событие сигнала TAMPER. Сброс этого разряда производится записью 1 в разряд CTE. Состояния разряда означают: 0 – нет событий сигнала TAMPER, 1 – произошло событие сигнала TAMPER.
Разряд TPIE разрешает прерывания от сигнала TAMPER. Сброс разряда в состояние «0» запрещает прерывания от сигнала TAMPER, а установка в состояние «1» – разрешает. В этом случае должен быть установлен разряд TPE регистра BKP_CR.
Разряд CTI очищает прерывание сигнала TAMPER, когда устанавливается в состояние «1». При этом он также сбрасывает флаг TIF.
Разряд CTE при установке его в состояние «1» очищает события сигнала.
Более подробное описание назначения регистров BKP можно найти в источнике [2].
Программирование
Для инициализации блока BKP и работы с ним необходимо выполнить следующие действия:
- разрешить тактирование и доступ к резервной области данных;
- разрешить доступ к области резервных данных для записи;
- произвести операции чтения или записи данных;
- запретить доступ к области резервных данных для записи.
Рассмотрим конкретный пример программы обращения к регистрам резервных данных BKP (см. листинг 1).

Первая команда данной программы обеспечивает подачу тактовых импульсов для BKP. Без этого область BKP будет недоступна.
Перед записью данных в область BKP сначала разрешается доступ к области резервных данных для записи, а после записи BKP вновь блокируется, что позволяет защитить эти данные.
Для удобства разработки программ в листинге 2 приведён набор функций, позволяющих выполнить все необходимые операции для работы с BKP.

Представленные готовые функции позволяют избавиться от необходимости запоминания названия специальных регистров и упрощают работу с блоком ВКР.
Литература
© СТА-ПРЕСС
Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

