Программирование ARM STM32F4xx: продвинутые таймеры TIM1 и TIM8 Mon, November 04 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


STM32F4xx: продвинутые таймеры TIM1 и TIM8 Печать
Добавил(а) microsin   

В этой статье приведен перевод документации [1] по таймерам TIM1 и TIM8. Информация относится ко всему семейству STM32F4xx, если не указано нечто другое. Таймеры с усовершенствованным управлением (advanced-control) TIM1 и TIM8 обладают более продвинутыми возможностями, чем другие таймеры.

TIM1 и TIM8 содержат в себе 16-битный счетчик с возможностью автозагрузки, на который подается тактовая частота через программируемый прескалер. Эти таймеры могут использоваться для различных целей - измерения длительности импульсов входного сигнала (захват по входу, input capture) или генерации выходных сигналов (вывод по событию сравнения счетчика output compare, генерация PWM, комплементарного PWM со вставкой мертвого времени).

Длительности импульсов и периодов генерируемых сигналов можно модулировать от нескольких микросекунд до нескольких миллисекунд, используя прескалер таймера и прескалеры контроллера тактов RCC. Продвинутые (TIM1 и TIM8), и обычные (TIMx) таймеры полностью независимые, и не используют совместно никакие ресурсы. Они могут синхронизироваться совместно, как это описано во врезке "Синхронизация таймера".

• 16-битный счетчик, который считает вверх, вниз и в оба этих направления, с возможностью автозагрузки.

• 16-битный программируемый прескалер, позволяющий делить частоту тактов, подаваемую на счетчик, на любой коэффициент в диапазоне от 1 до 65536.

• До 4 независимых каналов, выполняющих функции:

   – Input Capture.
   – Output Compare.
   – Генерация PWM (ШИМ), в режимах Edge и Center-aligned.
   – Режим вывода одиночного импульса (One-pulse mode output).

• Комплементарные выходы с программируемым мертвым временем.

• Схема синхронизации для управления таймера внешними сигналами, и для соединения таймеров друг с другом.

• Счетчик повторений для обновления регистров таймера только после заданного количества циклов счетчика.

• Вход остановки (Break input) для перевода выходных сигналов таймера в состояние сброса или в известное заранее состояние.

• Генерация прерывания/DMA по следующим событиям:

   – Update: переполнение/недогрузка (overflow/underflow) счетчика, инициализация счетчика (программой или от внутреннего/внешнего триггера).
   – Событие триггера: запуск, остановка счета, инициализация или счет от внутреннего/внешнего триггера.
   – Input capture (захват длительности входного сигнала).
   – Output compare (вывод сигнала в моменты совпадения значения счетчика).
   – Break input (вход остановки).

• Поддерживается инкрементальный (квадратурный) энкодер и сенсор Холла для целей определения позиции.

• Вход триггера для внешних тактов или поциклового управления током.

STM32F4xx TIM1 TIM8 block diagram fig86

Рис. 86. Блок-схема продвинутых таймеров TIM1 и TIM8.

[Функциональное описание TIM1 и TIM8]

Блок базы времени. 16-битный счетчик с возможностью автозагрузки составляет основу программируемого продвинутого таймера. Этот счетчик может считать вверх, вниз и в обоих этих направлениях. Частота тактов счетчика может быть поделена прескалером.

Счетчик, регистр автозагрузки и регистр прескалера можно записать из программы. Это возможно даже тогда, когда счетчик работает.

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

• Регистр счетчика (TIMx_CNT).
• Регистр прескалера (TIMx_PSC).
• Регистр автозагрузки (TIMx_ARR).
• Регистр счетчика повторений (TIMx_RCR).

Операция записи или чтения регистра TIMx_ARR осуществляет доступ к регистру предзагрузки. Содержимое регистра предзагрузки перемещается в теневой регистр перманентно или по каждому событию обновления (update event, UEV), в зависимости бита разрешения автозагрузки (auto-reload preload enable, ARPE) в регистре управления TIMx_CR1. Событие обновление посылается, когда счетчик переполняется (overflow) при счете вверх или недогружается (underflow) при счете вниз, и если бит UDIS в регистре TIMx_CR1 равен 0. Событие также можно генерировать программно, генерация события обновления подробно описана для каждой конфигурации таймера.

Счетчик тактируется от выхода прескалера CK_CNT, который разрешается только если установлен бит CEN в регистре TIMx_CR1 (см. также описание контроллера подчиненного режима, где приведено больше информации по разрешению работы счетчика).

Имейте в виду, что счетчик начинает считать через 1 такт после установки бита CEN в регистре TIMx_CR1.

Прескалер. Это делитель тактов на входе счетчика, который может делить частоту тактирования на любой коэффициент в диапазоне от 1 до 65536. Прескалер основан на 16-битном счетчике, управляемом через 16-битный регистр (TIMx_PSC). Его можно поменять на лету, поскольку этот регистр управления буферизируется. Новый коэффициент прескалера вступит в действие на следующем событии обновления.

Рис. 87 и 88 дают примеры поведения счетчика, когда коэффициент прескалера изменен на лету:

STM32F4xx TIM1 TIM8 prescaler division change 1 to 2 diagram fig87

Рис. 87. Диаграмма работы счетчика, когда коэффициент деления прескалера меняется с 1 на 2.

STM32F4xx TIM1 TIM8 prescaler division change 1 to 4 diagram fig88

Рис. 88. Диаграмма работы счетчика, когда коэффициент деления прескалера меняется с 1 на 4.

[Режимы счетчика]

Счет вверх. В этом режиме счетчик считает от 0 до значения автозагрузки (которое находится в регистре TIMx_ARR), затем снова начинает счет с 0, и генерирует событие переполнения (overflow event).

Если используется счетчик повторений, то событие обновления (UEV) генерируется после того, как пройдет заданное количество циклов переполнения. Количество повторений программируется, и равно содержимому регистра повторений плюс 1 (TIMx_RCR+1). Иначе событие UEV генерируется при каждом переполнении счетчика.

Установка бита UG в регистре TIMx_EGR (кодом программы или использованием контролера подчиненного режима, slave mode controller) также вызовет генерацию события обновления.

Событие обновления UEV можно запретить в коде программы путем установки бита UDIS в регистре TIMx_CR1. Это также приведет к прекращению обновления теневых регистров, когда записываются новые значения в регистры предварительной загрузки (preload registers). Тогда событие обновления не произойдет, пока не будет сброшен в 0 бит UDIS. Однако счетчик перезапускается от 0, как и счетчик прескалера (но коэффициент прескалера не меняется). Дополнительно, если установлен бит URS (Update Request Selection) в регистре TIMx_CR1, установка бита UG сгенерирует событие обновления UEV без установки флага UIF (т. е. не произойдет прерывания или не будет отправлен запрос DMA). Это сделано, чтобы избежать генерации обоих прерываний обновления и захвата, когда очищается счетчик при событии захвата.

Когда происходит событие обновления, все регистры обновляются, и установится флаг обновления (бит UIF в регистре TIMx_SR) в зависимости от бита URS:

• Счетчик повторений перезагружается содержимым регистра TIMx_RCR.
• Теневой регистр автозагрузки обновляется значением предзагрузки (TIMx_ARR).
• Буфер прескалера перезагружается значением предзагрузки (содержимое регистра TIMx_PSC).

Рисунки в следующей врезке показывают некоторые примеры поведения счетчика для различных тактовых частот, когда TIMx_ARR=0x36.

STM32F4xx TIM1 TIM8 counter diagram internal clock divided by1 fig89

Рис. 89. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 1.

STM32F4xx TIM1 TIM8 counter diagram internal clock divided by2 fig90

Рис. 90. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 2.

STM32F4xx TIM1 TIM8 counter diagram internal clock divided by4 fig91

Рис. 91. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 4.

STM32F4xx TIM1 TIM8 counter diagram internal clock divided byN fig92

Рис. 92. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент N.

STM32F4xx TIM1 TIM8 counter diagram UEV when ARPE0 fig93

Рис. 93. Диаграмма работы счетчика, событие обновления, когда ARPE=0 (TIMx_ARR не предзагружается).

STM32F4xx TIM1 TIM8 counter diagram UEV when ARPE1 fig94

Рис. 94. Диаграмма работы счетчика, событие обновления, когда ARPE=1 (TIMx_ARR предзагружается).

Счет вниз. В этом режиме счетчик считает от значения автозагрузки (содержимого TIMx_ARR) вниз до 0, затем перезапускается со значения автозагрузки, и генерируется событие "недогрузки" (underflow event).

Если используется счетчик повторений, генерируется событие обновления (UEV) после того, как пройдет заданное количество циклов underflow event. Количество повторений программируется, и равно содержимому регистра повторений плюс 1 (TIMx_RCR+1). Иначе событие UEV генерируется при каждом underflow event.

Установка бита UG в регистре TIMx_EGR (кодом программы или использованием контролера подчиненного режима, slave mode controller) также вызовет генерацию события обновления.

Событие обновления UEV можно запретить в коде программы путем установки бита UDIS в регистре TIMx_CR1. Это также приведет к прекращению обновления теневых регистров, когда записываются новые значения в регистры предварительной загрузки (preload registers). Тогда событие обновления не произойдет, пока не будет сброшен в 0 бит UDIS. Однако счетчик перезапускается от текущего значения автозагрузки, а счетчик прескалера перезапускается от 0 (но коэффициент прескалера не меняется). Дополнительно, если установлен бит URS (Update Request Selection) в регистре TIMx_CR1, установка бита UG сгенерирует событие обновления UEV без установки флага UIF (т. е. не произойдет прерывания или не будет отправлен запрос DMA). Это сделано, чтобы избежать генерации обоих прерываний обновления и захвата, когда очищается счетчик при событии захвата.

Когда происходит событие обновления, все регистры обновляются, и установится флаг обновления (бит UIF в регистре TIMx_SR) в зависимости от бита URS:

• Счетчик повторений перезагружается содержимым регистра TIMx_RCR.
• Буфер прескалера перезагружается значением предзагрузки (содержимое регистра TIMx_PSC).
• Активный регистр автозагрузки обновляется значением предзагрузки (TIMx_ARR). Обратите внимание, что значение автозагрузки обновляется перед перезагрузкой счетчика, чтобы следующий период был ожидаемым.

Рисунки в следующей врезке показывают некоторые примеры поведения счетчика для различных тактовых частот, когда TIMx_ARR=0x36.

STM32F4xx TIM1 TIM8 counter timing internal clock divided by1 fig95

Рис. 95. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 1.

STM32F4xx TIM1 TIM8 counter timing internal clock divided by2 fig96

Рис. 96. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 2.

STM32F4xx TIM1 TIM8 counter timing internal clock divided by4 fig97

Рис. 97. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 4.

STM32F4xx TIM1 TIM8 counter timing internal clock divided byN fig98

Рис. 98. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент N.

STM32F4xx TIM1 TIM8 counter timing update event repetition counter not used fig99

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

Режим счета с выравниванием по центру (счет вверх/вниз). Этот режим называется center-aligned, в нем счетчик начинает счет вверх от 0 до значения автозагрузки (содержимое регистра TIMx_ARR – 1), генерирует событие переполнения (overflow event), и затем считает вниз от значения автозагрузки до 1 и генерирует событие "недогрузки" (underflow event). Затем счетчик снова перезапускается с 0, и цикл повторяется.

Center-aligned активен, когда биты CMS в регистре TIMx_CR1 не равны 00. Флаг прерывания Output Compare каналов, сконфигурированных на вывод, установится в следующем случае: счетчик считает вниз (режим 1 center-aligned, CMS=01), счетчик считает вверх (режим 2 center-aligned, CMS=10), счетчик считает вверх и вниз (режим 3 center-aligned, CMS=11).

В этом режиме нельзя записать бит направления DIR регистра TIMx_CR1. Он обновляется аппаратно, и показывает текущее направление счета.

Сгенерируется событие обновления на каждом overflow и каждом underflow счетчика, или путем установки бита UG в регистре TIMx_EGR (из кода программы или использованием контроллера подчиненного режима). При установке бита UG счетчик перезапускает счет с 0, и также сбрасывается счетчик прескалера.

Событие обновления UEV можно запретить программой путем установки бита UDIS в регистре TIMx_CR1. Это нужно для того, чтобы избежать обновления теневых регистров, когда записываются новые значения в регистры предзагрузки. Тогда не произойдет событие обновления, пока в бит UDIS не будет записан 0. Однако счетчик продолжит считать вверх и вниз, основываясь на своем значении автозагрузки.

Дополнительно, если установится бит URS (Update Request Selection) в регистре TIMx_CR1, установка бита UG генерирует событие обновления UEV, однако без установки флага UIF (так что не будет прерывания или отправки запроса DMA). Это нужно, чтобы избежать генерации как прерывания обновления, так и прерывания захвата, когда очищается счетчик или происходит событие захвата.

Когда происходит событие обновления, все триггеры обновятся и установится флаг обновления (бит UIF в регистре TIMx_SR), в зависимости от бита URS:

• Счетчик повторений перезагрузится содержимым регистра TIMx_RCR.
• Буфер прескалера перезагружается значением предзагрузки (содержимое регистра TIMx_PSC).
• Активный регистр автозагрузки обновится значением предзагрузки (содержимое регистра TIMx_ARR). Обратите внимание, что если источник обновления это переполнение счетчика, то автозагрузка обновится после того, как заново загрузится счетчик, чтобы следующий период был ожидаемым (счетчик загружен новым значением).

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

STM32F4xx TIM1 TIM8 counter timing internal clock divided by1 TIMx ARR6 fig100

Рис. 100. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 1, TIMx_ARR = 0x6.

Примечание: здесь используется режим 1 center-aligned (для дополнительной информации см. оисание регистров).

STM32F4xx TIM1 TIM8 counter timing internal clock divided by2 fig101

Рис. 101. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 2.

STM32F4xx TIM1 TIM8 counter timing internal clock divided by4 TIMx ARRx36 fig102

Рис. 102. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент 4, TIMx_ARR=0x36.

Примечание: режим 2 или 3 center-aligned используется при переполнении вместе с UIF.

STM32F4xx TIM1 TIM8 counter timing internal clock divided byN fig103

Рис. 103. Диаграмма работы счетчика, когда внутренние такты делятся на коэффициент N.

STM32F4xx TIM1 TIM8 counter timing update event ARPE1 counter underflow fig104

Рис. 104. Диаграмма работы счетчика, событие обновления с ARPE=1 (underflow счетчика).

STM32F4xx TIM1 TIM8 counter timing update event ARPE1 counter overflow fig105

Рис. 105. Диаграмма работы счетчика, событие обновления с ARPE=1 (overflow счетчика).

Счетчик повторений. Секция "Блок базы времени" (раздел "Функциональное описание TIM1 и TIM8" в начале статьи) описывает, как генерируется событие обновления (UEV) по отношению к переполнениям/недогрузкам счетчика (overflow/underflow). Он актуально генерируется только когда счетчик повторений достиг нуля. Это может быть полезно, когда генерируются сигналы PWM.

Это означает, что данные переносятся из регистров предзагрузки в теневые регистры (регистр автозагрузки TIMx_ARR, регистр прескалера TIMx_PSC, но также и регистры TIMx_CCRx Capture/Compare в режиме сравнения) каждые N+1 переполнений или недогрузок счетчика, где N это значение в регистре счетчика повторений TIMx_RCR.

Счетчик повторений декрементируется:

• На каждом overflow счетчика, когда он считает вверх.
• На каждом underflow счетчика, когда он считает вниз.
• На каждом overflow и каждом underflow счетчика, когда он работает в режиме center-aligned. Хотя это ограничивает максимальное количество повторений 128 циклами PWM, это делает возможным обновлять скважность дважды за один период PWM. Когда обновляются регистры сравнения только один раз на период PWM в режиме center-aligned, максимальная разрешающая способность составляет 2 x Tck, из-за симметрии шаблона.

Счетчик повторений автозагружаемый; частота повторений сохраняется, как это определено значением регистра TIMx_RCR (см. рис. 106). Когда событие обновление генерируется программой (путем установки бита UG в регистре TIMx_EGR), или аппаратно контроллером подчиненного режима, то это происходит немедленно независимо от значения счетчика повторений, и счетчик повторений перезагружается содержимым регистра TIMx_RCR.

