Фильтр по тематике

Современные 32-разрядные ARM-микроконтроллеры серии STM32: часы реального времени RTC

Приведено описание часов реального времени RTC 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрена архитектура, состав и назначение регистров конфигурирования RTC, а также примеры программ для работы с этим блоком.

01.02.2014 648 0
Современные 32-разрядные ARM-микроконтроллеры серии STM32: часы реального времени RTC

Введение

Не все микроконтроллеры имеют в своём составе такой важный аппаратный блок, как часы реального времени (RTC, Real Time Clock). Данного электронного узла нет даже во многих широко распространённых микроконтроллерах семейства AVR. Таким образом, наличие часов реального времени является одним из достоинств микроконтроллеров STM32 компании STMicroelectronics [1].

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

Кроме того, блок RTC способен работать при обесточенном микроконтроллере от автономного источника питания. Благодаря тому что блок RTC потребляет ток величиной лишь в несколько микроампер, он может работать очень долгое время от малогабаритного источника с небольшой энергоёмкостью. Это позволяет создавать на базе микроконтроллеров STM32 устройства с энергонезависимыми часами, способными отслеживать время даже при пропадании питания и функционировать в соответствии с временны¢м графиком. Например, одним из таких устройств могут быть простые электронные часы, которые автоматически восстанавливают верные показания времени после пропадания питания. Другим примером может служить устройство, которое раз в сутки опрашивает датчики, собирает информацию и передаёт её в центральный узел, а остальное время находится в спящем режиме, экономя энергию автономного источника и увеличивая тем самым продолжительность своей автономной работы.

Архитектура RTC

Часы реального времени могут тактироваться от одного из трёх источников тактовой частоты. В качестве таких источников сигнала могут служить:

  • внутренний высокочастотный сигнал HSE с предварительным делителем на 128;
  • внутренний низкочастотный сигнал LSE;
  • внешний сигнал LSI от низкочастотного кварцевого резонатора.

На рисунке приведена структурная схема часов реального времени в микроконтроллере STM32.

Блок RTC состоит из интерфейса APB1, предварительного делителя тактовой частоты, набора программируемых счётчиков и регистров, а также логики управления. Интерфейс APB1 служит для связи регистров RTC с шиной APB1. Предварительный делитель тактовой частоты RTC формирует импульсы отсчётов времени TR_CLK для основного счётчика часов. Делитель включает в свой состав регистр RTC_PRL и счётчик RTC_DIV. Данный делитель может быть запрограммирован так, чтобы формировать импульсы с периодом в одну секунду. Например, если частота тактового сигнала взята от «часового» кварца, то для получения секундных импульсов необходимо разделить её на 32 768.

Основную роль часов в составе RTC выполняет 32-разрядный счётчик секунд RTC_CNT, который отсчитывает импульсы, поступающие от делителя частоты. Регистр RTC_ALR служит для формирования сигнала тревоги и позволяет хранить значение, которое регулярно сравнивается с текущим содержимым счётчика секунд. При достижении счётчиком секунд значения регистра тревоги формируется сигнал RTC_Alarm. Этот сигнал пробуждает процессор и генерирует соответствующее прерывание.

С помощью регистра управления RTC_CR можно разрешить или запретить генерирование прерываний от сигнала секундных импульсов RTC_Second, сигнала переполнения RTC_Overflow и сигнала тревоги RTC_Alarm.

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


Регистры RTC

Блок RTC включает в свой состав следующие десять регистров:

1. RTC_CRH – старший управляющий регистр;
2. RTC_CRL – младший управляющий регистр;
3. RTC_PRLH – старший регистр коэффициента делителя тактовой частоты;
4. RTC_PRLL – младший регистр коэффициента делителя тактовой частоты;
5. RTC_DIVH – старший счётный регистр делителя тактовой частоты;
6. RTC_DIVH – младший счётный регистр делителя тактовой частоты;
7. RTC_CNTH – старший счётный регистр часов;
8. RTC_CNTL – младший счётный регистр часов;
9. RTC_ALRH – старший сигнальный регистр;
10. RTC_ALRL – младший сигнальный регистр.

Формат этих регистров с названиями входящих в них разрядов представлены в таблице.


Рассмотрим поочерёдно структуру и назначение этих регистров.

Старший регистр RTC_CRH имеет структуру, представленную в таблице (см. строки Разряд – Обозначение – Обращение).

Разряд SECIE разрешает прерывание от секундных импульсов.

Разряд ALRIE разрешает прерывание от сигнального регистра.

Разряд OWIE разрешает прерывание по переполнению счётного регистра.

