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

Современные 32-разрядные ARM-микроконтроллеры серии STM32: базовые таймеры

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

20.11.2014 868 0
Современные 32-разрядные ARM-микроконтроллеры серии STM32: базовые таймеры

Введение

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

Микроконтроллер STM32 [1] имеет в своём составе несколько типов таймеров, отличающихся друг от друга по функциональному назначению.

Первый тип таймеров является самым простым и представляет собой базовые таймеры (Basic Timers). К данному типу принадлежат таймеры TIM6 и TIM7. Эти таймеры очень просто настраиваются и управляются при помощи минимума регистров. Они способны отсчитывать интервалы времени и генерировать прерывания при достижении таймером заданного значения.

Второй тип представляет собой таймеры общего назначения (General-Purpose Timers). К нему относятся таймеры с TIM2 по TIM5 и таймеры с TIM12 по TIM17. Они могут генерировать ШИМ, считать импульсы, поступающие на определённые выводы микроконтроллера, обрабатывать сигналы от энкодера и т.п.

Третий тип определяет таймеры с развитым управлением (Advanced-Control Timer). К этому типу относится таймер TIM1, который способен выполнять все перечисленные выше операции. Кроме того, на основе данного таймера можно построить устройство, способное управлять трёхфазным электроприводом.

Устройство базового таймера

Рассмотрим устройство и работу базового таймера, структурная схема которого представлена на рисунке.

Базовый таймер построен на основе 16-битных регистров. Его основой является счётный регистр TIMx_CNT. (Здесь и далее символ «х» заменяет номер 6 или 7 для базовых таймеров TIM6 и TIM7 соответственно.) Предварительный делитель TIMx_PSC позволяет регулировать частоту тактовых импульсов для счётного регистра, а регистр автозагрузки TIMx_ARR даёт возможность задавать диапазон отсчёта таймера. Контроллер запуска и синхронизации вместе с регистрами управления и состояния служат для организации режима работы таймера и позволяют контролировать его функционирование.

Благодаря своей организации счётчик таймера может считать в прямом и в обратном направлении, а также до середины заданного диапазона в прямом, а затем в обратном направлении.

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

Таймеры TIM6 и TIM7 тактируются от шины APB1. Если использовать кварцевый резонатор с частотой 8 МГц и заводские настройки тактирования по умолчанию, то тактовая частота с шины синхронизации APB1 составит 24 МГц.

  Регистры базового таймера

В таблице приведена карта регистров для базовых таймеров TIM6 и TIM7.

Базовые таймеры включают в свой состав следующие 8 регистров:

  • TIMx_CNT – Counter (счётный регистр);
  • TIMx_PSC – Prescaler (предварительный делитель);
  • TIMx_ARR – Auto Reload Register (регистр автоматической загрузки);
  • TIMx_CR1 – Control Register 1 (регистр управления 1);
  • TIMx_CR2 – Control Register 2 (регистр управления 2);
  • TIMx_DIER – DMA Interrupt Enable Register (регистр разрешения ПДП и прерываний);
  • TIMx_SR – Status Register (статусный регистр);
  • TIMx_EGR – Event Generation Register (регистр генерации событий).

Регистры TIMx_CNT, TIMx_PSC и TIMx_ARR используют 16 информационных разрядов и позволяют записывать значения от 0 до 65535.

Частота тактовых импульсов для счётного регистра TIMx_CNT, прошедших через делитель TIMx_PSC, рассчитывается по формуле:

Fcnt = Fin/(PSC + 1),

где Fcnt – частота импульсов счётного регистра таймера; Fin – тактовая частота; PSC – содержимое регистра TIMx_PSC таймера, определяющее коэффициент деления.

Если записать в регистр TIMx_PSC значение 23999, то счётный регистр TIMx_CNT при тактовой частоте 24 МГц будет изменять своё значение 1000 раз в секунду.

Регистр автоматической загрузки хранит значение для загрузки счётного регистра TIMx_CNT. Обновление содержимого регистра TIMx_CNT производится после его переполнения или обнуления, в зависимости от заданного для него направления счёта.

Регистр управления TIMх_CR1 имеет несколько управляющих разрядов.

Разряд ARPE разрешает и запрещает буферирование записи в регистр автоматической загрузки TIMx_ARR. Если этот бит равен нулю, то при записи нового значения в TIMx_ARR оно будет загружено в него сразу. Если бит ARPE равен единице, то загрузка в регистр произойдёт после события достижения счётным регистром предельного значения.

Разряд OPM включает режим «одного импульса». Если он установлен, после переполнения счётного регистра счёт останавливается и происходит сброс разряда CEN.

Разряд UDIS разрешает и запрещает генерирование события от таймера. Если он обнулён, то событие будет генерироваться при наступлении условия генерирования события, то есть при переполнении таймера или при программной установке в регистре TIMx_EGR разряда UG.

Разряд CEN включает и отключает таймер. Если обнулить этот разряд, то будет остановлен счёт, а при его установке счёт будет продолжен. Входной делитель при этом начнёт счёт с нуля.

Регистр управления TIMх_CR2 имеет три управляющих разряда MMS2…MMS0, которые определяют режим мастера для таймера.

В регистре TIMx_DIER используется два разряда. Разряд UDE разрешает и запрещает выдавать запрос DMA (ПДП) при возникновении события. Разряд UIE разрешает и запрещает прерывание от таймера.

В регистре TIMx_SR задействован только один разряд UIF в качестве флага прерывания. Он устанавливается аппаратно, при возникновении события от таймера. Сбрасывать его нужно программно.

Регистр TIMx_EGR содержит разряд UG, который позволяет программно генерировать событие «переполнение счётного регистра». При установке этого разряда, происходит генерация события и сброс счётного регистра и предварительного делителя. Обнуляется этот разряд аппаратно. Благодаря этому разряду можно программно генерировать событие от таймера, и тем самым принудительно вызывать функцию обработчика прерывания таймера.

Рассмотрим назначение регистров управления и состояния таймера на конкретных примерах программ.

Примеры программ

Для запуска таймера необходимо выполнить несколько операций, таких как подача тактирования на таймер и инициализация его регистров. Рассмотрим эти операции на основе примеров программ для работы с тай­мерами.

Довольно часто в процессе программирования возникает задача реализации временных задержек. Для решения данной задачи необходима функция формирования задержки. Пример такой функции на основе базового таймера TIM7 для STM32 приведён в листинге 1.

Эта функция может формировать задержки в микросекундах или миллисекундах в зависимости от парамет­ра «t». Длительность задержки задаётся параметром «n».

В данной программе задействован режим одного прохода таймера TIM7, при котором счётный регистр CNT выполняет счёт до значения переполнения, записанного в регистре ARR. Когда эти значения сравняются, таймер остановится. Факт остановки таймера ожидается в цикле while, путём проверки бита CEN статусного регистра CR1.

Включение тактирования таймеров производится однократно в главном модуле программы при их инициализации. Базовые таймеры подключены к шине APB1, поэтому подача тактовых импульсов выглядит следующим образом:

RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // Включить тактирование на TIM6
RCC->APB1ENR |= RCC_APB1ENR_TIM7EN; // Включить тактирование на TIM7

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

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

void TIM7_IRQHandler()
{
TIM7->SR &= ~TIM_SR_UIF; //
Обнулить флаг
// Выполнить операции
}
void TIM6_DAC_IRQHandler()
{
// Если событие от TIM6
if(TIM6->SR & TIM_SR_UIF)
{
TIM6->SR &= ~TIM_SR_UIF; //
Обнулить флаг
// Выполнить операции
}
}

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

Пример такой программы приведён в листинге 2.

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

Аналогичную программу можно написать и для таймера TIM7. Отличие такой программы будет состоять в именах регистров и названии обработчика прерывания. Обработчик прерывания таймера TIM6 имеет одну особенность, связанную с тем, что вектор обработки прерывания этого таймера объединён с прерыванием от цифро-аналогового преобразователя (ЦАП). Поэтому в функции обработчика прерывания выполняется проверка источника прерывания. Подробнее ознакомиться с таймерами микроконтроллера STM32 можно на сайте St.com [2].

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

Литература

  1. www.st.com.
  2. www.st.com/web/en/resource/technical/docu­ment/reference_manual/CD00246267.pdf.

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

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

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

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

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

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

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

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

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