STM32F4xx TIM1 TIM8 update rate depending mode and TIMx RCR fig106

Рис. 106. Примеры характера обновления в зависимости от режима и настроек регистра TIMx_RCR.

В режиме center-aligned для нечетных значений RCR, событие обновления произойдет либо на переполнении (overflow), либо на недогрузке (underflow), в зависимости от того, когда был записан регистр RCR, и когда был запущен счетчик. Если RCR был записан перед запуском счетчика, то событие UEV произойдет на переполнении. Если RCR был записан после запуска счетчика, то событие UEV произойдет на недогрузке. Например, для RCR=3, UEV генерируется на каждом четвертом переполнении или недогрузке, в зависимости от того, когда было записано поле бит RCR.

[Выбор тактов]

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

• Внутренние такты (CK_INT).
• Режим 1 внешнего тактирования, когда такты подаются на внешний вход.
• Режим 2 внешнего тактирования, когда такты подаются на вход внешнего триггера ETR.
• Внутренние входы триггера (ITRx): используется один таймер в качестве прескалера для другого таймера. Например, пользователь может конфигурировать таймер 1 (TIM1), чтобы он работал как прескалер для таймера 2 (TIM2). Как это работает, см. в секции "Using one timer as prescaler for another timer" в секции 18.3.15 Timer synchronization [1].

Внутреннее тактирование (CK_INT). Если контроллер подчиненного режима запрещен (SMS=000), то биты CEN, DIR (в регистре TIMx_CR1) и UG (в регистре TIMx_EGR) работают как биты управления, и их можно поменять только из кода программы (кроме бита UG, который все равно очищается автоматически). Как только бит CEN был записан в 1, прескалер тактируется внутренними тактами CK_INT.

Рис. 107 показывает поведение схемы управления и счета вверх в нормальном режиме, без прескалера.

STM32F4xx TIM1 TIM8 control circuit normal mode internal clock divided by1 fig107

Рис. 107. Работа схемы управления в нормальном режиме, внутренняя частота тактов делится на коэффициент 1.

Режим 1 внешнего тактирования. Этот режим выбирается, когда SMS=111 в регистре TIMx_SMCR. Счетчик может считать каждый фронт или спад на выбранном входе.

STM32F4xx TIM1 TIM8 TI2 external clock connection example fig108

Рис. 108. Пример подключения внешних тактов на входе TI2.

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

1. Сконфигурируйте канал 2 для детектирования фронта на входе TI2 записью CC2S = 01 в регистре TIMx_CCMR1.
2. Сконфигурируйте длительность входного фильтра записью бит IC2F[3:0] в регистре TIMx_CCMR1 (если фильтр не нужен, то оставьте IC2F = 0000).
3. Выберите полярность нарастания уровня битами CC2P=0 и CC2NP=0 в регистре TIMx_CCER.
4. Сконфигурируйте таймер в режиме 1 внешнего тактирования записью SMS=111 в регистр TIMx_SMCR.
5. Выберите TI2 в качестве источника входа триггера записью TS=110 в регистре TIMx_SMCR.
6. Разрешите счетчик записью CEN=1 в регистре TIMx_CR1.

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

Когда произойдет фронт нарастания уровня на TI2, счетчик прокрутит свой цикл счета один раз, и установится флаг TIF. Есть задержка между фронтом на TI2 и актуальными тактами счетчика из-за схемы ресинхронизации на входе TI2.

STM32F4xx TIM1 TIM8 control circuit in external clock mode1 fig109

Рис. 109. Схема управления в режиме 1 внешнего тактирования.

Режим 2 внешнего тактирования. Этот режим выбирается записью ECE=1 в регистре TIMx_SMCR. Счетчик может считать по каждому перепаду нарастания или спада уровня на внешнем входе триггера ETR. Рис. 110 дает обзор блока входа внешнего триггера.

STM32F4xx TIM1 TIM8 external trigger input block fig110

Рис. 110. Блок входа внешнего триггера.

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

1. Поскольку в этом примере фильтр не нужен, запишите ETF[3:0]=0000 в регистр TIMx_SMCR.
2. Установите прескалер записью ETPS[1:0]=01 в регистре TIMx_SMCR.
3. Выберите детектирование фронта нарастания уровня на выводе ETR записью ETP=0 в регистре TIMx_SMCR.
4. Разрешите режим 2 внешнего тактирования записью ECE=1 в регистр TIMx_SMCR.
5. Разрешите счетчик записью CEN=1 в регистре TIMx_CR1.

Счетчик считает каждые 2 фронта нарастания уровня ETR. Есть задержка между фронтом на ETR и актуальными тактами счетчика из-за схемы ресинхронизации на сигнале ETRP.

STM32F4xx TIM1 TIM8 control circuit external clock mode2 fig111

Рис. 111. Схема управления в режиме 2 внешнего тактирования.

Каждый канал Capture/Compare построен вокруг регистра Capture/Compare (включая теневой регистр), каскада входа для захвата (с цифровым фильтром, мультиплексированием и прескалером) и каскада выхода (с компаратором и управлением выходом).

Рисунки от 112 до 115 дают обзор одного канала Capture/Compare.

Входной каскад оцифровывает соответствующий вход TIx для генерации отфильтрованного сигнала TIxF. Затем детектор перепада с выбираемой полярностью генерирует сигнал (TIxFPx), который можно использовать как вход триггера для контроллера подчиненного режима или как команда захвата значения счетчика. Он проходит через прескалер перед регистром захвата (ICxPS).

STM32F4xx TIM1 TIM8 capture compare channel example channel1 input stage fig112

Рис. 112. Канал Capture/Compare (пример: входной каскад канала 1).

Выходной каскад генерирует промежуточный сигнал, который используется как опорный: OCxRef (с активным уровнем лог. 1). Полярность действует в конце цепочки.

STM32F4xx TIM1 TIM8 capture compare channel1 main circuit fig113

Рис. 113. Основная схема совпадения канала 1 Capture/Compare.

STM32F4xx TIM1 TIM8 output stage capture comparel channel1 to 3 fig114

Рис. 114. Выходной каскад канала Capture/Compare (каналы 1, 2 и 3).

STM32F4xx TIM1 TIM8 output stage capture comparel channel4 fig115

Рис. 115. Выходной каскад канала Capture/Compare (канал 4).

Блок Capture/Compare состоит из одного регистра предзагрузки и одного теневого регистра. Запись и чтение всегда осуществляют доступ к регистру предзагрузки.

В режиме захвата (capture mode), захваты физически делаются в теневой региcтр, который копируется в регистр предзагрузки.

В режиме сравнения (compare mode), содержимое регистра предзагрузки копируется в теневой регистр, который сравнивается со счетчиком.

[Режим захвата по входу]

В режиме Input capture регистры Capture/Compare (TIMx_CCRx) используются для защелкивания значения счетчика после детектирования изменения соответствующего сигнала ICx. Когда произошел захват, установится соответствующий флаг CCXIF (в регистре TIMx_SR) и может произойти прерывание или запрос DMA, если они разрешены. Если захват произошел, когда флаг CCxIF уже в лог. 1, то установится флаг over-capture CCxOF (регистр TIMx_SR). CCxIF может быть очищен программно записью в него 0 или путем чтения захваченных данных, сохраненных в регистре TIMx_CCRx. CCxOF очищается, когда в него записывается 0.

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

• Выберите активный вход: TIMx_CCR1 должен быть связан со входом TI1, для этого запишите в биты CC1S регистра TIMx_CCMR1 значение 01. Как только значение CC1S станет отличаться от 00, канал будет сконфигурированным на ввод, и регистр TIMx_CCR1 получит доступ только для чтения.
• Запрограммируйте необходимую длительность входного фильтра в соответствии с сигналом поступающим на таймер (путем программирования бит ICxF в регистре TIMx_CCMRx, если в качестве входа используется TIx). Представим, что при переключении уровня входной сигнал нестабилен в течение не менее 5 внутренних циклов тактов. Мы должны запрограммировать длительность фильтра на время больше, чем эти 5 периодов тактов. Мы можем подтвердить достоверность перехода уровня TI1, когда будут определены 8 соседних выборок с новым уровнем (выборки делаются на частоте fDTS). Затем записать биты IC1F в 0011 регистра TIMx_CCMR1.
• Выберите активный перепад на канале TI1 записью бит CC1P и CC1NP в лог. 0 регистра TIMx_CCER (перепад нарастания уровня).
• Запрограммируйте входной прескалер. В нашем примере мы хотим делать захват на наждом допустимом перепаде по входу, поэтому прескалер запрещаем (запишем 00 в биты IC1PS регистра TIMx_CCMR1).
• Разрешите захват из счетчика в регистр захвата установкой бита CC1E в регистре TIMx_CCER.
• Если это необходимо, разрешите соответствующий запрос прерывания установкой бита CC1IE в регистре TIMx_DIER, и/или запрос DMA установкой бита CC1DE в регистре TIMx_DIER.

Когда происходит input capture:

• Регистр TIMx_CCR1 получает значение счетчика на активном перепаде.
• Установится флаг CC1IF (флаг прерывания). Также установится CC1OF, если произошли как минимум 2 следующих друг за другом захвата, в то время как флаг CC1IF не был очищен.
• Генерируется запрос прерывания в зависимости от бита CC1IE.
• Генерируется запрос DMA в зависимости от бита CC1DE.

Чтобы обработать overcapture, рекомендуется прочитать данные перед флагом overcapture. Это нужно для избежания пропуска overcapture, что могло бы произойти после чтения флага и перед чтением данных.

Примечание: прерывание IC и/или запросы DMA могут генерироваться программой путем установки соответствующего бита в регистре TIMx_EGR.

[Режим ввода PWM]

Этот режим является частным случаем режима input capture. Процедура та же самая, кроме:

• Два сигнала ICx отображаются на один и тот же вход TIx.
• Эти 2 сигнала ICx активны на перепадах с противоположной полярностью.
• Один из двух сигналов TIxFP выбран как триггер входа, и контроллер подчиненного режима сконфигурирован в режиме reset.

Например, пользователь может измерить период (в регистре TIMx_CCR1) и скважность (в регистре TIMx_CCR2) сигнала PWM, поступающего на TI1, используя следующую процедуру (в зависимости от частоты CK_INT и значения прескалера):

• Выберите активный вход для TIMx_CCR1: запишите 01 в биты CC1S регистра TIMx_CCMR1 (выбран TI1).
• Выберите активную полярность для TI1FP1 (используется как для захвата в TIMx_CCR1, так и для очистки счетчика): запишите 0 в биты CC1P и CC1NP (активный фронт нарастания уровня).
• Выберите активный вход для TIMx_CCR2: запишите 10 в биты CC2S регистра TIMx_CCMR1 (выбран TI1).
• Выберите активную полярность для TI1FP2 (используется как для захвата в TIMx_CCR2): запишите 1 в биты CC2P и CC2NP (активный спад уровня).
• Выберите допустимый вход триггера: запишите 101 в биты TS регистра TIMx_SMCR (выбран TI1FP1).
• Сконфигурируйте контроллер подчиненного режима в режим reset: запишите 100 в биты SMS регистра TIMx_SMCR.
• Разрешите захваты: запишите 1 в биты CC1E и CC2E регистра TIMx_CCER.

STM32F4xx TIM1 TIM8 PWM input mode timing fig116

Рис. 116. Тайминг режима ввода ШИМ (PWM input mode).

[Режим принудительного управления выходом (Forced output mode)]

В режиме вывода (биты CCxS = 00 в регистре TIMx_CCMRx) каждый сигнал output compare(OCxREF и затем OCx/OCxN) можно принудительно переключить в активный или неактивный уровень напрямую из программы, независимо от любого сравнения между регистром output compare и счетчиком.

Чтобы принудительно перевести сигнал output compare (OCXREF/OCx) в его активный уровень, пользователю просто нужно записать 101 в биты OCxM в соответствующем регистре TIMx_CCMRx. Таким способом OCXREF будет переведен в лог. 1 (у OCxREF активный уровень всегда лог. 1), и OCx получит противоположное значение к своему биту полярности CCxP.

Например: CCxP=0 (у OCx активный уровень лог. 1) => OCx будет принудительно переведен в уровень лог. 1.

Сигнал OCxREF можно принудительно перевести в лог. 0 записью 100 в биты OCxM регистра TIMx_CCMRx.

Так или иначе, сравнение между теневым регистром TIMx_CCRx и счетчиком все еще будет выполняться, и это позволяет устанавливать флаг. Соответственно может происходить прерывание и могут быть отправлены запросы DMA. Это описано ниже в секции описания режима output compare.

[Режим Output Compare]

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

Когда было определено совпадение между Capture/Compare регистром и счетчиком, функция output compare:

• Назначает соответствующей выходной ножке программируемое значение, определяемое режимом output compare (биты OCxM в регистре TIMx_CCMRx) и прлярностью выхода (бит CCxP в регистре TIMx_CCER). Выходной вывод может удерживаться на своем уровне (OCXM=000), принять активный уровень (OCxM=001), принять неактивный уровень (OCxM=010) или может переключаться в противоположное состояние (OCxM=011) при совпадении.
• Установит флаг в регистре статуса прерываний (бит CCxIF в регистре TIMx_SR).
• Сгенерирует прерывание, если установлена соответствующая маска прерывания (бит CCXIE в регистре TIMx_DIER).
• Отправит запрос DMA, если установлен соответствующий бит разрешения (бит CCxDE в регистре TIMx_DIER, бит CCDS в регистре TIMx_CR2 для выбора запроса DMA).

Регистры TIMx_CCRx могут быть запрограммированы с регистрами предзагрузки или без них, используя бит OCxPE в регистре TIMx_CCMRx.

В режиме output compare событие обновления UEV не оказывает эффекта на выходы OCxREF и OCx. Разрешающая способность по времени - изменение младшего разряда счетчика. Режим output compare также может использоваться для вывода одиночного импульса (в режиме One Pulse).

Процедура настройки:

1. Выберите способ тактирования счетчика (внутренние, внешние такты, прескалер).
2. Запишите желаемые данные в регистры TIMx_ARR и TIMx_CCRx.
3. Установите бит CCxIE, если нужно генерировать запрос прерывания.
4. Выберите режим вывода. Например:

   – запишите OCxM = 011 для переключения выхода OCx в противоположное состояние, когда CNT совпадает с CCRx.
   – запишите OCxPE = 0 для запрета регистра предзагрузки.
   – запишите CCxP = 0 для выбора активной полярности высокого уровня.
   – запишите CCxE = 1 для разрешения выхода.

5. Разрешите счетчик установкой бита CEN в регистре TIMx_CR1.

Регистр TIMx_CCRx register может быть обновлен в любой момент из кода программы для управления формой сигнала на выходе, когда регистр предзагрузки не разрешен (OCxPE=0, иначе теневой регистр TIMx_CCRx обновится только на следующем событии обновления UEV). Пример показан на рис. 117.

STM32F4xx TIM1 TIM8 output compare mode toggle on OC1 fig117

Рис. 117. Режим Output Compare, переключение выхода на OC1.

Режим широтно-импульсной модуляции (ШИМ, английский термин Pulse Width Modulation, PWM) позволяет генерировать сигнал с частотой, определяемой значением регистра TIMx_ARR и скважностью, определяемой значением регистра TIMx_CCRx.

Режим PWM может быть выбран независимо на каждом канале (один сигнал PWM на выход OCx) путем записи 110 (PWM mode 1) или 111 (PWM mode 2) в биты OCxM регистра TIMx_CCMRx. Должен быть разрешен соответствующий регистр предзагрузки путем установки бита OCxPE в регистре TIMx_CCMRx, и в конечном счете регистр предзагрузки автозагрузки (в режимах счета вверх или режиме счета в обе стороны, с выравниванием по центру) путем установки бита ARPE в регистре TIMx_CR1. Поскольку регистры предзагрузки передаются в теневые регистры только на событии обновления, перед запуском счетчика пользователь должен инициализировать все регистры установкой бита UG в регистре TIMx_EGR.

Полярность OCx программируется битом CCxP в регистре TIMx_CCER. Полярность можно запрограммировать как активный лог. 1 или активный лог. 0. Выход OCx разрешается комбинацией бит CCxE, CCxNE, MOE, OSSI и OSSR (в регистрах TIMx_CCER и TIMx_BDTR). См. описание регистра TIMx_CCER для дополнительной информации.

В режиме PWM (1 или 2), TIMx_CNT и TIMx_CCRx всегда сравниваются для определения, выполняется ли условие TIMx_CCRx ≤ TIMx_CNT или TIMx_CNT ≤ TIMx_CCRx (в зависимости от направления счета).

Таймер может генерировать PWM в режиме edge-aligned или center-aligned, в зависимости от бит CMS в регистре TIMx_CR1.

[Режим PWM edge-aligned]

Конфигурация счета вверх. Счет вверх активируется, когда в регистре TIMx_CR1 бит DIR равен 0. См. режим счета вверх (раздел "Режимы счетчика").

В следующем примере мы рассматриваем PWM mode 1. Опорный PWM-сигнал OCxREF находится в лог. 1, пока TIMx_CNT < TIMx_CCRx, иначе OCxREF становится в лог. 0. Если значение сравнения в TIMx_CCRx больше, чем значение автозагрузки (в TIMx_ARR), то OCxREF удерживается в 1. Если значение сравнения 0, то OCxRef удерживается в 0. Рис. 118 показывает некоторые формы сигнала edge-aligned PWM, где TIMx_ARR=8.

STM32F4xx TIM1 TIM8 edge aligned PWM waveforms ARR8 fig118

Рис. 118. Сигналы Edge-aligned PWM (ARR=8).

Конфигурация счета вниз. Счет вниз активируется, когда в регистре TIMx_CR1 бит DIR равен 1. См. режим счета вниз (см. раздел "Режимы счетчика").

В PWM mode 1 опорный сигнал OCxRef находится в лог. 0, пока TIMx_CNT > TIMx_CCRx иначе он становится в лог. 1. Если значение сравнения в TIMx_CCRx больше, чем значение автозагрузки в TIMx_ARR, то OCxREF удерживается в 1. В этом режиме 0% PWM невозможен.

[Режим PWM center-aligned]

Режим с выравниванием по центру активен, когда биты CMS в регистре TIMx_CR1 отличаются от 00 (все оставшиеся конфигурации имеют одинаковый эффект на сигналах OCxRef/OCx). Флаг сравнения установится, когда счетчик считает вверх, когда он считает вниз или когда он считает вверх и вниз в зависимости от конфигурации бит CMS. Бит направления (DIR) в регистре TIMx_CR1 обновляется аппаратно, и не должен изменяться программой. См. выше "Режим счета с выравниванием по центру (счет вверх/вниз)".

Рис. 119 показывает некоторые выровненные по центру формы сигнала center-aligned PWM для примера, в котором:

• TIMx_ARR=8.
• PWM mode 1.
• Установится флаг, когда счетчик считает вниз, в соответствии с режимом center-aligned 1, выбранным для CMS=01 в регистре TIMx_CR1.

STM32F4xx TIM1 TIM8 center aligned PWM waveforms ARR8 fig119

Рис. 119. Формы сигнала Center-aligned PWM (ARR=8).

Советы по использованию режима center-aligned:

• Когда запускается режим center-aligned, используется текущая конфигурация вверх-вниз. Это означает, что счетчик считает вверх, или вниз, в зависимости от значения, записанного в бит DIR регистра TIMx_CR1. Кроме того, биты DIR и CMS не должны меняться программой одновременно.

• Запись в счетчик, когда он работает в режиме center-aligned, не рекомендуется, поскольку это может привести к непредсказуемым результатам. В частности:

   – Направление не обновляется, если пользователь записывает значение в счетчик, большее значения автозагрузки (TIMx_CNT > TIMx_ARR). Например, если счетчик считает вверх, то он продолжит счет вверх.
   – Направление обновится, если пользователь запишет 0 или запишет значение TIMx_ARR в счетчик, однако не генерируется событие обновления UEV.

• Самый безопасный способ использовать режим center-aligned, это генерировать обновление программно (установкой бита UG в регистре TIMx_EGR) сразу перед запуском счетчика, и не записывать в счетчик, когда он работает.

[Комплементарные выходы и вставка мертвого времени]

Таймеры с продвинутым управлением (TIM1 и TIM8) могут выводить 2 комплементарных сигнала, и управлять моментами их включения и выключения выходов. Это позволяет аппаратно реализовать управление силовым транзисторным мостом.

Время, когда оба плеча силового моста выключены для устранения сквозных токов, обычно называют "мертвое время", dead-time. Это время должно подстраиваться в зависимости от подключенных к выходам внешних устройств и от их характеристик (внутренние задержки согласователей уровней, задержки из-за времени выключения силовых транзисторов и т. д.).

Пользователь может выбрать полярность выходов (основной выход OCx или комплементарный OCxN) независимо для каждого выхода. Это осуществляется записью бит CCxP и CCxNP в регистре TIMx_CCER.

Комплементарные сигналы OCx и OCxN активизируются комбинацией нескольких бит управления: биты CCxE и CCxNE регистра TIMx_CCER и биты MOE, OISx, OISxN, OSSI и OSSR в регистрах TIMx_BDTR и TIMx_CR2. Для дополнительной информации см. таблицу 95 в описании регистра TIMx_CCER. В частности, мертвое время активируется, когда происходит переключение в состояние ожидания IDLE (MOE падает вниз к 0).

Вставка мертвого времени разрешается установкой обоих бит CCxE и CCxNE, и бита MOE, если присутствует схема break. Биты DTG[7:0] регистра TIMx_BDTR используются для управления генерацией мертвого времени на всех каналах. От опорного сигнала OCxREF генерируются 2 выхода OCx и OCxN. Если OCx и OCxN имеют активный уровень лог. 1:

• Выходной сигнал OCx такой же, как и опорный, кроме фронта нарастания, который задерживается относительно фронта нарастания опорного сигнала.
• Выходной сигнал OCxN имеет противоположную к опорному сигналу полярность, кроме фронта нарастания уровня, который задерживается относительно спада уровня опорного сигнала.

Если эта задержка больше, чем ширина импульса активного выхода (OCx или OCxN), то соответствующий импульс не генерируется.

Следующие рисунки показывают взаимосвязь между выходными сигналами генератора мертвого времени и опорным сигналом OCxREF (в этих примерах предполагается, что CCxP=0, CCxNP=0, MOE=1, CCxE=1 и CCxNE=1).

STM32F4xx TIM1 TIM8 complementary output with dead time insertion fig120

Рис. 120. Комплементарный выход со вставкой мертвого времени.

STM32F4xx TIM1 TIM8 dead time waveforms with delay greater than negative pulse fig121

Рис. 121. Формы сигнала мертвого времени с задержкой, большей чем отрицательный импульс.

STM32F4xx TIM1 TIM8 dead time waveforms with delay greater than positive pulse fig122

Рис. 122. Формы сигнала мертвого времени с задержкой, большей чем положительный импульс.

Задержка мертвого времени одинаковая для каждого канала, и это программируется битами DTG в регистре TIMx_BDTR. Для вычисления задержки см. описание регистра TIMx_BDTR.

Перенаправление OCxREF на OCx или OCxN. В режиме вывода (forced, output compare или PWM), OCxREF может быть перенаправлен на выход OCx или выход OCxN конфигурированием бит CCxE и CCxNE в регистре TIMx_CCER.

Это дает возможность пользователю посылать специфичные формы сигнала (такие как PWM или статический активный уровень) на один выход, в то время как комплементарные выходы остаются в своем неактивном уровне. Другие возможности заключаются в том, чтобы оба выхода находились на неактивном уровне, или оба выхода были активными и дополнялись мертвым временем.

Примечание: когда разрешен только OCxN (CCxE=0, CCxNE=1), он не комплементен и становится активным как только OCxREF становится в лог. 1. Например, если CCxNP = 0, то OCxN = OCxRef. С другой стороны, когда разрешены оба OCx и OCxN (CCxE = CCxNE = 1) OCx становится активным, когда OCxREF в лог. 1, в то время как OCxN комплементарен, и становится активным, когда OCxREF в лог. 0.

Когда используется функция break, сигналы разрешения выхода и не активные уровни модифицируются в соответствии с дополнительными битами управления (биты MOE, OSSI и OSSR регистра TIMx_BDTR, биты OISx и OISxN регистра TIMx_CR2). В любом случае выходы OCx и OCxN не могут быть оба установлены в активный уровень в данный момент времени. Для дополнительной информации см. таблицу 95 в описании регистра TIMx_CCER.

Источником сигнала break может быть либо входная ножка корпуса микроконтроллера, либо событие отказа системы тактирования (clock failure event), генерируемое блоком Clock Security System (CSS) от контроллера сброса тактов. Для дополнительной информации по CSS обратитесь к секции 7.2.7: Clock security system даташита [1].

Когда происходит выход из сброса, схема break запрещена, и бит MOE находится в лог. 0. Пользователь может разрешить функцию break установкой бита BKE в регистре TIMx_BDTR. Полярность входа break может быть выбрана конфигурированием бита BKP в том же регистре. Биты BKE и BKP можно модифицировать одновременно. Когда записаны биты BKE и BKP, применяется задержка в 1 период тактов шины APB перед тем, как запись вступит в действие. Следовательно, необходимо подождать 1 период тактов APB, чтобы корректно прочитать бит после операции его записи.

Из-за того, что спад MOE может быть асинхронным, вставляется схема ресинхронизации между реальным сигналом (действующим на выходах) и синхронным битом управления (доступным в регистре TIMx_BDTR). В результате получаются некоторые задержки между асинхронными и синхронными сигналами. В частности, если бит MOE записан в 1 в то время, как он был в 0, должна быть вставлена задержка (dummy-инструкция) перед тем, как бит может быть корректно прочитан. Причина в том, что пользователь записывает асинхронный сигнал, но считывает синхронный сигнал.

Когда происходит break (выбранный уровень на входе break):

• Бит MOE очищается асинхронно, переводя выходы в неактивное состояние, состояние ожидания (idle) или в состояние сброса (выбирается битом OSSI). Эта функция работает, даже если генератор MCU выключен.
• Каждый выходной канал выдает уровень, запрограммированный битом OISx в регистре TIMx_CR2, как только MOE=0. Если OSSI=0, то таймер освобождает разрешение выхода, иначе выход остается в высоком уровне.
• Когда используются комплементарные выходы:

   – Выходы сначала переводятся при сбросе в неактивное состояние (в зависимости от полярности). Это делается асинхронно, так что работает, даже если для таймера не предоставляются такты.
   – Если такты таймера все еще присутствуют, то генератор мертвого времени реактивируется, чтобы выходы формировали уровень, запрограммированный в битах OISx и OISxN, после мертвого времени. Даже в этом случае OCx и OCxN не могут выдать активный уровень совместно. Обратите внимание, что из-за ресинхронизации на MOE длительность dead-time слегка дольше, чем обычно (на примерно 2 периода такта ck_tim).
   – Если OSSI=0, то таймер освобождает разрешение выходов, иначе разрешение выходов сохраняется или становится на высокий уровень, как только один из бит CCxE или CCxNE на высоком уровне.

• Установится флаг статуса break (бит BIF в регистре TIMx_SR). Может быть сгенерировано прерывание, если установлен бит BIE в регистре TIMx_DIER. Может быть отправлен запрос DMA, если установлен бит BDE в регистре TIMx_DIER.
• Если установлен бит AOE в регистре TIMx_BDTR, бит MOE снова автоматически установится на следующем событии обновления UEV. Это может использоваться, например, для выполнения регулирования. Иначе MOE останется в лог. 0, пока не будет снова записан в 1. В этом случае, он может использоваться для безопасности, и вход break может быть подключен к сигналу тревоги от мощных драйверов, датчиков температуры или любых компонентов безопасности.

Примечание: входы break действуют по уровню. Таким образом, MOE не может быть установлен, пока активен входной сигнал break (ни автоматически, ни программно). Между тем флаг статуса BIF не может быть очищен.

Сигнал break может генерироваться входом BRK, у которого программируемая полярность и бит разрешения BKE в регистре TIMx_BDTR.

Вот 2 решения для генерации break:

• Использованием входа BRK с программируемой полярностью и битом разрешения BKE в регистре TIMx_BDTR.
• Программно через бит BG в регистре TIMx_EGR.

В дополнение ко входу break и управлению выходом реализована защита от записи внутри схемы break, чтобы защитить приложение. Это позволяет заморозить конфигурацию нескольких параметров (длительность мертвого времени, полярности OCx/OCxN и запрещенное состояние, конфигурации OCxM, разрешение break и его полярность). Пользователь может выбрать один из трех уровней защиты битами LOCK в регистре TIMx_BDTR, см. описание регистра TIMx_BDTR. Биты LOCK могут быть записаны после сброса только 1 раз.

Рис. 123 показывает пример поведения выходов в ответ на сигнал break.

STM32F4xx TIM1 TIM8 output behavior in response to break fig123

Рис. 123. Поведение выхода в ответ на break.

Сигнал OCxREF для определенного канала можно перевести в 0 путем подачи высокого уровня на вход ETRF (бит разрешения OCxCE соответствующего регистра TIMx_CCMRx установлен в 1). Сигнал OCxREF остается в лог. 0, пока не произойдет следующее событие обновления UEV.

Эта функция может использоваться только в режимах output compare и PWM, и она не работает в режиме forced.

Например, сигнал ETR может быть подключен к выходу компаратора, чтобы реагировать на протекающий ток. В этом случае ETR должен быть сконфигурирован следующим образом:

1. Прескалер внешнего триггера должен быть выключен: биты ETPS[1:0] регистра TIMx_SMCR должны быть установлены в 00.
2. Должен быть запрещен режим внешнего тактирования 2: бит ECE регистра TIMx_SMCR должен быть установлен в 0.
3. Полярность внешнего триггера ETP и фильтр внешнего триггера ETF могут быть сконфигурированы в соответствии с целями пользователя.

Рис. 124 показывает поведение сигнала OCxREF, когда вход ETRF становится в лог. 1 для обоих значений бита разрешения OCxCE. В этом примере таймер TIMx запрограммирован в режиме PWM.

STM32F4xx TIM1 TIM8 clearing TIMx OCxREF fig124

Рис. 124. Очистка TIMx OCxREF.

Примечание: в случае PWM со скважностью 100% (если CCRx > ARR), то OCxREF разрешается снова на следующем переполнении счетчика.

Когда на канале используются комплементарные выходы, биты предзагрузки доступны на битах OCxM, CCxE и CCxNE. Биты предзагрузки передаются в теневые биты на событии коммутации COM. Таким образом, пользователь может заранее запрограммировать конфигурацию для следующего шага и изменить конфигурацию всех каналов одновременно. Событие COM может генерироваться программно установкой бита COM в регистре TIMx_EGR, или аппаратно (по фронту нарастания уровня TRGI).

Флаг установится, когда произойдет событие COM (бит COMIF в регистре TIMx_SR), что может генерировать прерывание (если установлен бит COMIE в регистре TIMx_DIER) или запрос DMA (если установлен бит COMDE в регистре TIMx_DIER).

Рис. 125 описывает поведение выходов OCx и OCxN, когда происходит событие COM, в трех разных примерах запрограммированных конфигураций.

STM32F4xx TIM1 TIM8 6 step generation COM example OSSR1 fig125

Рис. 125. 6-step генерация, пример COM (OSSR=1).

Режим одного импульса (One-pulse mode, OPM) это частный случай предыдущих режимов. Он позволяет счетчику стартовать в ответ на стимулирующий сигнал, и генерировать импульс с программируемой длиной после программируемой задержки.

Запуск счетчика может управляться через контроллер подчиненного режима. Генерация сигнала может быть в режиме output compare или PWM. Режим одного импульса выбирается установкой бита OPM в регистре TIMx_CR1. Это делает автоматической остановку счетчика на следующем событии обновления UEV.

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

• При счете вверх: CNT < CCRx ≤ ARR (в частности, 0 < CCRx).
• При счете вниз: CNT > CCRx.

STM32F4xx TIM1 TIM8 example one pulse mode fig126

Рис. 126. Пример режима одного импульса.

Например, пользователь может захотеть генерировать положительный импульс на OC1 с длительностью tPULSE и после задержки tDELAY, как только будет детектирован положительный перепад на входном выводе TI2.

При использовании TI2FP2 в качестве триггера 1:

• Отобразите TI2FP2 на TI2 записью CC2S=01 в регистре TIMx_CCMR1.
• TI2FP2 должен детектировать положительный перепад, для этого запишите CC2P=0 и CC2NP=0 в регистре TIMx_CCER.
• Сконфигурируйте TI2FP2 в качестве триггера для контроллера подчиненного режима (TRGI) записью TS=110 в регистре TIMx_SMCR.
• TI2FP2 используется для запуска счетчика путем записи SMS=110 в регистре TIMx_SMCR (режим триггера).

Форма импульса OPM определяется записью в регистры сравнения (с учетом тактовой частоты и прескалера счетчика).

• Длительность tDELAY определяется значением, записанным в регистр TIMx_CCR1.
• Длительность tPULSE определяется разностью между значением автозагрузки и значением сравнения (TIMx_ARR - TIMx_CCR1).
• Предположим, что пользователь хочет построить сигнал с переходом от 0 к 1, когда произойдет совпадение сравнения (compare match) и переход от 1 к 0, когда счетчик достигнет значения автозагрузки. Чтобы сделать это, разрешите PWM mode 2 записью OC1M=111 в регистре TIMx_CCMR1. Пользователь может опционально разрешить регистры предзагрузки записью OC1PE=1 в регистре TIMx_CCMR1 и ARPE в регистре TIMx_CR1. В этом случае значение сравнения должно быть записано в регистр TIMx_CCR1, значение автозагрузки в регистр TIMx_ARR, для генерации события обновления устанавливается бит UG, и после этого нужно ждать события внешнего триггера на TI2. Для этого примера CC1P записывается в 0.

В нашем примере биты DIR и CMS регистра TIMx_CR1 должны быть в лог. 0. Пользователю нужен только один импульс (Single mode), поэтому 1 должна быть записана в бит OPM регистра TIMx_CR1 для остановки счетчика на следующем событии обновления (когда счетчик перевалит через значение автозагрузки обратно к 0). Когда бит OPM в регистре TIMx_CR1 установлен в 0, выбирается режим повторения (Repetitive Mode).

Частный случай, быстрое разрешение OCx:

• В режиме одного импульса детектирование перепада на входе TIx установит бит CEN, который разрешает счетчик. Тогда сравнение между счетчиком и значением compare делает переключение выхода. Однако нужны несколько периодов тактов для этих операций, и это ограничивает минимальную задержку tDELAY, которую мы можем получить.
• Если пользователь хочет вывести сигнал с минимальной задержкой, то должен быть установлен бит OCxFE в регистре TIMx_CCMRx. Тогда OCxRef (и OCx) принудительно будут установлены в ответ на сигнал стимула, без обращения внимания на сравнение. Новый уровень такой же, как если бы произошло совпадение сравнения. OCxFE действует только если канал сконфигурирован в режиме PWM1 или PWM2.

Чтобы выбрать режим Encoder Interface, запишите SMS=001 в регистр TIMx_SMCR, если счетчик считает только на перепадах TI2, SMS=010 если он считает только на перепадах TI1, и SMS=011 если счетчик считает по обоим перепадам TI1 и TI2.

Выберите полярность TI1 и TI2 программированием бит CC1P и CC2P в регистре TIMx_CCER. Когда необходимо, пользователь может также запрограммировать входной фильтр. Биты CC1NP и CC2NP должны удерживаться в лог. 0.

2 входа TI1 и TI2 используются для интерфейса с инкрементальным энкодером, см. таблицу 93. Счетчик тактируется по каждому достоверному перепаду на TI1FP1 или TI2FP2 (это сигналы TI1 и TI2 после входного фильтр и выбора полярности, TI1FP1=TI1 если нет фильтра и инверсии, TI2FP2=TI2 если нет фильтра и инверсии) предполагая, что это разрешено (установлен бит CEN в регистре TIMx_CR1). Последовательность переходов уровней на этих двух входах обрабатывается и генерируются как количество импульсов, так и сигнал направления (обычно вращения). В зависимости от последовательности счетчик считает вверх или вниз, и соответственно под управлением аппаратуры меняется бит DIR в регистре TIMx_CR1. Бит DIR вычисляется на каждом перепаде на любом из входов (TI1 или TI2), независимо от того, считает ли счетчик только импульсы TI1, только импульсы TI2 или же импульсы на обоих входах TI1 и TI2.

Интерфейс энкодера работает просто как внешнее тактирование с выбором направления. Это означает, что счетчик просто непрерывно считает между 0 значением автозагрузки в регистре TIMx_ARR (от 0 до ARR или от ARR до 0, в зависимости от направления). Таким образом, пользователь должен сконфигурировать TIMx_ARR перед тем, как начать работать с энкодером. Таким же самым образом будут работать, как обычно, функции захвата (capture), сравнения (compare), прескалера, счетчика повторений, выхода триггера. Режим энкодера и режим 2 внешнего тактирования не совместимы друг с другом и не должны выбираться совместно.

В режиме энкодера счетчик модифицируется автоматически, следуя скорости и направлению инкрементального энкодера, и поэтому содержимое счетчика всегда показывает позицию энкодера. Направление счета соответствует направлению вращения подключенного сенсора. Таблица 93 суммарно показывает возможные комбинации, предполагая, что TI1 и TI2 не переключаются одновременно.

Таблица 93. Направление счета в зависимости от сигналов энкодера.

Активный перепад
Уровень оппозитного сигнала
(TI1FP1 для TI2,
TI2FP2 для TI1
)
Сигнал TI1FP1
Сигнал TI2FP2
Фронт
(0→1)
Спад
(1→0)
Фронт
(0→1)
Спад
(1→0)
Счет только на TI1 лог. 1 Вниз Вверх Нет счета Нет счета
лог. 0 Вверх Вниз Нет счета Нет счета
Счет только на TI2 лог. 1 Нет счета Нет счета Вверх Вниз
лог. 0 Нет счета Нет счета Вниз Вверх
Счет и на TI1,
и на T2
лог. 1 Вниз Вверх Вверх Вниз
лог. 0 Вверх Вниз Вниз Вверх

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

Рис. 127 дает пример работы счетчика, показывая подсчет генерируемого сигнала счета и управление направлением. Также показано, как компенсируется джиттер, когда выбраны оба перепада сигнала. Это может происходить, если сенсор позиционируется близко к точкам переключения. Для этого примера мы подразумеваем следующую конфигурацию:

• CC1S=01 (регистр TIMx_CCMR1, TI1FP1 отображен на TI1).
• CC2S=01 (регистр TIMx_CCMR2, TI1FP2 отображен на TI2).
• CC1P=0, CC1NP=0 и IC1F = 0000 (регистр TIMx_CCER, TI1FP1 не инвертирован, TI1FP1=TI1).
• CC2P=0, CC2NP=0 и IC2F = 0000 (регистр TIMx_CCER, TI1FP2 не инвертирован, TI1FP2=TI2).
• SMS=011 (регистр TIMx_SMCR, оба входа активны по обоим перепадам - и нарастание, и спад уровня).
• CEN=1 (регистр TIMx_CR1, счетчик разрешен).

STM32F4xx TIM1 TIM8 example counter operation in encoder interface mode fig127

Рис. 127. Пример работы счетчика в режиме интерфейса энкодера.

Рис. 128 дает пример поведения счетчика, когда полярность TI1FP1 инвертирована (конфигурация та же самая, кроме CC1P=1).

STM32F4xx TIM1 TIM8 example encoder interface mode with TI1FP1 polarity inverted fig128

Рис. 128. Пример интерфейса энкодера с инвертированной полярностью TI1FP1.

Когда таймер сконфигурирован в режиме интерфейса энкодера, предоставляет информацию о текущем положении сенсора энкодера. Пользователь может получить динамическую информацию (скорость, ускорение, замедление), измеряя периоды между двумя событиями энкодера, используя второй таймер в режиме захвата. Выход энкодера, который показывает механический 0, также может использоваться для этой цели. В зависимости от времени между двумя событиями, счетчик также может считываться с регулярными интервалами. Это может быть реализовано путем защелкивания значения в третий регистр input capture, если он доступен (тогда сигнал захвата должен быть периодическим, и может генерироваться другим таймером). Когда это доступно, также можно считывать его значение через запрос DMA, генерируемый от тактов реального времени.

Бит TI1S регистра TIMx_CR2 позволяет входной фильтр канала 1 подключить к выходу элемента логики XOR (исключающее ИЛИ), комбинируя друг с другом 3 ножки входа TIMx_CH1, TIMx_CH2 и TIMx_CH3.

Вход XOR может использоваться со всеми функциями ввода таймера, такими как триггер или input capture. Пример этой функции, используемой для подключения сенсоров Холла, показан в следующей врезке "Интерфейс с датчиками Холла".

С помощью таймеров с продвинутым управлением (TIM1 или TIM8) можно генерировать сигналы PWM для управления мотором или другим таймером TIMx (TIM2, TIM3, TIM4 или TIM5), который на рисунке 129 обозначен как "интерфейсный таймер". Этот "интерфейсный таймер" захватывает сигналы трех входных ножек таймера (TIMx_CH1, TIMx_CH2 и TIMx_CH3), подключенных через логику XOR на вход TI1 канала (выбранный через настройку бита TI1S в регистре TIMx_CR2).

Контроллер подчиненного режима конфигурируется в режиме сброса (reset mode), вход подчиненного таймера это TI1F_ED. Таким образом, каждый раз, когда один из 3 входов переключается, счетчик перезапускается от 0. Это создает базу времени, которая срабатывает по любому изменению на входах Холла.

Канал 1 Capture/Compare "интерфейсного таймера" сконфигурирован в режиме захвата, сигналом захвата является TRC (см. рис. 112). Захваченное значение соответствует интервалу времени между двумя изменениями сигнала на входах, что дает информацию о скорости мотора.

"Интерфейсный таймер" может использоваться в режиме вывода для генерации импульса, который меняет конфигурацию каналов таймера с продвинутым управлением (TIM1 или TIM8) путем срабатывания события COM. Таймер TIM1 используется для генерации сигналов PWM для управления мотором. Чтобы реализовать это, интерфейсный таймер должен быть запрограммирован так, чтобы положительный импульс генерировался после запрограммированной задержки (в режиме output compare или режиме PWM). Этот импульс посылается в таймер с продвинутым управлением (TIM1 или TIM8) через выход TRGO.

Пример: пользователь хочет поменять конфигурацию PWM таймера TIM1 после запрограммированной задержки каждый раз, когда происходит изменения на входах Холла, подключенных к одному из таймеров TIMx.

• Сконфигурируйте 3 входа таймера, объединенных функцией ИЛИ для канала ввода TI1, путем установки бита TI1S в регистре TIMx_CR2.
• Запрограммируйте базу времени: запишите TIMx_ARR в максимальное значение (счетчик должен быть очищен по изменению на TI1). Установите прескалер для получения максимального периода счетчика, длиннее, чем время между двумя изменениями сигналов сенсоров.
• Запрограммируйте канал 1 в режиме захвата (выбран TRC): запишите биты CC1S=11 регистра TIMx_CCMR1. Пользователь может также запрограммировать цифровой фильтр, если это необходимо.
• Запрограммируйте канал 2 в режим PWM2 с желаемой задержкой: запишите биты OC2M=111 и CC2S=00 в регистре TIMx_CCMR1.
• Выберите OC2REF в качестве выхода триггера на TRGO: запишите биты MMS=101 в регистре TIMx_CR2.

В таймере с продвинутым управлением TIM1 должен быть выбран правильный вход ITR в качестве входного триггера, таймер программируется для генерации сигналов PWM, сигналы управления Capture/Compare предзагружаются (CCPC=1 в регистре TIMx_CR2), событие COM управляется входом триггера (CCUS=1 в регистре TIMx_CR2). Биты управления PWM (CCxE, OCxM) записываются после события COM для следующего шага (это может быть реализовано в подпрограмме прерывания, запускаемой по фронту нарастания OC2REF). Этот пример описан на рис. 129.

STM32F4xx TIM1 TIM8 example Hall sensor interface fig129

Рис. 129. Пример интерфейса сенсора Холла.

Таймер TIMx может быть синхронизирован с внешним триггером в нескольких режимах: Reset, Gated и Trigger.

[Подчиненный режим: Reset]

Счетчик и его прескалер может быть переинициализирован в ответ на на событие на входе триггера. Кроме того, если бит URS регистра TIMx_CR1 в лог. 0, генерируется событие обновления UEV. Тогда обновятся все предзагружаемые регистры (TIMx_ARR, TIMx_CCRx).

В следующем примере считающий вверх счетчик очищается в ответ на фронт нарастания уровня на входе TI1:

• Сконфигурируйте канал 1 для детектирования фронтов нарастания уровня на TI1. Сконфигурируйте задержку входного фильтра (в этом примере нам не нужен никакой фильтр, поэтому биты IC1F остаются в состоянии 0000). Прескалер захвата не используется для триггера, так что его конфигурировать не нужно. Биты CC1S выбирают только источник input capture, CC1S=01 в регистре TIMx_CCMR1. Запишите CC1P=0 и CC1NP=0 в регистре TIMx_CCER для проверки полярности (и детектирования только фронтов нарастания уровня).
• Сконфигурируйте таймер в режиме сброса записью SMS=100 в регистре TIMx_SMCR. Выберите TI1 в качестве входа путем записи TS=101 в регистре TIMx_SMCR.
• Запустите счетчик записью CEN=1 в регистре TIMx_CR1.

Счетчик начнет считать на внутренних тактах, и ведет себя нормально, пока не появится фронт нарастания уровня на TI1. Когда уровень TI1 перейдет с 0 на 1, счетчик очищается и снова запускает счет от 0. Тем временем установится флаг триггера (бит TIF в регистре TIMx_SR), и может быть выдан запрос прерывания или запрос DMA, если это разрешено (в зависимости от настройки бит TIE и TDE регистра TIMx_DIER).

На следующем рисунке показано это поведение, когда регистр автозагрузки TIMx_ARR=0x36. Есть задержка между фронтом нарастания уровня TI1 и действительным сбросом счетчика из-за схемы ресинхронизации на входе TI1.

STM32F4xx TIM1 TIM8 control circuit in reset mode fig130

Рис. 130. Схема управления в режиме Reset.

[Подчиненный режим: Gated]

Работа счетчика может быть разрешена внешним сигналом на выбранном входе. В следующем примере считающий вверх счетчик работает только тогда, когда на TI1 лог. 0:

• Сконфигурируйте канал 1 для детектирования низких уровней на TI1. Сконфигурируйте длительность входного фильтра (в этом примере нам не нужен никакой фильтр, поэтому мы сохраняем биты IC1F=0000). Прескалер захвата не используется для триггера, так что его конфигурировать не нужно. Биты CC1S выбирают только источник input capture, CC1S=01 в регистре TIMx_CCMR1. Запишите CC1P=1 и CC1NP=0 в регистре TIMx_CCER, чтобы проверить полярность (и детектировать только низкий уровень).
• Сконфигурируйте таймер в gated-режим записью SMS=101 в регистр TIMx_SMCR. Выберите TI1 в качестве входа путем записи TS=101 в регистр TIMx_SMCR.
• Разрешите счетчик записью CEN=1 в регистр TIMx_CR1 (в gated-режиме счетчик не запустится, если CEN=0, независимо от входного уровня триггера).

Счетчик начинает считать на внутренних тактах, пока TI1 в лог. 0, и останавливается, как только TI1 переходит в лог. 1. Флаг TIF в регистре TIMx_SR установится в обоих случаях, когда счетчик запускается или останавливается.

Есть задержка между фронтом нарастания уровня TI1 и реальной остановкой счетчика из-за схемы ресинхронизации на входе TI1.

STM32F4xx TIM1 TIM8 control circuit in gated mode fig131

Рис. 131. Схема управления в режиме Gated.

[Подчиненный режим: Trigger]

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