Здесь и далее способ обращения к разрядам регистров имеет следующие условные обозначения:

  • rw – допускается чтение и запись разряда;
  • r – допускается только чтение разряда;
  • w – допускается только запись разряда;
  • rc_w1 – допускается чтение разряда и его очистка путём записи 1;
  • rc_w0 – допускается чтение разряда и его очистка путём записи 0.

Младший регистр RTC_CRL имеет свою структуру (см. табл.).

Три младших разряда являются флагами следующих событий:

  • SECF – сформирован секундный импульс;
  • ALRF – совпало значение счётного и сигнального регистра;
  • OWF – счётный регистр переполнен.

Остальные разряды имеют следующее назначение:

  • RSF – флаг синхронизации, устанавливается, когда обновляются регистры RTC_CNT и RTC_DIV;
  • CNF – разрешает конфигурирование регистров RTC_CNT, RTC_ALR или RTC_PRL;
  • RTOFF – указывает на окончание операции записи в регистр RTC_CNT, RTC_ALR или RTC_PRL.

Регистры RTC_PRLH и RTC_PRLL задают коэффициент деления входного делителя тактовой частоты часов. Их назначение приведено в соответствующих ячейках таблицы.

Частота импульсов, поступающих на вход счётного регистра, определяется по формуле: FTR_CLK = FRTCCLK / (PRL[19:0] + 1), где FRTCCLK – частота импульсов на входе делителя. Поэтому при частоте входных импульсов, составляющей 32 768 Гц, для получения секундных импульсов в регистр PRL необходимо записать значение 32 767 = 0 ´ 7FFF, т.е. в регистр RTC_PRLH записать значение 0 ´ 7F, а в регистр RTC_PRLL – значение 0 ´ FF.

Регистры RTC_DIVH и RTC_DIVL представляют собой счётный входной делитель и доступны только для чтения. Назначение их разрядов приведено в соответствующих строках таблицы.

Счётный регистр состоит из двух 16-разрядных регистров RTC_CNTH и RTC_CNTL.

Аналогичную структуру имеют сигнальные регистры RTC_ALRH и RTC_ALRL, информация о которых также представлена в таблице. Отличается лишь способ обращения к ним.

Более подробное описание назначения регистров RTC можно найти в источнике [2].

Программирование

Инициализация и использование

Для инициализации блока RTC необходимо выполнить следующие действия:

  • разрешить тактирование и доступ к резервной области данных;
  • выбрать источник тактовых им­-пульсов;
  • настроить входной делитель.

Функция, выполняющая инициализацию RTC, может иметь код, приведённый в листинге 1.


В данной программе инициализации часто производится обращение к регистру BDCR. Этот регистр управляет сбросом и тактированием области резервных данных BKP. Регистры RTC расположены именно в этой области. В начале программы выполняется проверка работы блока RTC, и если он уже работает, то инициализация не выполняется.

Сброс регистров области резервных данных производится для того, чтобы иметь возможность изменять разряды RTCSEL, задающие источник тактового сигнала. В соответствии с описанием блока часов реального времени, после выбора источника синхронизации для RTC, он может быть изменён только через сброс BKP. Для сброса BKP можно использовать разряд BDRST регистра BDCR.

В данной программе в качестве источника тактового сигнала выбран генератор с внешним кварцем. Если использовать часовой кварц, имеющий частоту 32 768 Гц, то для получения секундных импульсов задаётся коэффициент деления входного делителя, который вычисляется по формуле: PRL[19:0] = (FRTCCLK / FTR_CLK) – 1.

Для изменения регистра PRL разряд CNF регистра RTC_CRL переводится в единичное состояние, а по окончании модификации сбрасывается.

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

Для работы со счётным регистром RTC применяются функции чтения и записи, приведённые в листинге 2.


Аналогичным образом можно работать с сигнальным регистром RTC. Конечно, при этом функции должны иметь другое название, например: RTC_GetAlarm и RTC_SetAlarm, и в этих функциях вместо регистров CNTH и CNTL необходимо использовать регистры ALRH и ALRL.

Функции преобразования времени

Поскольку в прикладных программах часто возникает необходимость использования показаний времени в часах, минутах и секундах, а в RTC счётный регистр отсчитывает только секунды, появляется потребность в дополнительных функциях преобразования времени.

Рассмотрим две такие функции. Одна функция будет преобразовывать текущее время в формат, пригодный для записи в счётный регистр, а вторая будет выполнять обратное преобразование.

Для удобства работы с форматом времени удобно использовать специальную структуру. В листинге 3 приведена такая структура, а также функции преобразования времени.


Рассмотрим пример программы для работы с RTC, использующий эти функции. В программе будет осуществляться запись в RTC времени 12 час, 30 минут и 45 секунд, а затем чтение этого времени. Пример программы приведён в листинге 4.


