Модуль таймера в своей простейшей форме представляет собой цифровую логическую схему, которая подсчитывает каждый тактовый цикл. Дополнительные функции реализованы в аппаратном обеспечении для поддержки модуля таймера, чтобы он мог считать вверх или вниз. Он может иметь предварительный делитель для деления входной тактовой частоты на выбираемое значение. Он также может иметь схемы для захвата входных данных, генерации ШИМ-сигнала и многого другого, как мы увидим в этом руководстве.
Рассмотрим простой 16-битный таймер, подобный показанному ниже. Как 16-битное время, оно может считать от 0 до 65535. Каждый тактовый цикл значение таймера увеличивается на 1. И, как вы можете видеть, Fsys — это не та частота, которая увеличивает модуль таймера. Но он делится прескалером, а затем подается на таймер.
В основном, в режиме таймера регистр TCNT увеличивается на 1 каждый такт на следующей частоте (Fsys/PSC). Это означает, что если Fsys составляет 80 МГц, а PSC — 1:1024, TCNT увеличивается на 1 каждые 12,8 мкс. Поэтому, если вы запустите этот таймер, чтобы считать от 0 до тех пор, пока он не достигнет переполнения (65535), он будет давать вам сигнал прерывания каждые 0,839 секунды.Второй.
Что делать, если мне нужно настроить этот таймер так, чтобы он выдавал сигнал прерывания один раз в 1 секунду? На самом деле мне не нужен этот временной интервал 0,839 с. Что ж, по этой причине существует возможная аппаратная функция, называемая регистром предварительной загрузки, которая заставляет таймер считать от любого произвольно выбранного значения до переполнения. Таким образом, вам больше не нужно начинать считать с нуля. Следовательно, любой временной интервал может быть получен с помощью модуля таймера.
Модуль таймера также может работать в режиме счетчика, когда источник тактового сигнала неизвестен, фактически это внешний сигнал. Может быть, с помощью кнопки, поэтому счетчик увеличивается с каждым нарастающим или спадающим фронтом после нажатия кнопки. Этот режим может быть полезен во многих приложениях, которые мы обсудим ниже. А пока рассмотрим следующую схему.
Как видите, тактовый сигнал теперь подается от кнопки и поступает на вход тактового сигнала таймера через прескалер. И вы можете получить информацию о том, сколько раз была нажата кнопка, просто прочитав значение регистра TCNT.
Дополнительные вводные сведения о модулях таймеров и предварительной загрузке таймеров STMicroelectronics предлагает несколько различных версий или вариантов модулей аппаратного таймера. Микроконтроллеры STM32 обычно имеют несколько аппаратных таймеров каждого типа, однако в некоторых частях может отсутствовать один или несколько из этих аппаратных таймеров. Итак, в этом разделе я выделю эти модули таймера и их основные функции, блок-схему и тому подобное. Просто чтобы дать вам обзор различных доступных аппаратных таймеров в микроконтроллерах STM32. Таким образом, вы можете лучше понять, какой тип подходит для каких приложений. Что, в свою очередь, поможет вам лучше выбрать правильную часть микроконтроллера для вашего проекта. 2.1 Базовые модули таймеров Базовые таймеры состоят из 16-разрядного счетчика с автоматической перезагрузкой, управляемого программируемым предделителем. Их можно использовать как общие таймеры для генерации временной развертки, но они также специально используются для управления цифро-аналоговым преобразователем (ЦАП). Фактически, таймеры внутренне связаны с ЦАП и могут управлять им через свои триггерные выходы. Таймеры полностью независимы и не используют общие ресурсы. Основные функции таймера включают: Основной блок программируемого таймера представляет собой 16-разрядный счетчик прямого счета с соответствующим регистром автоматической перезагрузки. Часы счетчика могут быть разделены прескалером. Счетчик, регистр автоматической перезагрузки и регистр предварительного делителя могут быть записаны или прочитаны программным обеспечением. Это верно даже при работающем счетчике. Базовая единица времени включает в себя: Регистр автоматической перезагрузки предварительно загружен. Доступ к регистру предварительной загрузки осуществляется каждый раз при попытке записи или чтения регистра автоматической перезагрузки. Содержимое регистра предварительной загрузки передается в теневой регистр постоянно или при каждом событии обновления UEV, в зависимости от бита разрешения предварительной загрузки автоматической перезагрузки (ARPE). В режиме счетчика счетчик считает от 0 до значения автоперезагрузки (содержимое регистра TIMx_ARR), затем перезапускается с 0 и генерирует событие переполнения счетчика. Событие обновления может генерироваться при каждом переполнении счетчика или установкой бита UG в регистре TIMx_EGR (с помощью программного обеспечения или с помощью контроллера ведомого режима). 2.2 Модули таймеров с низким энергопотреблением LPTIM — это 16-разрядный таймер, в котором используются последние достижения в области снижения энергопотребления. Благодаря разнообразию источников синхронизации LPTIM может продолжать работать во всех режимах питания, кроме режима ожидания. Учитывая его способность работать даже без внутреннего источника синхронизации, LPTIM можно использовать в качестве «счетчика импульсов», который может быть полезен в некоторых приложениях. Кроме того, возможность LPTIM пробуждать систему из режимов с низким энергопотреблением позволяет реализовать «функции тайм-аута» с чрезвычайно низким энергопотреблением. LPTIM представляет собой гибкую схему синхронизации, которая обеспечивает необходимые функции и производительность при минимальном энергопотреблении. Таймеры с низким энергопотреблением (LPTIM) Основные характеристики: 2.3 Модули таймеров общего назначения Таймеры общего назначения состоят из 16-разрядного счетчика с автоматической перезагрузкой, управляемого программируемым предделителем. Их можно использовать для различных целей, включая измерение длительности импульсов входных сигналов (захват входных сигналов) или генерацию форм выходных сигналов (сравнение выходных сигналов и ШИМ). Длины импульсов и периоды сигналов можно модулировать от нескольких микросекунд до нескольких миллисекунд с помощью предварительного делителя таймера и предварительного делителя контроллера часов RCC. Таймеры полностью независимы и не используют общие ресурсы. Их также можно синхронизировать вместе. Функции таймера TIMx общего назначения включают: 2.4 Модули таймеров расширенного управления Таймеры расширенного управления состоят из 16-разрядного счетчика с автоматической перезагрузкой, управляемого программируемым предделителем. Его можно использовать для различных целей, включая измерение длительности импульсов входных сигналов (захват входных сигналов) или генерацию форм выходных сигналов (сравнение выходных сигналов, ШИМ, дополнительная ШИМ с вставкой мертвого времени). Длины импульсов и периоды сигналов можно модулировать от нескольких микросекунд до нескольких миллисекунд с помощью предварительного делителя таймера и предварительного делителя контроллера часов RCC. Таймеры расширенного управления и таймеры общего назначения полностью независимы и не используют общие ресурсы. Их также можно синхронизировать вместе. Таймеры с расширенным управлением Особенности: 2.5 Модули таймеров высокого разрешения Таймер высокого разрешения может генерировать до 10 цифровых сигналов с высокой точностью синхронизации. В первую очередь он предназначен для управления системами преобразования энергии, такими как импульсные источники питания или системы освещения, но может использоваться и в других целях, когда требуется очень точное временное разрешение (до 217 пс). В целях управления и мониторинга таймер также имеет возможности измерения времени и связи со встроенными преобразователями АЦП и ЦАП. Наконец, он имеет режим управления малой нагрузкой и может обрабатывать различные схемы отказов для безопасного отключения. Таймеры высокого разрешения (HRTIM) Характеристики включают:
— Внутренние источники часов: часы LSE, LSI, HSI16 или APB
— Внешний источник часов через вход LPTIM (работает без работающего генератора LP, используется приложением счетчика импульсов)
– Выход в одноимпульсном режиме
– Обновление: переполнение/опустошение счетчика, инициализация счетчика (программным обеспечением или внутренним/внешним триггером)
– Триггерное событие (запуск счетчика, остановка, инициализация или подсчет по внутреннему/внешнему триггеру)
– Захват входных данных
– Сравнение выходных данных
— захвата ввода
— сравнения вывода
— ШИМ Генерация (режим с выравниванием по краю и центру)
– Выход в одноимпульсном режиме
– Обновление: переполнение/недостаточное значение счетчика, инициализация счетчика (программным способом или внутренним/внешним триггером)
– Триггерное событие (запуск счетчика, остановка, инициализация или подсчет с помощью внутреннего/внешнего триггера)
– Захват входа
– Сравнение выхода
– Прерывание входа
– Разрешение 217 пс, компенсация колебаний напряжения и температуры
– Высокое разрешение доступно на всех выходах, возможность регулировки рабочего цикла , частота и длительность импульса в срабатывающем одноимпульсном режиме
– 6 16-битных модулей синхронизации (каждый с независимым счетчиком и 4 модулями сравнения)
– 10 выходов, которыми можно управлять с помощью любого модуля синхронизации, до 32 источников установки/сброса на канал
– Модульная архитектура для адресации любого из нескольких независимые преобразователи с 1 или 2 переключателями или несколько больших топологий с несколькими переключателями
– 4 триггера к преобразователям АЦП
– 3 триггера к преобразователям ЦАП
– 3 компаратора для преобразования аналогового сигнала
– Вставка мертвого времени с высоким разрешением (до 868 пс)
– Программируемая полярность выхода синхронная загрузка нескольких преобразователей
В этом разделе мы дадим только краткое описание каждого режима работы. Как это работает и для каких приложений подходит. Каждый режим будет подробно обсуждаться с практическими лабораторными экспериментами в будущих руководствах. Но сегодня мы перейдем в режим таймера в разделе 4 и проведем его лабораторную работу в следующем уроке. Другие режимы появятся позже в этой серии руководств.
3.1 Режим таймера
В режиме таймера модуль таймера тактируется от внутреннего источника синхронизации с известной частотой. Следовательно, тактовая частота известна, время переполнения также можно рассчитать и контролировать с помощью регистра предварительной загрузки, чтобы получить любой произвольно выбранный временной интервал. При каждом переполнении таймер сигнализирует ЦП прерыванием, указывающим на окончание указанного временного интервала.
Этот режим работы обычно используется для выполнения определенной операции в каждый определенный интервал времени. И для достижения синхронизации и синхронизации между различными задачами и событиями в системе. Он также может заменить задержки в различных ситуациях для лучшего отклика системы.
3.2 Режим счетчика
В режиме счетчика модуль таймера тактируется от внешнего источника (входной контакт таймера). Таким образом, таймер отсчитывает вверх или вниз каждый нарастающий или спадающий фронт внешнего входа. Этот режим действительно полезен во многих ситуациях, когда вам нужно реализовать цифровой счетчик без опроса входных контактов или периодического чтения GPIO или постоянного прерывания ЦП, если вы решили подключить его к контакту EXTI.
Фактически вы можете контролировать разницу значений счетчика каждый временной интервал, чтобы определить, сколько импульсов произошло или какова их частота. Такой режим может быть выгоден во многих подобных ситуациях. И больше примеров будет в следующих уроках.
3.3 Режим ШИМ
В режиме ШИМ модуль таймера тактируется от внутреннего источника тактового сигнала и формирует цифровой сигнал на выводе выходного канала, называемый сигналом ШИМ. При использовании выходных регистров сравнения (OCR) значение регистра инкрементного таймера постоянно сравнивается с этим регистром OCR. Когда происходит совпадение, состояние выходного вывода меняется до конца периода, и весь процесс повторяется.
Таймер в режиме ШИМ будет производить сигнал ШИМ на указанной частоте, выбранной пользователем. Рабочий цикл также программно управляется его регистром. На разрешение ШИМ влияет желаемый F ШИМ и другие факторы, как мы увидим в специальных руководствах по генерации ШИМ.
3.4 Расширенный режим ШИМ
Генерация расширенного сигнала ШИМ относится к аппаратной способности управлять большим количеством параметров и добавлять некоторые аппаратные схемы для поддержки дополнительных функций для генерации сигнала ШИМ. В том числе:
Вот пример для ШИМ-каналов с дополнительным выходным сигналом, со вставленной зоной нечувствительности и регулировкой фазовой задержки. Типичный управляющий сигнал в полумостовом режиме.
3.5 Режим сравнения выходного сигнала
В режиме сравнения выходного сигнала модуль таймера управляет формой выходного сигнала или указывает, когда истек период времени. Когда обнаруживается совпадение между регистром сравнения выходов (OCR) и счетчиком, функция сравнения выходов назначает соответствующему выходному контакту программируемое значение, определяемое выходом 9.0106 режим сравнения определяется программистом.
На выходной контакт сравнения можно установить высокий или низкий уровень, изменить его состояние или оставить без изменений. Это определяется программистом в соответствии с требованиями приложения. Этот режим работы может быть чрезвычайно выгодным для генерации сигналов синхронизации и управления выходным сигналом во многих приложениях, как мы увидим в следующих руководствах.
Вот пример таймера подсчета в режиме сравнения вывода. Обратите внимание, когда состояние вывода изменилось (переключено) и значение в OCR (сравните регистр TIM1_CCR1).
3.6 Одноимпульсный режим
Одноимпульсный режим (OPM) является частным случаем предыдущих режимов. Он позволяет запускать счетчик в ответ на стимул и генерировать импульс программируемой длины после программируемой задержки. Запуском счетчика можно управлять через контроллер ведомого режима. Генерация сигнала может выполняться в режиме сравнения выходных сигналов или в режиме ШИМ.
Импульс может быть сгенерирован правильно, только если значение сравнения отличается от начального значения счетчика. Перед запуском (когда таймер ожидает срабатывания) конфигурация должна быть CNT
3.7 Режим захвата ввода
В режиме захвата ввода регистры захвата/сравнения (TIMx_CCRx) используются для фиксации значения счетчика после перехода, обнаруженного соответствующим сигналом ICx. Когда происходит захват, устанавливается соответствующий флаг CCXIF (регистр TIMx_SR) и может быть отправлено прерывание или запрос DMA, если они разрешены.
Этот режим чрезвычайно важен для измерения внешнего сигнала или определения времени внешнего события. Текущее значение счетчиков таймера фиксируется, когда происходит внешнее событие и срабатывает прерывание. Таким образом, мы можем использовать эту функцию для широкого спектра измерительных приложений.
Примером применения является ультразвуковой датчик, который измеряет расстояние и отправляет информацию в виде импульса на ваш микроконтроллер. Измерив время ширины импульса, вы можете узнать показание расстояния. Этого можно достичь, используя блок захвата ввода (ICU) в модуле таймера.
3.8 Режим энкодера
В режиме интерфейса энкодера модуль таймера работает как цифровой счетчик с двумя входами. Счетчик тактируется каждым действительным переходом на обоих входных контактах. Последовательность переходов двух входов оценивается и генерирует счетные импульсы, а также сигнал направления. В зависимости от последовательности счетчик считает вверх или вниз. Таким образом, вам не нужно обнаруживать эти импульсы по отдельности и смотреть, какие из них были первыми для определения направления вращения и такого рода работы. Теперь все это делается аппаратно благодаря аппаратной поддержке режима кодировщика.
Таймер, настроенный в режиме интерфейса энкодера, предоставляет информацию о текущем положении датчика. Пользователь может получить динамическую информацию (скорость, ускорение, замедление), измеряя период между двумя событиями энкодера с помощью второго таймера, настроенного в режиме захвата. Для этой цели можно использовать выход энкодера, который показывает механический ноль. В зависимости от времени между двумя событиями счетчик также может считываться в обычное время.
3.9 Режим шлюза таймера
В режиме стробирования таймера модуль таймера также считается работающим в «ведомом режиме». Где это считается только до тех пор, пока внешний входной контакт удерживается высоким или низким. Этот входной контакт называется вентилем таймера, который позволяет таймеру считать или не считать.
Этот режим можно использовать в широком диапазоне приложений и измерений сигналов. Он может помочь вам измерять очень короткие импульсы с очень высоким разрешением. А также запустить таймер для подсчета внешних событий от датчиков или других микроконтроллеров.
Счетчик начинает считать по внутренним часам, пока TI1 имеет низкий уровень, и останавливается, как только TI1 становится высоким. Флаг TIF в регистре TIMx_SR устанавливается как при запуске, так и при остановке счетчика. Задержка между нарастающим фронтом на TI1 и фактической остановкой счетчика связана со схемой ресинхронизации на входе TI1.
3.10 Пакетный режим DMA таймера
Не все таймеры STM32 способны генерировать несколько запросов DMA при одном событии. Основная цель состоит в том, чтобы иметь возможность перепрограммировать часть таймера несколько раз без накладных расходов на программное обеспечение, но его также можно использовать для чтения нескольких регистров подряд через равные промежутки времени.
3.11 Инфракрасный режим IRTIM
Инфракрасный интерфейс (IRTIM) для дистанционного управления может использоваться с инфракрасным светодиодом для выполнения функций дистанционного управления. Он использует внутренние соединения с TIM15 и TIM16, как показано на диаграмме ниже. Чтобы генерировать сигналы инфракрасного дистанционного управления, ИК-интерфейс должен быть включен, а канал 1 TIM15 (TIM15_OC1) и канал 1 TIM16 (TIM16_OC1) должны быть правильно настроены для генерации правильных сигналов. Инфракрасный приемник можно легко реализовать с помощью базового режима захвата входных данных.
Все стандартные режимы импульсной ИК-модуляции можно получить, запрограммировав два канала сравнения выхода таймера. TIM15 используется для генерации высокочастотного несущего сигнала, а TIM16 генерирует огибающую модуляции. Инфракрасная функция выводится на вывод IR_OUT. Активация этой функции осуществляется через регистр GPIOx_AFRx путем включения соответствующего бита альтернативной функции.
После этого длинного обзора аппаратных вариантов таймеров STM32 и возможных режимов работы таймеров мы сосредоточимся на одном из них до конца этого руководства. Который будет самым основным, «режимом таймера». Итак, мы подробно обсудим работу в режиме таймера, а затем проведем практические лабораторные работы в следующем уроке. После этого мы можем перейти к другому режиму работы (счетчик, ICU, PWM и т. д.).
4.1 Блок-схема
В этом уроке мы будем работать с таймером общего назначения. А вот его логическая блок-схема.
4.2 Функциональное описание
4.2.1 Базовый блок времени
Основной блок программируемого таймера представляет собой 16-разрядный счетчик с соответствующим регистром автоматической перезагрузки. Счетчик может считать вверх, вниз или одновременно вверх и вниз. Часы счетчика могут быть разделены прескалером. Счетчик, регистр автоматической перезагрузки и регистр предварительного делителя могут быть записаны или прочитаны программным обеспечением. Это верно даже при работающем счетчике. Базовая единица времени включает в себя:
Регистр автоматической перезагрузки предварительно загружен. Запись или чтение из регистра автоматической перезагрузки обеспечивает доступ к регистру предварительной загрузки. Содержимое регистра предварительной загрузки передается в теневой регистр постоянно или при каждом событии обновления (UEV), в зависимости от бита разрешения предварительной загрузки автоматической перезагрузки (ARPE) в регистре TIMx_CR1. Событие обновления отправляется, когда счетчик достигает переполнения.
4.2.2 Предварительный делитель таймера
Предварительный делитель может делить тактовую частоту счетчика на любой коэффициент от 1 до 65536. Он основан на 16-битном счетчике, управляемом через 16-битный регистр (в регистре TIMx_PSC). Его можно изменить на лету, так как этот регистр управления буферизован. Новое соотношение Prescaler учитывается при следующем событии обновления.
4.3 Примеры применения
Модуль таймера в режиме таймера можно использовать для создания интервала задержки между определенными событиями. Или повторно выполнять определенную задачу каждый конкретный интервал времени. А также для измерения времени между предопределенными событиями. Таким образом, таймер может генерировать или измерять временные интервалы на основе внутренних часов и предварительного делителя, которые вместе определяют разрешение времени такта таймера.
4.4 Различные возможные конфигурации
При настройке модуля таймера для работы в режиме таймера следует установить следующие конфигурации в соответствии с требованиями вашего приложения.
Временной интервал таймера, представляющий собой комбинацию следующих настроек:
4.6 Прерывания таймера STM32
Универсальные таймеры STM32 могут генерировать сигнал прерывания/DMA при следующих событиях:
Для наших приложений в следующем руководстве/лабораторной работе мы будем использовать сигнал прерывания переполнения для переключения светодиода или чего-то еще, чтобы проверить функциональность таймера и правильность тайминга.
Вот и все для этого урока. ). Итак, будьте готовы к этому!
И, пожалуйста, рассмотрите возможность поддержки контента, ПОДЕЛИСЬ им в социальных сетях или через Patreon.
спросил
Изменено 5 лет, 8 месяцев назад
Просмотрено 17 тысяч раз
\$\начало группы\$
Насколько я понимаю, источником внутреннего таймера на микроконтроллерах STM32(F4) может быть либо APB1, либо APB2. Однако я не могу найти, какие таймеры получают какие часы.
Я уже нашел ST AN4013, который объясняет почти все о таймерах, но не их соответствующий внутренний источник часов.
Кто-нибудь знает или имеет источник, какие именно часы использует каждый таймер?
\$\конечная группа\$
8
\$\начало группы\$
Замечание по применению ST, на которое вы ссылаетесь, представляет собой просто общее описание, а не все. Детали оборудования отличаются от каждой модели MCU. AN расскажет вам только общую идею. Поэтому вам нужно посмотреть документы, специально написанные для каждой модели MCU.
Как упоминалось в комментариях, когда вы работаете с периферийными устройствами STM32, вам в основном нужно будет посмотреть два документа (поскольку вы не указали модель MCU, я приведу пример STM32F407):
Краткое описание оборудования. Поскольку APB1 и APB2 связаны с шиной, то, что вам нужно, описано в разделе карты памяти (он же раздел 4 Отображение памяти)
Очень подробно (1749страниц!) описание MCU. Когда вы посмотрите на Таймеры в этом руководстве, вы поймете, что существует гораздо больше вещей, чем AN. В любом случае, этот документ также описывает карту памяти. (Раздел 2.3)
Примечание) Несмотря на то, что STM32 HAL API абстрагируется от деталей оборудования, вам все равно необходимо знать, какие APB подключены к используемым вами таймерам.