• Сконфигурируйте канал 2 для детектирования фронтов нарастания на TI2. Сконфигурируйте длительность входного фильтра (в этом примере нам не нужен никакой фильтр, поэтому мы сохраняем биты IC1F=0000). Прескалер захвата не используется для триггера, так что его конфигурировать не нужно. Биты CC2S конфигурируются для выбора только источника input capture, CC2S=01 в регистре TIMx_CCMR1. Запишите CC2P=1 и CC2NP=0 в регистре TIMx_CCER, чтобы проверить полярность (и детектировать только уровень лог. 0).
• Сконфигурируйте таймер в режиме триггера записью SMS=110 в регистре TIMx_SMCR. Выберите TI2 в качестве входного источника записью TS=110 в регистре TIMx_SMCR.

Когда на TI2 появится фронт нарастания уровня, счетчик начнет считать внутренние такты, и установится флаг TIF.

Существует задержка между фронтом нарастания на TI2 и реальным стартом счетчика из-за схемы ресинхронизации на входе TI2.

STM32F4xx TIM1 TIM8 control circuit in trigger mode fig132

Рис. 132. Схема управления в режиме Trigger.

[Подчиненный режим: режим 2 внешнего тактирования + режим Trigger]

Режим 2 внешнего тактирования можно использовать в дополнение к другому подчиненному режиму (кроме режима 1 внешнего тактирования и режима энкодера). В этом случае сигнал ETR используется в качестве внешнего входа тактов, и другой вход может быть выбран как вход триггера (в режимах Reset, Gated или Trigger). Рекомендуется не выбирать ETR в качестве TRGI через биты TS регистра TIMx_SMCR.

В следующем примере счетчик вверх инкрементируется на каждом фронте нарастания уровня сигнала ETR, как только появится фронт нарастания уровня на TI1:

1. Сконфигурируйте схему внешнего триггера программированием регистра TIMx_SMCR следующим образом:

   – ETF = 0000: без фильтра.
   – ETPS = 00: прескалер запрещен.
   – ETP = 0: детектирование фронтов нарастания на ETR, и ECE=1 для разрешения режима 2 внешнего тактирования.

2. Сконфигурируйте канал 1 следующим образом, для детектирования фронтов нарастания уровня на TI:

   – IC1F=0000: без фильтра.
   – Прескалер захвата не используется для триггера, так что его конфигурировать не нужно.
   – CC1S=01 в регистре TIMx_CCMR1 для выбора только источника input capture.
   – CC1P=0 и CC1NP=0 в регистре TIMx_CCER, чтобы проверить полярность (и детектировать только фронты нарастания).

3. Сконфигурируйте таймер в режиме триггера путем записи SMS=110 в регистре TIMx_SMCR. Выберите TI1 в качестве входного источника записью TS=101 в регистр TIMx_SMCR.

Фронт нарастания уровня на TI1 разрешает счетчик и установит флаг TIF. Затем счетчик будет считать фронты на входе ETR.

Существует задержка между фронтом нарастания на сигнала ETR и реальным сбросом счетчика из-за схемы ресинхронизации на входе ETRP.

STM32F4xx TIM1 TIM8 control circuit in external clock mode2 trigger mode fig133

Рис. 133. Схема управления в режиме 2 внешнего тактирования + режим триггера.

Таймеры TIMx соединяются друг с другом для синхронизации или соединения в цепочку. См. секцию 18.3.15: Timer synchronization в даташите [1] для получения дополнительной информации.

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

Когда микроконтроллер входит в режим отладки (Cortex®-M4 с остановленным ядром FPU), счетчик TIMx либо продолжает нормальную работу, либо останавливается, в зависимости от конфигурационного бита DBG_TIMx_STOP в модуле DBG. Для дополнительной информации см. секцию 38.16.2: Debug support for timers, watchdog, bxCAN and I2C даташита [1].

Для целей безопасности, когда счетчик останавливается (DBG_TIMx_STOP=1 в регистре DBGMCU_APBx_FZ), выходы запрещаются (как если бы сбросился бит MOE). Выходы могут либо принудительно переведены в неактивное состояние (бит OSSI=1), или получать управление от контроллера GPIO (бит OSSI=0), чтобы принудительно перевести их в состояние "выключено" (Hi-Z).

[Описание регистров TIM1 и TIM8]

Регистры периферийных устройств должны быть записаны как половина слова (16 бит) или как слово (32 бита). Доступ на чтение может быть как к байтам (8 бит), половине слова (16 бит) или к слову (32 бита).

Регистры TIM1 и TIM8 отображены на адресное пространство как 16-битные ячейки памяти, и их размещение показано в таблице ниже.

Таблица 96. Карта памяти регистров TIM1 и TIM8 и их значения после сброса.

STM32F4xx TIM1 TIM8 register map and reset values table96

В описании функций регистров используются следующие сокращения:

read/write (rw) Программа может читать и записывать эти биты.

read-only (r) Программа может только читать эти биты.

write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса.

read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта.

read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта.

read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта.

read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта.

read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита.

toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта.

Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.

Смещение адреса: 0x00
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
CKD[1:0]
rw
ARPE
rw
CMS[1:0]
rw
DIR
rw
OPM
rw
URS
rw
UDIS
rw
CEN
rw

Биты 15:10 зарезервированы, и должны находиться в состоянии сброса (нули).

CKD[1:0] (биты 9:8): ClocK Division. Это поле бит показывает коэффициент деления между частотой тактов таймера (CK_INT) и тактами мертвого времении выборки (tDTS), используемыми генераторами мертвого времени и цифровыми фильтрами (ETR, TIx).

00: tDTS = tCK_INT (без коэффициента деления).
01: tDTS = 2*tCK_INT.
10: tDTS = 4*tCK_INT.
11: зарезервировано, не программируйте это значение.

ARPE (бит 7): Auto-Reload Preload Enable. Бит разрешает предварительную загрузку (буферизацию) регистра автозагрузки.

0: регистр TIMx_ARR не буферизирован.
1: регистр TIMx_ARR буферизирован.

CMS[1:0] (биты 6:5): Center-aligned Mode Selection.

00: Edge-aligned mode. Счетчик считает вверх или вниз, в зависимости от бита направления (DIR).
01: Center-aligned mode 1. Счетчик считает поочередно вверх и вниз. Флаги прерывания Output compare каналов, сконфигурированных на выход (CCxS=00 в регистре TIMx_CCMRx) устанавливаются только когда счетчик считает вниз.
10: Center-aligned mode 2. То же самое, что mode 1, с теми лишь отличием, что флаги прерывания Output compare каналов, сконфигурированных на выход, устанавливаются только при счете вверх.
11: Center-aligned mode 3. То же самое, что mode 1 и 2, с теми лишь отличием, что флаги прерывания Output compare каналов, сконфигурированных на выход, устанавливаются при счете вверх или вниз.

Примечание: не допускается переключение из режима edge-aligned в режим center-aligned, пока счетчик разрешен (CEN=1).

DIR (бит 4): DIRection.

0: счетчик считает вверх (в сторону увеличения).
1: счетчик считает вниз (в сторону уменьшения).

Примечание: этот бит работает только на чтение, когда таймер сконфигурирован в режимах Center-aligned или Encoder.

OPM (бит 3): One Pulse Mode.

0: счетчик не останавливается на событии обновления.
1: счетчик перестает считать на следующем событии обновления (с автоматической очисткой бита CEN).

URS (бит 2): Update Request Source (источник запроса обновления). Этот бит устанавливается и очищается программой, чтобы выбрать источники события UEV.

0: Любое из следующих событий генерирует прерывание по обновлению или запрос DMA, если это разрешено. Этим событиями обновления могут быть:

   – Overflow/underflow счетчика.
   – Установка бита UG.
   – Обновление генерации через контроллер подчиненного режима.

1: Только overflow/underflow счетчика генерирует прерывание по обновлению или запрос DMA, если это разрешено.

UDIS (бит 1): Update DISable (запрет обновления). Этот бит устанавливается и сбрасывается программой для разрешения/запрета генерации события UEV.

0: UEV разрешено. Событие обновления (UEV) генерируется одним из следующих событий:

   – Overflow/underflow счетчика.
   – Установка бита UG.
   – Обновление генерации через контроллер подчиненного режима.

Затем буферизированные регистры загружаются их предварительно загружаемыми значениями.

1: UEV запрещено. Событие обновления не генерируется, теневые регистры сохраняют свое значение (ARR, PSC, CCRx). Однако счетчик и прескалер переинициализируются, если бит UG установлен, или если получен аппаратный сброс от контроллера подчиненного режима.

CEN (бит 0): Counter ENable (разрешение счетчика).

0: счетчик запрещен.
1: счетчик разрешен.

Примечание: внешнее тактирование, gated-режим и режим энкодера могут работать только если бит CEN был ранее установлен программой. Однако режим триггера может автоматически установить бит CEN под управлением аппаратуры.

Смещение адреса: 0x04
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарез.
OIS4
rw
OIS3N
rw
OIS3
rw
OIS2N
rw
OIS2
rw
OIS1N
rw
OIS1
rw
TI1S
rw
MMS[2:0]
rw
CCDS
rw
CCUS
rw
зарез. CCPC
rw

Бит 15 зарезервирован, и должен находиться в состоянии сброса (0).

OIS4 (бит 14): Output Idle State 4 (выход OC4). См. описание бита OIS1.

OIS3N (бит 13): Output Idle State 3 (выход OC3N). См. описание бита OIS1N.

OIS3 (бит 12): Output Idle State 3 (выход OC3). См. описание бита OIS1.

OIS2N (бит 11): Output Idle State 2 (выход OC2N). См. описание бита OIS1N.

OIS2 (бит 10): Output Idle State 2 (выход OC2). См. описание бита OIS1.

OIS1N (бит 9): Output Idle State 1 (выход OC1N).

0: OC1N=0 после dead-time, когда MOE=0.
1: OC1N=1 после dead-time, когда MOE=0.

OIS1 (бит 8): Output Idle State 1 (выход OC1).

0: OC1=0 (после dead-time, если реализован OC1N), когда MOE=0.
1: OC1=1 (после dead-time, если реализован OC1N), когда MOE=0.

Примечание: биты OIS1N и OIS1 не могут быть модифицированы, пока не будет запрограммирован подходящий уровень блокировки (LOCK level 1, 2 или 3, биты LOCK находятся в регистре TIMx_BDTR).

TI1S (бит 7): выбор TI1.

0: вывод TIMx_CH1 подключен ко входу TI1.
1: выводы TIMx_CH1, CH2 и CH3 подключены ко входу TI1 (комбинация XOR).

MMS[2:0] (биты 6:4): Master Mode Selection. Эти биты позволяют выбрать информацию для отправки в master-режиме в таймеры slave в целях синхронизации (TRGO). Комбинации следующие:

000: Reset - бит UG из регистра TIMx_EGR используется как выход триггера (TRGO). Если сброс был сгенерирован по входу триггера (контроллер подчиненного режима сконфигурирован в reset-режиме), то сигнал на TRGO задерживается в сравнении с реальным сбросом.
001: Enable - сигнал разрешения счетчика CNT_EN используется как выход триггера (TRGO). Это полезно для запуска некоторых таймеров в одно и то же время, или для управления окном, в котором разрешен подчиненный таймер. Сигнал разрешения счетчика генерируется логикой ИЛИ между управляющим битом CEN и входным сигналом триггера, когда сконфигурирован gated-режим. Когда сигнал разрешения счетчика управляется входом триггера, существует задержка на TRGO, за исключением случая, когда выбран режим главный/подчиненный (master/slave), см. описание бита MSM в регистре TIMx_SMCR.
010: Update - событие обновления выбрано как выход триггера (TRGO). Например, master-таймер тогда может использоваться как прескалер для slave-таймера.
011: Compare Pulse - выход триггера посылает положительный импульс, когда установлен флаг CC1IF (даже если он уже в состоянии логю 1), как только произойдет совпадение счетчика compare match (TRGO).
100: Compare - сигнал OC1REF используется в качестве выхода триггера (TRGO).
101: Compare - сигнал OC2REF используется в качестве выхода триггера (TRGO).
110: Compare - сигнал OC3REF используется в качестве выхода триггера (TRGO).
111: Compare - сигнал OC4REF используется в качестве выхода триггера (TRGO).

Примечание: тактирование slave-таймера и ADC должно быть разрешено перед приемом событий от master-таймера, и не должно изменяться на лету, когда триггеры приходят от master-таймера.

CCDS (бит 3): Capture/Compare DMA Selection.

0: отправится запрос CCx DMA, когда произойдет событие CCx.
1: отправляются запросы CCx DMA, когда происходит событие обновления.

CCUS (бит 2): Capture/Compare control Update Selection.

0: Когда предзагружены биты управления Capture/Compare (CCPC=1), они обновляются только установкой бита COMG.
1: Когда предзагружены биты управления Capture/Compare (CCPC=1), они обновляются установкой бита COMG, или когда произойдет нарастание уровня на TRGI.

Примечание: этот бит действует только на тех каналах, у которых есть комплементарный выход.

Бит 1 зарезервирован, и должен находиться в состоянии сброса (0).

CCPC (бит 0): Capture/Compare Preloaded Control.

0: биты CCxE, CCxNE и OCxM не предзагружаются.
1: биты CCxE, CCxNE и OCxM предзагружаются. После того, как были записаны, они обновятся только когда произойдет событие коммутации (событие COM, установится бит COMG, или будет определено нарастание уровня на TRGI, в зависимости от бита CCUS).

Примечание: этот бит действует только на тех каналах, у которых есть комплементарный выход.

Смещение адреса: 0x08
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
ETP
rw
ECE
rw
ETPS[1:0]
rw
ETF[3:0]
rw
MSM
rw
TS[2:0]
rw
зарез. SMS[2:0]
rw

ETP (бит 15): External Trigger Polarity. Этот бит выбирает, что используется для операций триггера: ETR или !ETR.

0: ETR не инвертируется, активным является уровень лог. 1 или фронт нарастания уровня.
1: ETR инвертируется, активным является уровень лог. 0 или спад уровня.

ECE (бит 14): External Clock Enable. Этот бит разрешает редим внешнего тактирования 2.

0: External clock mode 2 запрещен.
1: External clock mode 2 разрешен. Счетчик тактируется по любому активному перепаду сигнала ETRF.

Примечания:

(1) Установка бита ECE дает тот же эффект, что и выбор режима 1 внешнего тактирования с TRGI, подключенным к ETRF (SMS=111 и TS=111).
(2) Можно одновременно использовать режим 2 внешнего тактирования со следующими slave-режимами: reset mode, gated mode и trigger mode. Так или иначе, в этом случае TRGI не должен быть соединен с ETRF (биты TS не должны быть в состоянии 111).
(3) Если одновременно разрешены режим 1 внешнего тактирования и режим 2 внешнего тактирования, то внешним входом тактов будет ETRF.

ETPS[1:0] (бит 13:12): External Trigger Prescaler. Частота сигнала внешнего триггера ETRP должна быть как минимум 1/4 от частоты TIMxCLK. Может быть разрешен прескалер, чтобы уменьшить частоту ETRP. Это полезно, когда поступают быстрые внешние такты.

00: Прескалер выключен (коэффициент деления 1).
01: частота ETRP делится на 2.
10: частота ETRP делится на 4.
11: частота ETRP делится на 8.

ETF[3:0] (биты 11:8): External Trigger Filter. Это битовое поле определяет частоту, используемую для выборки сигнала ETRP, и длины цифрового фильтра, примененного к ETRP. Цифровой фильтр сделан как счетчик событий, при которых N идущих друг за другом событий нужны для подтверждения изменения на выходе:

0000: нет фильтра, выборка делается на частоте fDTS.
0001: fSAMPLING=fCK_INT, N=2.
0010: fSAMPLING=fCK_INT, N=4.
0011: fSAMPLING=fCK_INT, N=8.
0100: fSAMPLING=fDTS/2, N=6.
0101: fSAMPLING=fDTS/2, N=8.
0110: fSAMPLING=fDTS/4, N=6.
0111: fSAMPLING=fDTS/4, N=8.
1000: fSAMPLING=fDTS/8, N=6.
1001: fSAMPLING=fDTS/8, N=8.
1010: fSAMPLING=fDTS/16, N=5.
1011: fSAMPLING=fDTS/16, N=6.
1100: fSAMPLING=fDTS/16, N=8.
1101: fSAMPLING=fDTS/32, N=5.
1110: fSAMPLING=fDTS/32, N=6.
1111: fSAMPLING=fDTS/32, N=8.

MSM (бит 7): Master/Slave Mode.

0: нет никакого действия.
1: эффект события на входе триггера (TRGI) задерживается, чтобы позволить реализовать отличную синхронизацию между текущим таймером и его slave-таймерами (через TRGO). Это полезно, если мы хотим синхронизировать несколько таймеров по одному внешнему событию.

TS[2:0] (биты 6:4): Trigger Selection. Это поле бит выбирает вход триггера, используемый для синхронизации счетчика.

000: внутренний триггер 0 (ITR0).
001: внутренний триггер 1 (ITR1).
010: внутренний триггер 2 (ITR2).
011: внутренний триггер 3 (ITR3).
100: детектор перепада TI1 (TI1F_ED).
101: фильтрованный вход 1 таймера (TI1FP1).
110: фильтрованный вход 2 таймера (TI2FP2).
111: вход внешнего триггера (ETRF).

См. таблицу 94 ниже для дополнительной информации по значению ITRx для каждого таймера.

Примечание: эти биты должны изменяться только когда они не используются (т. е. когда SMS=000), чтобы избежать ошибочных детектирований перепадов, когда происходит изменение конфигурации.

Таблица 94. Подсоединение внутреннего триггера TIMx.

Slave TIM ITR0 (TS = 000) ITR1 (TS = 001) ITR2 (TS = 010) ITR3 (TS = 011)
TIM1 TIM5_TRGO TIM2_TRGO TIM3_TRGO TIM4_TRGO
TIM8 TIM1_TRGO TIM2_TRGO TIM4_TRGO TIM5_TRGO

Бит 3 зарезервирован, и должен находиться в состоянии сброса (0).

SMS[2:0] (биты 3:0): Slave Mode Selection. Когда выбраны внешние сигналы, активный перепад триггера (TRGI) связан с полярностью, выбранной на внешнем входе.

000: slave-режим запрещен - если CEN = 1, то прескалер тактируется непосредственно от внешних тактов.
001: Encoder mode 1 - счетчик считает вверх/вниз на перепаде TI2FP1, в зависимости от уровня TI1FP2.
010: Encoder mode 2 - счетчик считает вверх/вниз на перепаде TI1FP2, в зависимости от уровня TI2FP1.
011: Encoder mode 3 - счетчик считает вверх/вниз по обоим перепадам TI1FP1 и TI2FP2, в зависимости от уровня на другом входе.
100: Reset Mode - фронт нарастания уровня на выбранном входе триггера (TRGI) переинициализирует счетчик и генерирует обновление регистров.
101: Gated Mode - разрешено тактирование счетчика, когда на входе триггера (TRGI) лог. 1. Счетчик останавливается (но не сбрасывается) пока триггер находится в лог. 0. Управляется и запуск, и остановка счетчика.
110: Trigger Mode - счетчик начинает считать по фронту нарастания уровня триггера TRGI (но он не сбрасывается). Управляется только старт счетчика.
111: External Clock Mode 1 - счетчик тактируют фронты нарастания уровня выбранного триггера (TRGI).

Примечание: gated-режим не должен использоваться, если в качестве входа триггера выбран TI1F_ED (TS=’100’). Предлагаемый TI1F_ED выводит 1 импульс на каждом изменении TI1F, тогда как gated-режим проверяет уровень сигнала триггера.

Тактирование slave-таймера должно быть разрешено перед приемом событий от master-таймера, и не должно изменяться на лету, пока поступают триггеры от master-таймера.

Смещение адреса: 0x0C
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарез. TDE
rw
COMDE
rw
CC4DE
rw
CC3DE
rw
CC2DE
rw
CC1DE
rw
UDE
rw
BIE
rw
TIE
rw
COMIE
rw
CC4IE
rw
CC3IE
rw
CC2IE
rw
CC1IE
rw
UIE
rw

Бит 15 зарезервирован, и должен находиться в состоянии сброса (0).

TDE (бит 14): Trigger DMA request Enable.

0: запрос триггера DMA запрещен.
1: запрос триггера DMA разрешен.

COMDE (бит 13): COM DMA request Enable.

0: запрос COM DMA запрещен.
1: запрос COM DMA разрешен.

CC4DE (бит 12): Capture/Compare 4 DMA request Enable.

0: запрос CC4 DMA запрещен.
1: запрос CC4 DMA разрешен.

CC3DE (бит 11): Capture/Compare 3 DMA request Enable.

0: запрос CC3 DMA запрещен.
1: запрос CC3 DMA разрешен.

CC2DE (бит 10): Capture/Compare 2 DMA request Enable.

0: запрос CC2 DMA запрещен.
1: запрос CC2 DMA разрешен.

CC1DE (бит 9): Capture/Compare 1 DMA request Enable.

0: запрос CC1 DMA запрещен.
1: запрос CC1 DMA разрешен.

UDE (бит 8): Update DMA request Enable.

0: запрос обновления DMA запрещен.
1: Запрос обновления DMA разрешен.

BIE (бит 7): Break Interrupt Enable.

0: прерывание Break запрещено.
1: прерывание Break разрешено.

TIE (бит 6): Trigger Interrupt Enable.

0: прерывание триггера запрещено.
1: прерывание триггера разрешено.

COMIE (бит 5): COM Interrupt Enable.

0: прерывание COM запрещено.
1: прерывание COM interrupt enabled.

CC4IE (бит 4): Capture/Compare 4 Interrupt Enable.

0: прерывание CC4 запрещено.
1: прерывание CC4 разрешено.

CC3IE (бит 3): Capture/Compare 3 Interrupt Enable.

0: прерывание CC3 запрещено.
1: прерывание CC3 разрешено.

CC2IE (бит 2): Capture/Compare 2 Interrupt Enable.

0: прерывание CC2 запрещено.
1: прерывание CC2 разрешено.

CC1IE (бит 1): Capture/Compare 1 Interrupt Enable.

0: прерывание CC1 запрещено.
1: прерывание CC1 разрешено.

UIE (бит 0): Update Interrupt Enable.

0: прерывание обновления запрещено.
1: прерывание обновления разрешено.

Смещение адреса: 0x10
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано CC4OF
rc_w0
CC3OF
rc_w0
CC2OF
rc_w0
CC1OF
rc_w0
зарез. TIF
rc_w0
TIE
rc_w0
COMIF
rc_w0
CC4IF
rc_w0
CC3IF
rc_w0
CC2IF
rc_w0
CC1IF
rc_w0
UIF
rc_w0

Биты 15:13 зарезервированы, и должны находиться в состоянии сброса (нули).

CC4OF (бит 12): Capture/Compare 4 Overcapture Flag. См. описание CC1OF.

CC3OF (бит 11): Capture/Compare 3 Overcapture Flag. См. описание CC1OF.

CC2OF (бит 10): Capture/Compare 2 Overcapture Flag. См. описание CC1OF.

CC1OF (бит 9): Capture/Compare 1 Overcapture Flag. Этот флаг установится аппаратно только когда соответствующий канал сконфигурирован в режиме захвата по входу (input capture mode). Он очищается программой путем записи 0.

0: не было детектировано Overcapture.
1: значение счетчика было захвачено в регистр TIMx_CCR1, в то время как флаг CC1IF уже был установлен.

Бит 8 зарезервирован, и должен находиться в состоянии сброса (0).

BIF (бит 7): Break Interrupt Flag. Этот флаг устанавливается аппаратно, как только вход break становится активным. Флаг может быть очищен программой, если на входе break не присутствует активный уровень.

0: не было события break.
1: на входе break был детектирован активный уровень.

TIF (бит 6): Trigger Interrupt Flag. Этот флаг установится аппаратно на событии триггера (был детектирован активный перепад на входе TRGI, когда разрешен контроллер подчиненного режима во всех режимах, кроме gated-режима. Он установится, счетчик когда счетчик запускается или останавливается в при выбранном gated-режиме. Флаг очищается программой.

0: не было события триггера.
1: ожидает обработки прерывание триггера.

COMIF (бит 5): COM Interrupt Flag. Этот флаг установится аппаратно на событии COM (когда были обновлены биты управления Capture/Compare - CCxE, CCxNE, OCxM). Флаг очищается программой.

0: не было события COM.
1: ожидает обработки прерывание COM.

CC4IF (бит 4): Capture/Compare 4 Interrupt Flag. См. описание CC1IF.

CC3IF (бит 3): Capture/Compare 3 Interrupt Flag. См. описание CC1IF.

CC2IF (бит 2): Capture/Compare 2 Interrupt Flag. См. описание CC1IF.

CC1IF (бит 1): Capture/Compare 1 Interrupt Flag.

Если канал CC1 сконфигурирован как выход: Этот флаг установится аппаратно, когда счетчик совпадет со значением сравнения, с некоторым исключением в режиме center-aligned (см. описание бит CMS в регистре TIMx_CR1). Флаг очищается программой.

0: нет совпадения.
1: содержимое счетчика TIMx_CNT совпало с содержимым регистра TIMx_CCR1. Когда содержимое TIMx_CCR1 больше, чем содержимое TIMx_ARR, бит CC1IF перейдет в лог. 1 на переполнении счетчика (в режимах счета вверх и счета вверх/вниз) или при "недогрузки" счетчика (underflow, в режиме счета вниз).

Если канал CC1 сконфигурирован как вход: этот флаг установится аппаратно при захвате. Флаг очистится программой или путем чтения регистра TIMx_CCR1.

0: не произошло захвата по входу.
1: значение счетчика было захвачено в регистр TIMx_CCR1 (был детектирован перепад уровня на IC1, который соответствует выбранной полярности).

UIF (бит 0): Update Interrupt Flag. Этот флаг установится аппаратно на событии обновления. Флаг очищается программой.

0: не было обновления.

1: ожидает обработки прерывание обновления. Этот флаг установится аппаратно, когда обновляются регистры:

   – Переполнение (overflow) или недогрузка (underflow), принимая во внимание значение счетчика повторений (обновление произойдет, если счетчик повторений = 0), и если UDIS=0 в регистре TIMx_CR1.
   – Когда CNT был переинициализирован программно, используя бит UG в регистре TIMx_EGR, если URS=0 и UDIS=0 в регистре TIMx_CR1.
   – Когда CNT был реинициализирован по событию триггера (см. описание регистра TIMx_SMCR), если URS=0 и UDIS=0 в регистре TIMx_CR1.

Смещение адреса: 0x14
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано BG
w
TG
w
COMG
w
CC4G
w
CC3G
w
CC2G
w
CC1G
w
UG
w

Биты 15:8 зарезервированы, и должны находиться в состоянии сброса (нули).

BG (бит 7): Break Generation. Этот бит устанавливается программой, чтобы сгенерировать событие останова, и он очищается аппаратно.

0: нет никакого действия.
1: генерируется событие break. Бит MOE очищается, и флаг BIF устанавливается. Может произойти соответствующее прерывание или передача DMA, если это разрешено.

TG (бит 6): Trigger Generation. Этот бит устанавливается программой, чтобы сгенерировать событие, и автоматически очищается аппаратно.

0: нет никакого действия.
1: установится флаг TIF в регистре TIMx_SR register. Может произойти соответствующее прерывание или передача DMA, если это разрешено.

COMG (бит 5): Capture/Compare control update Generation. Этот бит можно установить программно, и он автоматически очистится аппаратно.

0: нет никакого действия.
1: когда установлен бит CCPC, это разрешает обновление бит CCxE, CCxNE и OCxM.

Примечание: этот бит действует только на тех каналах, у которых есть комплементарный выход.

CC4G (бит 4): Capture/Compare 4 Generation. См. описание CC1G.

CC3G (бит 3): Capture/Compare 3 Generation. См. описание CC1G.

CC2G (бит 2): Capture/Compare 2 Generation. См. описание CC1G.

CC1G (бит 1): Capture/Compare 1 Generation. Этот бит устанавливается программой, чтобы сгенерировать событие, и он автоматически очистится аппаратно.

0: нет никакого действия.
1: сгенерировано событие захвата/сравнения на канале 1. Если канал CC1 сконфигурирован как выход: установится флаг CC1IF, произойдет соответствующее прерывание или будет отправлен запрос DMA, если это разрешено.

Если канал CC1 сконфигурирован как вход: текущее значение счетчика захватывается в регистр TIMx_CCR1. Установится флаг CC1IF, произойдет соответствующее прерывание или будет отправлен запрос DMA, если это разрешено. Флаг CC1OF установится, если флаг CC1IF уже был в состоянии лог. 1.

UG (бит 0): Update Generation. Этот бит может быть установлен программно, и он автоматически очистится аппаратно.

0: нет никакого действия.
1: переинициализируется счетчик, и будет сгенерировано событие обновления регистров. Обратите внимание, что будет также очищен счетчик прескалера (тем не менее коэффициент деления прескалера не изменится). Счетчик очистится, если выбран режим center-aligned, или если DIR=0 (счет вверх), иначе счетчик примет значение автозагрузки (TIMx_ARR), если DIR=1 (счет вниз).

Смещение адреса: 0x18
Значение сброса: 0x0000

Каналы могут использоваться в двух направлениях - либо для ввода сигнала (режим захвата, capture mode) или для вывода сигнала (режим сравнения счетчика с заданным значением, compare mode). Направление канала определяется конфигурированием бит соответствующих бит CCxS. Все другие биты этого регистра имеют различающиеся функции для режима ввода и режима вывода. Для определенного бита OCxx описывает его функцию, когда канал сконфигурирован на вывод, и ICxx описывает функцию бита, когда канал сконфигурирован на ввод. Поэтому пользователю следует помнить о том, что один и тот же бит может служить различным функция в разных режимах работы канала - т. е. при вводе или выводе.

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
OC2CE OC2M[2:0] OC2PE OC2FE CC2S[1:0]
OC1CE OC1M[2:0]
OC1PE OC1FE CC1S[1:0]
IC2F[3:0] IC2PSC[1:0] IC1F[3:0] IC1PSC[1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

[Output compare mode]

OC2CE (бит 15): Output Compare 2 Clear Enable.

OC2M[2:0] (биты 14:12): Output Compare 2 Mode.

OC2PE (бит 11): Output Compare 2 Preload Enable.

OC2FE (бит 11): Output Compare 2 Fast Enable.

CC2S[1:0] (биты 9:8): Capture/Compare 2 Selection. Это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC2 канал сконфигурирован на вывод.
01: CC2 канал сконфигурирован на ввод, IC2 отображен на TI2.
10: CC2 канал сконфигурирован на ввод, IC2 отображен на TI1.
11: CC2 канал сконфигурирован на ввод, IC2 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC2S допускают запись только когда канал выключен (CC2E = 0 в регистре TIMx_CCER).

OC1CE (бит 7): Output Compare 1 Clear Enable.

0: OC1Ref на зависит от входа ETRF.
1: OC1Ref очистится, как только был определен уровень лог. 1 на входе ETRF.

OC1M[2:0] (биты 6:4): Output Compare 1 Mode. Эти биты определяют поведение выходного опорного сигнала OC1REF, от которого получаются OC1 и OC1N. У OC1REF активный уровень лог. 1, в то время как активный уровень OC1 и OC1N зависит от бит CC1P и CC1NP.

000: Frozen (заморожено) - сравнение между регистром output compare TIMx_CCR1 и счетчиком TIMx_CNT не оказывает влияния на выходы (этот режим используется для генерации базы времени).
001: установка канала 1 в активный уровень при совпадении TIMx_CCR1 и счетчика TIMx_CNT. Сигнал OC1REF переводится в лог. 1, когда счетчик TIMx_CNT достиг значения регистра Capture/Compare 1 (TIMx_CCR1).
010: установка канала 1 в неактивный уровень при совпадении TIMx_CCR1 и счетчика TIMx_CNT. Сигнал OC1REF переводится в лог. 0, когда счетчик TIMx_CNT достиг значения регистра Capture/Compare 1 (TIMx_CCR1).
011: Toggle (переключение) - OC1REF меняет свой логический уровень, когда TIMx_CNT=TIMx_CCR1.
100: принудительный перевод в неактивный уровень - OC1REF переводится в лог. 0.
101: принудительный перевод в активный уровень - OC1REF переводится в лог. 1.
110: PWM mode 1 (режим 1 ШИМ) - при счете вверх канал 1 активен (OC1REF=1), пока TIMx_CNT < TIMx_CCR1, иначе не активен (OC1REF=0). При счете вниз канал 1 не активен (OC1REF=0) пока TIMx_CNT > TIMx_CCR1, иначе активен (OC1REF=1).
111: PWM mode 2 (режим 2 ШИМ) - при счете вверх канал 1 не активен (OC1REF=0), пока TIMx_CNT < TIMx_CCR1, иначе активен (OC1REF=1). При счете вниз канал 1 активен (OC1REF=1) пока TIMx_CNT > TIMx_CCR1, иначе не активен (OC1REF=0).

Примечания:

(1) Эти биты не могут быть модифицированы, пока не запрограммирован уровень 3 блокировки (битами LOCK в регистре TIMx_BDTR) и пока биты CC1S не равны 00 (канал сконфигурирован на вывод).
(2) В PWM-режимах (ШИМ) 1 или 2, уровень OCREF меняется только когда меняется результат сравнения, или когда режим output compare переключается из режима "frozen" в режим "PWM".
(3) На каналах, у которых есть комплементарный выход, это битовое поле предзагружается. Если установлен бит CCPC в регистре TIMx_CR2, то активные биты OC1M получают новое значение из предзагруженных бит только когда генерируется событие COM.

OC1PE (бит 3): Output Compare 1 Preload Enable.

0: регистр предзагрузки на TIMx_CCR1 запрещен. Регистр TIMx_CCR1 может быть записан в любое время, новое значение вступает в силу немедленно.
1: регистр предзагрузки на TIMx_CCR1 разрешен. Операции доступа чтения/записи влияют на регистр предзагрузки. Значение из регстра предзагрузки TIMx_CCR1 загружается в активный регистр на каждом событии обновления.

Примечания:

(1) Эти биты не могут быть модифицированы, пока не запрограммирован уровень 3 блокировки (битами LOCK в регистре TIMx_BDTR) и пока биты CC1S не равны 00 (канал сконфигурирован на вывод).
(2) режим PWM можно использовать без проверки достоверности регистра предзагрузки только в режиме одного импульса (one pulse mode, установлен бит OPM в регистре TIMx_CR1). Иначе корректное поведение не гарантируется.

OC1FE (бит 2): Output Compare 1 Fast Enable. Этот бит используется для акселерации эффекта Этот бит используется для ускорения воздействия события на триггер по входу на выходе CC.

0: нормальное поведение CC1 зависит от счетчика и значений CCR1, даже когда триггер включен. Минимальная задержка для активации выхода CC1, когда происходит перепад на входе триггера, составляет 5 периодов тактов.
1: активный перепад на входе триггера действует наподобие compare match на выходе CC1. Тогда OC установится на уровень сравнения независимо от результата сравнения. Задержка для оцифровки входа триггера и для активации выхода CC1 снижена до 3 периодов тактов. OCFE действует только если канал сконфигурирован в режиме PWM1 или PWM2.

CC1S[1:0] (биты 1:0): это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC1 канал сконфигурирован на вывод.
01: CC1 канал сконфигурирован на ввод, IC1 отображен на TI1.
10: CC1 канал сконфигурирован на ввод, IC1 отображен на TI2.
11: CC1 канал сконфигурирован на ввод, IC1 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC1S допускают запись только когда канал выключен (CC1E = 0 в регистре TIMx_CCER).

[Input capture mode]

IC2F[3:0] (биты 15:12): Input Capture 2 Filter.

IC2PSC[1:0] (биты 11:10): Input Capture 2 PreSCaler.

CC2S[1:0] (биты 9:8): Capture/Compare 2 Selection. Это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC2 канал сконфигурирован на вывод.
01: CC2 канал сконфигурирован на ввод, IC2 отображен на TI2.
10: CC2 канал сконфигурирован на ввод, IC2 отображен на TI1.
11: CC2 канал сконфигурирован на ввод, IC2 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC2S допускают запись только когда канал выключен (CC2E = 0 в регистре TIMx_CCER).

IC1F[3:0] (биты 7:4): Input Capture 1 Filter. Это поле бит определяет частоту, используемую для оцифровки входа TI1, и длину цифрового фильтра, применяемого для TI1. Цифровой фильтр построен как счетчик событий, когда должны произойти N следующих друг за другом событий, чтобы подтвердить изменение на выходе.

0000: нет фильтра, оцифровка осуществляется с частотой fDTS.
0001: fSAMPLING=fCK_INT, N=2.
0010: fSAMPLING=fCK_INT, N=4.
0011: fSAMPLING=fCK_INT, N=8.
0100: fSAMPLING=fDTS/2, N=6.
0101: fSAMPLING=fDTS/2, N=8.
0110: fSAMPLING=fDTS/4, N=6.
0111: fSAMPLING=fDTS/4, N=8.
1000: fSAMPLING=fDTS/8, N=6.
1001: fSAMPLING=fDTS/8, N=8.
1010: fSAMPLING=fDTS/16, N=5.
1011: fSAMPLING=fDTS/16, N=6.
1100: fSAMPLING=fDTS/16, N=8.
1101: fSAMPLING=fDTS/32, N=5.
1110: fSAMPLING=fDTS/32, N=6.
1111: fSAMPLING=fDTS/32, N=8.

IC1PSC[1:0] (биты 3:2): Input Capture 1 PreSCaler. Это битовое поле определяет коэффициент прескалера, действующего на входе CC1 (IC1). Прескалер сбрасывается, как только CC1E=0 (регистр TIMx_CCER).

00: нет прескалера, захват происходит каждый раз, когда детектирован перепад на входе захвата.
01: захват происходит на каждых 2 событиях.
10: захват происходит на каждых 4 событиях.
11: захват происходит на каждых 8 событиях.

CC1S[1:0] (биты 1:0): это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC1 канал сконфигурирован на вывод.
01: CC1 канал сконфигурирован на ввод, IC1 отображен на TI1.
10: CC1 канал сконфигурирован на ввод, IC1 отображен на TI2.
11: CC1 канал сконфигурирован на ввод, IC1 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC1S допускают запись только когда канал выключен (CC1E = 0 в регистре TIMx_CCER).

Смещение адреса: 0x1C
Значение сброса: 0x0000

См. выше описание регистра CCMR1.

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
OC4CE OC4M[2:0] OC4PE OC4FE CC4S[1:0]
OC3CE OC3M[2:0]
OC3PE OC3FE CC3S[1:0]
IC4F[3:0] IC4PSC[1:0] IC3F[3:0] IC3PSC[1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

[Output compare mode]

OC4CE (бит 15): Output compare 4 Clear Enable.

OC4M (бит 14:12): Output compare 4 Mode.

OC4PE (бит 11): Output compare 4 Preload Enable.

OC4FE (бит 10): Output compare 4 Fast Enable.

CC4S[1:0] (биты 9:8): Capture/Compare 4 Selection. Это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC4 канал сконфигурирован на вывод.
01: CC4 канал сконфигурирован на ввод, IC4 отображен на TI4.
10: CC4 канал сконфигурирован на ввод, IC4 отображен на TI3.
11: CC4 канал сконфигурирован на ввод, IC4 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC4S допускают запись только когда канал выключен (CC4E = 0 в регистре TIMx_CCER).

OC3CE (бит 7): Output compare 3 Clear Enable.

OC3M (биты 6:4): Output compare 3 Mode.

OC3PE (бит 3): Output compare 3 Preload Enable.

OC3FE (бит 2): Output compare 3 Fast Enable.

CC3S[1:0] (биты 1:0): Capture/Compare 3 selection. Это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC3 канал сконфигурирован на вывод.
01: CC3 канал сконфигурирован на ввод, IC3 отображен на TI3.
10: CC3 канал сконфигурирован на ввод, IC3 отображен на TI4.
11: CC3 канал сконфигурирован на ввод, IC3 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC3S допускают запись только когда канал выключен (CC3E = 0 в регистре TIMx_CCER).

[Input capture mode]

IC4F[3:0] (биты 15:12): Input capture 4 Filter.

IC4PSC[1:0] (биты 11:10): Input Capture 4 PreSCaler.

CC4S[1:0] (биты 9:8): Capture/Compare 4 Selection. Это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC4 канал сконфигурирован на вывод.
01: CC4 канал сконфигурирован на ввод, IC4 отображен на TI4.
10: CC4 канал сконфигурирован на ввод, IC4 отображен на TI3.
11: CC4 канал сконфигурирован на ввод, IC4 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC4S допускают запись только когда канал выключен (CC4E = 0 в регистре TIMx_CCER).

IC3F[3:0] (биты 7:4): Input Capture 3 Filter.

IC3PSC[1:0] (биты 3:2): Input capture 3 prescaler.

CC3S[1:0] (биты 1:0): Capture/Compare 3 Selection. Это поле бит определяет направление канала (ввод или вывод), а также конфигурирует использование ввода.

00: CC3 канал сконфигурирован на вывод.
01: CC3 канал сконфигурирован на ввод, IC3 отображен на TI3.
10: CC3 канал сконфигурирован на ввод, IC3 отображен на TI4.
11: CC3 канал сконфигурирован на ввод, IC3 отображен на TRC. Этот режим работает только если битом TS (в регистре TIMx_SMCR) выбран вход внутреннего триггера.

Примечание: биты CC3S допускают запись только когда канал выключен (CC3E = 0 в регистре TIMx_CCER).

Смещение адреса: 0x20
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезерв.
CC4P
rw
CC4E
rw
CC3NP
rw
CC3NE
rw
CC3P
rw
CC3E
rw
CC2NP
rw
CC2NE
rw
CC2P
rw
CC2E
rw
CC1NP
rw
CC1NE
rw
CC1P
rw
CC1E
rw

Биты 15:14 зарезервированы, и должны находиться в состоянии сброса (нули).

CC4P (бит 13): Capture/Compare 4 Output Polarity. См. описание CC1P.

CC4E (бит 12): Capture/Compare 4 Output Enable. См. описание CC1E.

CC3NP (бит 11): Capture/Compare 3 complementary output Polarity. См. описание CC1NP.

CC3NE (бит 10): Capture/Compare 3 complementary output Enable. См. описание CC1NE.

CC3P (бит 9): Capture/Compare 3 output Polarity. См. описание CC1P.

CC3E (бит 8): Capture/Compare 3 output Enable. См. описание CC1E.

CC2NP (бит 7): Capture/Compare 2 complementary output Polarity. См. описание CC1NP.

CC2NE (бит 6): Capture/Compare 2 complementary output Enable. См. описание CC1NE.

CC2P (бит 5): Capture/Compare 2 output Polarity. См. описание CC1P.

CC2E (бит 4): Capture/Compare 2 output Enable. См. описание CC1E.

CC1NP (бит 3): Capture/Compare 1 complementary output Polarity. Когда канал CC1 сконфигурирован как выход:

0: на OC1N активный уровень лог. 1.
1: на OC1N активный уровень лог. 0.

Когда канал CC1 сконфигурирован как вход: этот бит используется совместно с CC1P, чтобы определить полярность TI1FP1 и TI2FP1. См. описание CC1P.

Примечания:

(1) На тех каналах, у которых есть комплементарный выход, этот бит предзагружается. Если установлен бит CCPC в регистре TIMx_CR2, то активный бит CC1NP получает новое значение из предзагруженного бита только когда генерируется событие коммутации (COM event).
(2) Этот бит записать невозможно, пока не будет запрограммирован уровень блокировки 2 или 3 (битами LOCK в регистре TIMx_BDTR) и в битах CC1S не будет установлено значение 00 (канал сконфигурирован на выход).

CC1NE (бит 2): Capture/Compare 1 complementary output Enable.

0: выключено - OC1N неактивен. Тогда уровень OC1N определяется функцией бит MOE, OSSI, OSSR, OIS1, OIS1N и CC1E.
1: включено - сигнал OC1N это выход соответствующего вывода, в зависимости от бит MOE, OSSI, OSSR, OIS1, OIS1N и CC1E.

Примечание: на тех каналах, у которых есть комплементарный выход, этот бит предзагружается. Если установлен бит CCPC в регистре TIMx_CR2, то активный бит CC1NE получает новое значение из предзагруженного бита только когда генерируется событие коммутации (COM event).

CC1P (бит 1): Capture/Compare 1 output polarity. Когда канал CC1 сконфигурирован как выход:

0: для OC1 активным уровнем будет лог. 1.
1: для OC1 активным уровнем будет лог. 0.

Когда канал CC1 сконфигурирован как вход: биты CC1NP/CC1P выбирают активную полярность TI1FP1 и TI2FP1 для триггера или операций захвата.

00: нет инверсии / фронт нарастания уровня. Схема чувствительна к нарастанию уровня TIxFP1 (на операциях захвата или операциях триггера режиме reset, внешних тактов или режиме триггера), TIxFP1 не инвертирован (работа триггера в gated-режиме или в режиме энкодера).
01: инверсия / спад уровня. Схема чувствительна к спаду уровня TIxFP1 (на операциях захвата или операциях триггера режиме reset, внешних тактов или режиме триггера), TIxFP1 инвертирован (работа триггера в gated-режиме или в режиме энкодера).
10: зарезервировано, не используйте эту конфигурацию.
11: нет инверсии / любой перепад. Схема чувствительна как к нарастанию, так и к спаду уровня TIxFP1 (на операциях захвата или операциях триггера режиме reset, внешних тактов или режиме триггера), TIxFP1 не инвертирован (работа триггера в gated-режиме). Эта конфигурация не должна использоваться в режиме энкодера.

Примечания:

(1) На тех каналах, у которых есть комплементарный выход, этот бит предзагружается. Если установлен бит CCPC в регистре TIMx_CR2, то активный бит CC1P получает новое значение из предзагруженного бита только когда генерируется событие коммутации (COM event).
(2) Этот бит записать невозможно, пока не будет запрограммирован уровень блокировки 2 или 3 (битами LOCK в регистре TIMx_BDTR).

CC1E (бит 0): Capture/Compare 1 output Enable. Когда канал CC1 сконфигурирован как выход:

0: выключено - OC1 не активен. Тогда уровень OC1 определяется функцией бит MOE, OSSI, OSSR, OIS1, OIS1N и CC1NE.
1: выключено - сигнал OC1 яврядется выводом соответствующего выхода, в зависимости от бит MOE, OSSI, OSSR, OIS1, OIS1N и CC1NE.

Когда канал CC1 сконфигурирован как вход: этот бит определяет, может ли реально выполниться захват в регистр TIMx_CCR1 значение счетчика, или нет.

0: захват запрещен.
1: захват разрешен.

Примечание: на тех каналах, у которых есть комплементарный выход, этот бит предзагружается. Если установлен бит CCPC в регистре TIMx_CR2, то активный бит CC1E получает новое значение из предзагруженного бита только когда генерируется событие коммутации (COM event).

Таблица 95. Биты управления выходом для комплементарных каналах с сигналами OCx и OCxN, и с функцией break.

Биты управления Выходные состояния(1)
MOE OSSI OSSR CCxE CCxNE OCx OCxN
1 X 0 0 0 Выход запрещен (не переключается таймером), OCx = 0, OCx_EN = 0 Выход запрещен (не переключается таймером), OCxN = 0, OCxN_EN = 0
0 0 1 OCxREF + полярность OCxN = OCxREF xor CCxNP, OCxN_EN = 1
0 1 0 OCxREF + полярность OCx = OCxREF xor CCxP, OCx_EN = 1 Выход запрещен (не переключается таймером), OCxN=0, OCxN_EN=0
0 1 1 OCREF + Polarity + dead-time OCx_EN = 1 Комплементарно для OCREF (not OCREF) + полярность + dead-time OCxN_EN = 1
1 0 0 Выход запрещен (не переключается таймером), OCx = CCxP, OCx_EN = 0 Выход запрещен (не переключается таймером), OCxN = CCxNP, OCxN_EN = 0
1 0 1 Off-State (выход разрешен в неактивном состоянии) OCx = CCxP, OCx_EN = 1 OCxREF + полярность OCxN = OCxREF xor CCxNP, OCxN_EN = 1
1 1 0 OCxREF + полярность OCx=OCxREF xor CCxP, OCx_EN = 1 Off-State (выход разрешен в неактивном состоянии) OCxN = CCxNP, OCxN_EN = 1
1 1 1 OCREF + полярность + dead-time OCx_EN = 1 Комплементарно для OCREF (not OCREF) + полярность + dead-time OCxN_EN = 1
0 0 X X X Выход запрещен (больше не переключается таймером). Состояние выхода определяется контроллером GPIO, и может быть лог. 1, лог. 0 или Hi-Z (выход отключен).
1 0 0
0 1 Off-State (выход разрешен в неактивном состоянии).
Асинхронно: OCx = CCxP, OCx_EN = 1, OCxN = CCxNP, OCxN_EN = 1.
Затем, если такты присутствуют: OCx = OISx и OCxN = OISxN после dead-time, подразумевая, что OISx и OISxN не соответствуют OCX, и OCxN оба в активном состоянии.
1 0
1 1

Примечание (1): когда оба выхода канала не используются (CCxE = CCxNE = 0), то биты OISx, OISxN, CCxP и CCxNP должны сохраняться очищенными.

Состояние внешних ножек ввода/вывода, подключенных к комплементарным каналам OCx и OCxN, зависит от состояния канала OCx и OCxN, и от регистров GPIO.

Смещение адреса: 0x24
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CNT[15:0]
rw

CNT[15:0]: значение счетчика.

Смещение адреса: 0x28
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
PSC[15:0]
rw

PSC[15:0]: значение прескалера. Частота тактирования счетчика (CK_CNT) равна fCK_PSC / (PSC[15:0] + 1). PSC содержит значение для загрузки в активный регистр прескалера на каждом событии обновления (включая ситуации, когда счетчик очищается битом UG регистра TIMx_EGR или через контроллер триггера, когда он сконфигурирован в "reset mode").

Смещение адреса: 0x2C
Значение сброса: 0xFFFF

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
ARR[15:0]
rw

ARR[15:0]: значение автозагрузки для счетчика. ARR представляет значение для загрузки в актуальный регистр автозагрузки. См. секцию "Блок базы времени" (раздел "Функциональное описание TIM1 и TIM8") для получения дополнительной информации по обновлению и поведению ARR. Счетчик блокируется, пока значение автозагрузки равно null.

Смещение адреса: 0x30
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
REP[7:0]
rw

Биты 15:8 зарезервированы, и должны находиться в состоянии сброса (нули).

REP[7:0] (биты 7:0): значение счетчика повторений. Эти биты дают возможность настроить частоту обновления регистров сравнения (например, периодических передач значений из регистров предзагрузки в активные регистры), когда регистры предзагрузки разрешены, а также дают возможность настроить частоту генерации прерывания обновления, если это прерывание разрешено.

Каждый раз, когда считающий вниз счетчик, связанный с REP_CNT, достигает 0, генерируется событие обновления и счетчик перезапускается от значения REP. Поскольку REP_CNT перезагружается значением REP только на событии обновления счетчика повторений (repetition update event U_RC), любая запись в регистр TIMx_RCR не учитывается до того момента, когда произойдет следующее событие обновления счетчика повторений.

Это означает, что в режиме PWM (REP+1) соответствует следующему:

   – количеству периодов PWM в режиме выравнивания импульса ШИМ по срезу (edge-aligned mode).
   – количеству полупериодов PWM в режиме выравнивания импульса ШИМ по центру (center-aligned mode).

Смещение адреса: 0x34
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CCR1[15:0]
rw/ro

CCR1[15:0]: значение Capture/Compare 1. Если канал CC1 сконфигурирован как выход: CCR1 это значение, которое загружается в актуальный регистр Capture/Compare 1 (значение предзагрузки). Оно загружается перманентно, если функция предзагрузки не выбрана битом OC1PE регистра TIMx_CCMR1. Иначе значение предзагрузки копируется в активный регистр Capture/Compare 1, когда происходит событие обновления. Активный регистр Capture/Compare содержит значение для сравнения со счетчиком TIMx_CNT, и об этом сигнализирует выход OC1.

Если канал CC1 сконфигурирован как вход: CCR1 это значение счетчика, переданное последним событием захвата 1 по входу (IC1). Регистр TIMx_CCR1 работает только на чтение, и не может быть запрограммирован.

Смещение адреса: 0x38
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CCR2[15:0]
rw/ro

CCR2[15:0]: значение Capture/Compare 2. Если канал CC2 сконфигурирован как выход: CCR2 это значение, которое загружается в актуальный регистр Capture/Compare 2 (значение предзагрузки). Оно загружается перманентно, если функция предзагрузки не выбрана битом OC2PE регистра TIMx_CCMR2. Иначе значение предзагрузки копируется в активный регистр Capture/Compare 2, когда происходит событие обновления. Активный регистр Capture/Compare содержит значение для сравнения со счетчиком TIMx_CNT, и об этом сигнализирует выход OC2.

Если канал CC2 сконфигурирован как вход: CCR2 это значение счетчика, переданное последним событием захвата 2 по входу (IC2). Регистр TIMx_CCR2 работает только на чтение, и не может быть запрограммирован.

Смещение адреса: 0x3C
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CCR3[15:0]
rw/ro

CCR3[15:0]: значение Capture/Compare 3. Если канал CC3 сконфигурирован как выход: CCR3 это значение, которое загружается в актуальный регистр Capture/Compare 3 (значение предзагрузки). Оно загружается перманентно, если функция предзагрузки не выбрана битом OC3PE регистра TIMx_CCMR3. Иначе значение предзагрузки копируется в активный регистр Capture/Compare 3, когда происходит событие обновления. Активный регистр Capture/Compare содержит значение для сравнения со счетчиком TIMx_CNT, и об этом сигнализирует выход OC3.

Если канал CC3 сконфигурирован как вход: CCR3 это значение счетчика, переданное последним событием захвата 3 по входу (IC3). Регистр TIMx_CCR3 работает только на чтение, и не может быть запрограммирован.

Смещение адреса: 0x40
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CCR4[15:0]
rw/ro

CCR4[15:0]: значение Capture/Compare 4. Если канал CC4 сконфигурирован как выход: CCR4 это значение, которое загружается в актуальный регистр Capture/Compare 4 (значение предзагрузки). Оно загружается перманентно, если функция предзагрузки не выбрана битом OC4PE регистра TIMx_CCMR4. Иначе значение предзагрузки копируется в активный регистр Capture/Compare 4, когда происходит событие обновления. Активный регистр Capture/Compare содержит значение для сравнения со счетчиком TIMx_CNT, и об этом сигнализирует выход OC4.

Если канал CC4 сконфигурирован как вход: CCR4 это значение счетчика, переданное последним событием захвата 4 по входу (IC4). Регистр TIMx_CCR4 работает только на чтение, и не может быть запрограммирован.

Смещение адреса: 0x44
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
MOE
rw
AOE
rw
BKP
rw
BKE
rw
OSSR
rw
OSSI
rw
LOCK[1:0]
rw
DTG[7:0]
rw

Примечание: поскольку биты AOE, BKP, BKE, OSSI, OSSR и DTG[7:0] могут быть заблокированы для записи в зависимости от конфигурации LOCK, то может быть необходимо сконфигурировать их все во время первого доступа на запись в регистр TIMx_BDTR.

MOE (бит 15): Main Output Enable. Этот бит асинхронно очищается аппаратурой, как только вход break становится активным. Бит MOE устанавливается программой или автоматически, в зависимости от бита AOE. Бит MOE действует только на тех каналах, которые сконфигурированы как выход.

0: выходы OC и OCN запрещены и принудительно переведены в состояние ожидания (idle state).
1: выходы OC и OCN разрешены, если установлены их соответствующие биты разрешения (биты CCxE, CCxNE в регистре TIMx_CCER). Для подробностей см. описание OC/OCN в описании регистра TIMx_CCER.

AOE (бит 14): Automatic Output Enable.

0: бит MOE можно установить только из программы.
1: бит MOE может быть установлен программой или автоматически на следующем событии обновления (если вход break не активен).

Примечание: этот бит не может быть модифицирован, пока не будет запрограммирован уровень блокировки 1 (битами LOCK в регистре TIMx_BDTR).

BKP (бит 13): BreaK Polarity (полярность сигнала break).

0: у входа остановки BRK активный уровень лог. 0.
1: у входа остановки BRK активный уровень лог. 1.

Примечание: этот бит нельзя запрограммировать, пока не будет установлен уровень 1 блокировки (битами LOCK в регистре TIMx_BDTR). Любая операция записи в этот бит получает задержку длительностью 1 такт шины APB перед тем, как остановка вступит в действие.

BKE (бит 12): BreaK Enable.

0: входы Break (событие BRK и событие отказа тактов CSS) запрещены.
1: входы Break (событие BRK и событие отказа тактов CSS) разрешены.

Примечание: этот бит нельзя запрограммировать, пока не будет установлен уровень 1 блокировки (битами LOCK в регистре TIMx_BDTR). Любая операция записи в этот бит получает задержку длительностью 1 такт шины APB перед тем, как бит вступит в действие.

OSSR (бит 11): Off-State Selection for Run mode. Этот бит используется, когда MOE=1 на каналах, у которых есть комплементарные выходы, сконфигурированные на вывод. OSSR не реализован, если в таймере нет комплементарного выхода. Для получения дополнительной информации см. описание разрешения OC/OCN в описании регистра TIMx_CCER.

0: в состоянии неактивности выходы OC/OCN запрещены (разрешение вывода сигнала OC/OCN = 0).
1: в состоянии неактивности, выходы OC/OCN разрешены их неактивными уровнями, как только CCxE=1 или CCxNE=1. Тогда разрешение вывода выходного сигнала OC/OCN = 1.

Примечание: этот бит не может быть модифицирован, пока не будет запрограммирован уровень блокировки 2 (битами LOCK в регистре TIMx_BDTR).

OSSI (бит 10): Off-State Selection for Idle mode. Этот бит используется, когда MOE=0 на каналах, сконфигурированных как выходы. Для получения дополнительной информации см. описание разрешения OC/OCN в описании регистра TIMx_CCER.

0: в состоянии неактивности выходы OC/OCN запрещены (разрешение вывода сигнала OC/OCN = 0).
1: в состоянии неактивности выходы OC/OCN сначала переводятся в их уровень ожидания (idle level) как только CCxE=1 или CCxNE=1. Разрешение вывода выходного сигнала OC/OCN = 1.

Примечание: этот бит не может быть модифицирован, пока не будет запрограммирован уровень блокировки 2 (битами LOCK в регистре TIMx_BDTR).

LOCK[1:0] (биты 9:8): конфигурация блокировки. Эти биты предоставляют защиту от записи, предохраняющую от ошибочных действий в программе.

00: LOCK OFF - ни один бит не защищен от записи.
01: LOCK Level 1, уровень блокировки 1. Биты DTG в регистре TIMx_BDTR, биты OISx и OISxN в регистре TIMx_CR2 и биты BKE/BKP/AOE в регистре TIMx_BDTR больше не могут быть записаны.
10: LOCK Level 2 = LOCK Level 1 + не могут быть записаны биты полярности CC (биты CCxP/CCxNP в регистре TIMx_CCER, пока соответствующий канал сконфигурирован на выход битами CCxS), а также не могут быть записаны биты OSSR и OSSI.
11: LOCK Level 3 = LOCK Level 2 + не могут быть записаны биты управления CC (биты OCxM и OCxPE в регистрах TIMx_CCMRx, пока соответствующий канал сконфигурирован на выход битами CCxS).

Примечание: биты LOCK могут быть записаны только один раз после сброса. Как только был записан регистр TIMx_BDTR, из содержимое замораживается до следующего сброса.

DTG[7:0] (биты 7:0): настройка Dead-Time Generator. Это битовое поле определяет задержку мертвого времени, вставляемую между комплементарными выходами. DT соответствует этой задержке.

DTG[7:5] = 0xx => DT = DTG[7:0] x tdtg с Tdtg = tDTS.
DTG[7:5] = 10x => DT = (64+DTG[5:0]) x tdtg с Tdtg = 2 x tDTS.
DTG[7:5] = 110 => DT = (32+DTG[4:0]) x tdtg с Tdtg = 8 x tDTS.
DTG[7:5] = 111 => DT = (32+DTG[4:0]) x tdtg с Tdtg = 16 x tDTS.

Например, если TDTS = 125 нс (8 МГц), то возможные значения мертвого времени:

0 .. 15875 нс с шагом 125 нс,
16 .. 31750 нс с шагом 250 нс,
32 .. 63 мкс с шагом 1 мкс,
64 .. 126 мкс с шагом 2 мкс.

Примечание: это битовое поле не может быть модифицировано, пока не будет запрограммирован уровень блокировки 1, 2 или 3 (битами LOCK в регистре TIMx_BDTR).

Смещение адреса: 0x48
Значение сброса: 0x0000

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано DBL[4:0]
rw

зарезервировано
DBA[4:0]
rw

Биты 15:13 зарезервированы, и должны находиться в состоянии сброса (нули).

DBL[4:0] (биты 12:8): длина пакета DMA (DMA Burst Length). Этот 5-разрядный вектор определяет количество передач DMA (таймер детектирует burst transfer, когда происходит доступ на чтение или запись к регистру TIMx_DMAR).

00000: 1 транзакция (transfer).
00001: 2 транзакции.
00010: 3 транзакции.
...
10001: 18 транзакций.

Биты 7:5 зарезервированы, и должны находиться в состоянии сброса (нули).

DBA[4:0] (биты 4:0): DMA Base Address. Этот 5-битный вектор определяет базовый адрес для транзакций DMA (когда происходит доступ на чтение/запись через адрес TIMx_DMAR). DBA определен как смещение, начинающееся от адреса регистра TIMx_CR1.

Пример:

00000: TIMx_CR1.
00001: TIMx_CR2.
00010: TIMx_SMCR.
...

Пример. Предположим следующую транзакцию: DBL = 7 транзакций, и DBA = TIMx_CR1. В этом случае передача выполняется в/из 7 регистров, начиная с адреса TIMx_CR1.

Смещение адреса: 0x4C
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
DMAB[31:16]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
DMAB[15:0]
rw

DMAB[31:0]: DMA register for Burst accesses. Операция чтения или записи с регистром DMAR осуществляет доступ к регистру, находящемуся по адресу:

(адрес TIMx_CR1) + (DBA + индекс DMA) x 4

Здесь TIMx_CR1 это адрес регистра управления 1, DBA это базовый адрес, сконфигурированный в регистре TIMx_DCR, DMA index автоматически управляется передачей DMA, и принимает значения от 0 до DBL (DBL конфигурируется в TIMx_DCR).

[Пример использования функции DMA burst]

В этом примере функция таймера DMA используется для обновления содержимого регистров CCRx (x = 2, 3, 4) с DMA, передающем половинки слов в регистры CCRx. Это реализуется следующими шагами:

1. Конфигурируется соответствующий канал DMA.

   – Записывается адрес DMA периферии канала в регистр адреса DMAR.
   – Записывается адрес DMA канала памяти, который указывает на буфер в RAM, где содержатся данные, передаваемые DMA в регистры CCRx.
   – Записывается количество данных для передач = 3 (см. примечание далее).
   – Запрещается кольцевой режим.

2. Конфигурируется регистр DCR записью полей бит DBA и DBL:

   DBL = 3 передачи, DBA = 0xE.

3. Разрешается запрос DMA обновления TIMx (устанавливается бит UDE в регистре DIER).

4. Разрешается TIMx.

5. Разрешается канал DMA.

Примечание: это пример для случая, где каждый регистр CCRx обновляется один раз. Если например каждый регистр CCRx должен обновляться дважды, то количество передаваемых данных должно быть 6. Возьмем для примера буфер в RAM, содержащий data1, data2, data3, data4, data5 и data6. Передаваемые в регистры CCRx данные будут проходить следующим образом: на первом запросе обновления DMA данные data1 будут переданы в CCR2, data2 в CCR3, data3 в CCR4, и на втором запросе обновления DMA будут переданы данные data4 в CCR2, data5 в CCR3 и data6 в CCR4.

[Ссылки]

1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com.
2. Руководство по использованию обычных таймеров STM32.

 

Комментарии  

 
+3 #2 Дима Статченко 22.12.2020 09:29
Спасибо автору за труд.
Цитировать
 
 
+3 #1 Сергей 22.04.2020 14:51
Сильно помогло в освоении STM32F4xx. По-моему не хватает описания регистров TIMx_OR.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page