Аналогично можно преобразовывать время для сигнального регистра RTC.

Прерывания RTC

Существует три события, которые могут генерировать прерывание от RTC:

  • переполнение входного делителя, т.е. секундные импульсы;
  • переполнение счётного регистра;
  • совпадение сигнального и счётного регистров.

Чтобы использовать прерывания от RTC, необходимо создать функцию для обработки прерывания. Такая функция может иметь вид, приведённый в листинге 5.


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

В программе, которая будет использовать функцию обработки прерываний от RTC, требуется активировать события, вызывающие эти прерывания. Это делается с помощью команд, приведённых в листинге 6.


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

NVIC_EnableIRQ (RTC_IRQn); // разрешить прерывание от модуля RTC

Заключение

В качестве практического закрепления материала читателям предлагается самим написать программу, которая выполнит инициализацию блока RTC и будет ежесекундно формировать отправку показаний часов через последовательный порт USART микроконтроллера.

Литература

  1. www.st.com.
  2. www.st.com/web/en/resource/technical/document/reference_manual/CD00246267.pdf.

© СТА-ПРЕСС


Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

01.02.2014 648 0
Комментарии
Рекомендуем
К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 4. История возникновения  концепции поляритонов

К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 4. История возникновения концепции поляритонов

В прошлом году в журнале «Современная электроника» были опубликованы три статьи, посвящённые юбилею выдающегося российского физика-теоретика Игоря Евгеньевича Тамма (СОЭЛ № 7–9, 2025). В частности, были описаны современные быстродействующие электрооптические модуляторы, поверхностные состояния Тамма, запрещённые фотонные зоны и фотонные кристаллы. В этих статьях умышленно не затрагивались темы поляритонов, оптических состояний Тамма (ОСТ) и плазмон-поляритонов Тамма (ППТ). Поскольку ключевой вклад в раннюю разработку этих явлений в основном принадлежит российским учёным, целесообразно посвятить их открытию более подробные отдельные статьи. Ниже рассмотрены два основных типа гибридных фотонных частиц: экситон-поляритоны и фонон-поляритоны.  
24.04.2026 СЭ №4/2026 79 0
Телевизор с электронно-лучевой трубкой: разработки С.И. Катаева и их значение

Телевизор с электронно-лучевой трубкой: разработки С.И. Катаева и их значение

«…Наступит время… когда миллионы таких приборов, таких "электрических глаз" будут всесторонне обслуживать общественную и частную жизнь, науку, технику и промышленность…» Б. Розинг Семён Исидорович Катаев (1904–1991 гг.), советский учёный и изобретатель в области телевидения, доктор технических наук, профессор, заслуженный деятель науки и техники – незаслуженно обделён вниманием популяризаторами истории электроники и телевидения в нашей стране. Тем не менее И.С. Катаев внёс значительный вклад в развитие инженерной мысли в СССР при разработке и усовершенствовании электронно-лучевых трубок (ЭЛТ), ставших на многие годы ключевой технологией, лежащей в основе экранов телевизоров и оборудования различного назначения. Катаев дополнил изобретение Зворыкина и по праву может считаться ещё одним «отцом» отечественного телевидения. В найденных документах роль Катаева прослеживается чётко, и в статье мы хотим это показать.
23.04.2026 СЭ №4/2026 94 0
Электронные системы диагностики, стимуляции и воздействия на человека на примере BAMH и управления –  на примере AE-Skin

Электронные системы диагностики, стимуляции и воздействия на человека на примере BAMH и управления – на примере AE-Skin

Путь будущих разработок в области современной электроники пролегает от визуального отображения окружающего пространства до тактильного. В этой связи представляют интерес система Bioinspired Adaptable Multiplanar mechano-vibrotactile Haptic (BAMH) – пневматически активируемый роботизированный электронный комплекс с интерфейсом из мягкого материала и система AE-Skin, обеспечивающая интерфейс между кожей человека и физическими поверхностями. Принцип её действия достаточно известен и заложен в управлении интерактивными экранами. В первой части статьи рассматриваются особенности новых разработок в области медицинской электроники и перспективы тактильного воздействия на кожу человека для лечения и изменения настроения. Во второй части представлен подробный разбор AE-Skin и примеры её совершенствования во всех сферах жизни человека: от управления посредством электронных тактильных датчиков миниатюрной формы до устройств на основе новых технологий, воспринимающих движения руками без прикосновения и без применения пироэлектрических детекторов, как управляющие сигналы для РЭА.
17.04.2026 СЭ №4/2026 139 0

ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnjeHksEz
ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnjddDXPx
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться