[Home] [< Prev: Функции таймера TIM1 и примеры использования] [Next: Базовые таймеры TIM6 и TIM7 >]


Регистры таймера TIM1

Оглавление
Таймер TIM1 с расширенным управлением Регистры таймера TIM1 TIMx_CR1 (TIM1 control register 1) TIMx_CR2 (TIM1 control register 2) TIMx_SMCR (TIM1 slave mode control register) TIMx_DIER (TIM1 DMA/interrupt enable register) TIMx_SR (TIM1 status register) TIMx_EGR (TIM1 event generation register) TIMx_CCMR1 (TIM1 capture/compare mode register 1) TIMx_CCMR2 (TIM1 capture/compare mode register 2) TIMx_CCER (TIM1 capture/compare enable register) TIMx_CNT (TIM1 counter) TIMx_PSC (TIM1 prescaler) TIMx_ARR (TIM1 auto-reload register) TIMx_RCR (TIM1 repetition counter register) TIMx_CCR1 (TIM1 capture/compare register 1) TIMx_CCR2 (TIM1 capture/compare register 2) TIMx_CCR3 (TIM1 capture/compare register 3) TIMx_CCR4 (TIM1 capture/compare register 4) TIMx_BDTR (TIM1 break and dead-time register) TIMx_DCR (TIM1 DMA control register) TIMx_DMAR (TIM1 DMA address for full transfer)

TIMx_CR1 (TIM1 control register 1)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved CKD[1:0] ARPE CMS[1:0] DIR OPM URS UDIS CEN
rw rw rw rw rw rw/r* rw rw rw rw

Регистр управления 1

Address offset: 0x00
Reset value: 0x0000

Reserved
Зарезервированные биты регистра, при чтении в этих битах всегда возвращается 0.
CKD[1:0]: Clock division
Делитель частоты тактового сигнала.
Это битовое поле определяет коэффициент деления частоты для формирования вспомогательного тактового сигнала, период которого обозначим как tDTS, из тактового сигнала таймера (сигнал CK_INT). Полученный тактовый сигнал используется для формирования времени запаздывания в случае работы в режиме PWM с комплементарными выходами (dead-time, или защитная пауза - время на переключение ключей в управляемом силовом каскаде для предотвращения сквозных токов), а также используется как тактовый сигнал для сэмплирования в цифровых фильтрах на входах таймера (ETR, TIx). Если период тактового сигнала таймера равен TCK_INT, то в зависимости от значения в данном битовом поле, период тактового сигнала tDTS будет равен:
00: tDTS=tCK_INT.
01: tDTS=2*tCK_INT.
10: tDTS=4*tCK_INT.
11: зарезервированное значение, не следует использовать.
ARPE: Auto-reload preload enable
Бит включения режима предзагрузки для регистра ARR.
0: регистр TIMx_ARR не буферизируется (т.е. используется прямая запись в TIMx_ARR).
1: регистр TIMx_ARR буферизируется (при записи/чтении регистра TIMx_ARR происходит доступ к буферному для него регистру; после модификации буферного регистра, таймер продолжает работу в прежнем режиме до наступления события обновления, после чего содержимое буфера будет помещено в теневой регистр).
CMS[1:0]: Center-aligned mode selection
Битовое поле используется для выбора режима с выравниванием по краю или одного из режимов с выравниванием по центру.
00: режим с выравниванием по краю; счёт ведётся вверх или вниз (режим суммирующего или вычитающего счётчика) в зависимости от значения бита направления DIR.
01: режим 1 с выравниванием по центру; счёт ведётся вверх и вниз поочерёдно; только при счёте вниз происходит установка флага прерывания сравнения для каналов, которые сконфигурированы как выходы (CCxS=00 в регистре TIMx_CCMRx).
10: режим 2 с выравниванием по центру; счёт ведётся вверх и вниз поочерёдно; только при счёте вверх происходит установка флага прерывания сравнения для каналов, которые сконфигурированы как выходы (CCxS=00 в регистре TIMx_CCMRx).
11: режим 3 с выравниванием по центру; счёт ведётся вверх и вниз поочерёдно; установка флага прерывания сравнения для каналов, которые сконфигурированы как выходы (CCxS=00 в регистре TIMx_CCMRx) происходит как при счёте вверх, так и при счёте вниз.
Примечание.
Не допускается переключение из режима с выравниванием по краю в режим с выравниванием по центру при включённом счётчике (когда CEN=1).
DIR: Direction
Направление счёта.
0: счётчик таймера работает в режиме суммирующего счётчика (счёт вверх).
1: счётчик таймера работает в режиме вычитающего счётчика (счёт вниз).
Примечание.
* В случае, если таймер сконфигурирован для работы в режиме с выравниванием по центру или режиме энкодера, бит DIR доступен только для чтения.
OPM: One pulse mode
Режим одиночного импульса.
0: счётчик таймера не останавливается при возникновении события обновления.
1: счётчик таймера останавливается при возникновении события обновления (происходит аппаратный сброс бита CEN).
URS: Update request source
Источник запроса на обновление.
Этот бит используется для программного выбора событий, которые будут вызывать генерацию события обновления (UEV).
0: любое из следующих событий приводит к генерации прерывания обновления или запроса DMA, если это разрешено:
 - переполнение/антипереполнение счётчика;
 - установка бита UG;
 - обновление, генерируемое с помощью контроллера подчинённого режима.
1: только переполнение/антипереполнение счётчика таймера сопровождается генерацией UEV.
UDIS: Update disable
Этот бит используется для программного разрешения/запрета генерации события обновления (UEV).
0: разрешена генерация UEV; случаи, в которых генерируется UEV, определяются значением бита URS.
1: отключена генерация UEV; теневые регистры буферизируемых регистров сохраняют свои значения неизменными (ARR, PSC, CCRx); однако, счётчик и предделитель сбрасываются при установке бита UG или при получении сигнала аппаратного сброса от контроллера подчинённого режима.
CEN: Counter enable
Включение счётчика.
0: счётчик отключён.
1: счётчик включён.
Примечания.
1. Требуется программная установка данного бита при работе от внешнего тактового сигнала, работе в ждущем режиме (Gated mode) или режиме энкодера. Однако, в триггерном режиме (Trigger mode), бит CEN может быть установлен автоматически аппаратными средствами.
2. Бит сбрасывается аппаратно в режиме одиночного импульса.
3. Счёт начинается спустя 1 такт после установки бита CEN.

TIMx_CR2 (TIM1 control register 2)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Res. OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 TI1S MMS[2:0] CCDS CCUS Res. CCPC
rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр управления 2

Address offset: 0x04
Reset value: 0x0000

Reserved
Зарезервированные биты регистра, при чтении в этих битах всегда возвращается 0.
OISy, y=1..4: Output Idle state y (OCy output), y=1..4
Этот бит определяет логический уровень сигнала на выходе канала OCy в состоянии ожидания (Idle state), т.е. когда бит MOE в регистре TIMx_BDTR сброшен:
0: OCy=0, если MOE=0 (если имеется комплементарный выход OCyN, то уровень OCy=0 на выходе устанавливается по истечении времени задержки, dead-time).
1: OCy=1, если MOE=0 (если имеется комплементарный выход OCyN, то уровень OCy=1 на выходе устанавливается по истечении времени задержки, dead-time).
Примечание.
Состояние выхода в режиме ожидания может не соответствовать заданному битом OISy, подробнее - в примечаниях к описанию бита OISyN.
OISyN, y=1..3: Output Idle state y (OCyN output), y=1..3
Этот бит определяет логический уровень сигнала на выходе OCyN в состоянии бездействия (Idle state):
0: OCyN=0, если MOE=0 (уровень OCyN=0 на выходе устанавливается по истечении времени задержки, dead-time).
1: OCyN=1, если MOE=0 (уровень OCyN=1 на выходе устанавливается по истечении времени задержки, dead-time).
Примечания.
1. В данном семействе микроконтроллеров канал 4 имеет только один выход OC4 (комплементарный выход отсутствует).
2. Если оба бита OISy, OISyN соответствуют активным уровням на выходах, т.е. OISy = not CCyP и OISyN = not CCyNP, то в состоянии ожидания на обоих указанных выходах будет установлен неактивный уровень, т.е. OCy=CCyP и OCyN=CCyNP (смотрите также описание битов CCyP, CCyNP регистра TIMx_CCER). То есть, возможны ситуации, когда состояния выходов будут не равны заданным!
3. Биты OISx, OISxN не могут быть модифицированы, если LOCK уровень отличен от 0 (уровень задаётся битовым полем LOCK в регистре TIMx_BDTR).
TI1S: TI1 selection
Выбор TI1.
Этот бит используется для выбора источника сигнала TI1 (вход первого канала; для остальных каналов вариантов нет - если используется вход TIy, где y=2..4, то сигнал на вход подаётся с вывода TIM1_CHy микроконтроллера).
0: к входу TI1 подключается вывод TIMy_CH1 микроконтроллера;
1: на вход TI1 подаётся XOR (исключающее ИЛИ) от сигналов с выводов TIMx_CH1, CH2 и CH3 (TI1=CH1 xor CH2 xor CH3).
MMS[1:0]: Master mode selection
Выбор мастер-режима (при совместной работе нескольких таймеров, когда один является управляющим, а другие - подчинёнными). Битовое поле позволяет указать, каким образом должен формироваться внутренний выходной сигнал TRGO для управления подчинёнными таймерами. Возможны следующие варианты:
000: Reset - сброс, в качестве сигнала TRGO используется бит UG регистра TIMx_EGR. Если сброс выполняется входным триггерным сигналом (контроллер подчинённого режима сконфигурирован в режиме перезагрузки), то сигнал TRGO задерживается относительно действительного момента сброса.
001: Enable - включение, в качестве сигнала TRGO используется сигнал запуска счёта CNT_EN. Режим может использоваться, например, для одновременного запуска нескольких таймеров или для управления окном, на протяжении которого включён подчинённый таймер. Сигнал CNT_EN является результатом логической операции OR (ИЛИ) между управляющим битом CEN и входным триггерным сигналом при работе таймера в стробирующем режиме (gated mode). Если сигнал CNT_EN управляется входным триггерным сигналом, тогда TRGO формируется с задержкой, за исключением случая, когда выбран режим master/slave (смотрите описание бита MSM регистра TIMx_SMCR).
010: Update - событие обновления формирует сигнал TRGO. Это, например, позволяет использовать таймер в качестве предделителя для подчинённого таймера (таким образом могут быть сформированы весьма продолжительные интервалы времени).
011: Compare Pulse - импульс TRGO формируется тогда, когда устанавливается флаг CC1IF (даже если он уже содержал значение 1), это происходит при входной фиксации или при срабатывании схемы сравнения.
100: Compare - сигнал OC1REF используется в качестве TRGO.
101: Compare - сигнал OC2REF используется в качестве TRGO.
110: Compare - сигнал OC3REF используется в качестве TRGO.
111: Compare - сигнал OC4REF используется в качестве TRGO.
CCDS: Capture/compare DMA selection
Бит определяет, в каких случаях формируется запрос DMA:
0: CCx запрос DMA формируется, когда происходит событие CCx.
1: CCx запрос DMA формируется, когда происходит событие обновления.
CCUS: Capture/compare control update selection
Бит определяет, в каких случаях происходит обновление битов управления захватом/сравнением (capture/compare control bits: CCxE, CCxNE и OCxM), если используется предзагрузка этих битов, т.е. при установленном бите CCPC (CCPC=1).
0: обновление происходит только при установке бита COMG.
1: обновление происходит при установке бита COMG или по нарастающему фронту на TRGI.
Примечание.
Этот бит действует только на те каналы, которые имеют комплементарный выход.
CCPC: Capture/compare preloaded control
Этот бит используется для включения буферизации битов CCxE, CCxNE и OCxM, которые управляют каналами фиксации/сравнения.
0: предзагрузка указанных битов не используется.
1: предзагрузка используется, после модификации битов новое значение действует только после события COM (commutation event, возникает при установке бита COMG или по нарастающему фронту сигнала TRGI, в зависимости от значения бита CCUS - смотрите выше).
Примечание.
Этот бит действует только на те каналы, которые имеют комплементарный выход.

TIMx_SMCR (TIM1 slave mode control register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
ETP ECE ETPS[1:0] ETF[3:0] MSM TS[2:0] Res. SMS[2:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр управления подчинённым режимом таймера

Address offset: 0x08
Reset value: 0x0000

Reserved
Зарезервировано, значение после сброса должно оставаться в данном бите неизменным.
ETP: External trigger polarity
Выбор сигнала, используемого как триггерный сигнал (сигнал запуска операций): ETR или его инверсия not ETR.
0: ETR не инвертируется, активным является высокий уровень или нарастающий фронт.
1: ETR инвертируется, активным является низкий уровень или спад сигнала.
ECE: External clock enable
Этот бит включает режим 2 внешнего тактового сигнала.
0: второй режим внешнего тактового сигнала отключён.
1: второй режим внешнего тактового сигнала включён; счётчик тактируется каждым активным фронтом сигнала ETRF.
Примечания.
1. Установка бита ECE даёт тот же самый эффект, что и выбор первого режима внешнего тактового сигнала с подключением TRGI к ETRF (SMS=111 and TS=111).
2. Возможно использовать режим 2 внешнего тактового сигнала совместно с режимами подчинённого таймера: сброса (reset mode), стробирования (gated mode) и триггерного (trigger mode). При этом TRGI не должен быть подключён к ETRF (биты TS не должны быть установлены в 111).
3. Если одновременно включены режимы 1 и 2 внешнего тактового сигнала, входом внешнего тактового сигнала будет являться ETRF.
ETPS[1:0]: External trigger prescaler
Предделитель внешнего триггерного сигнала.
Частота сигнала ETRP на выходе предделителя частоты внешнего триггерного сигнала ETR (External trigger signal) не должна превышать 1/4 от частоты TIMxCLK. Предделитель оказывается полезным в случае достаточно высокочастотных внешних сигналов, позволяя снизить частоту до требуемых пределов. Коэффициент деления равен 2ETPS, ETPS - значение данного битового поля, которое можно выбрать из диапазона 0..3:
00..11: коэффициент деления предделителя соответственно равен 1, 2, 4, 8.
ETF[3:0]: 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: Master/slave mode
Бит для включения режима master/slave.
0: режим отключён.
1: режим включён: вводится задержка между сигналом запуска на входе TRGI и его воздействием на таймер для достижения точной синхронизации между данным таймером и его подчинёнными таймерами (которые управляются сигналом TRGO; смотрите также описание битового поля MMS в регистре TIMx_CR2). Этот режим может быть полезен, если требуется синхронизация нескольких таймеров одним внешним событием.
TS[2:0]: Trigger selection
Это битовое поле позволяет выбрать входной триггерный сигнал для синхронизации счётчика.
000: Internal Trigger 0 (ITR0) - внутренний триггерный сигнал 0.
001: Internal Trigger 1 (ITR1) - внутренний триггерный сигнал 1.
010: Internal Trigger 2 (ITR2) - внутренний триггерный сигнал 2.
011: Internal Trigger 3 (ITR3) - внутренний триггерный сигнал 3.
100: TI1 Edge Detector (TI1F_ED) - детектор фронта сигнала TI1.
101: Filtered Timer Input 1 (TI1FP1) - сигнал TI1 (после цифрового фильтра).
110: Filtered Timer Input 2 (TI2FP2) - сигнал TI2 (после цифрового фильтра).
111: External Trigger input (ETRF) - внешний триггерный вход ETRF.
Примечание.
Изменять биты данного битового поля допустимо, только если они не используются, т.е. когда SMS=000, в противном случае возможно ошибочное обнаружение фронта при переключении.
Используются следующие внутренние подключения между входными сигналами ITRx и выходными сигналами TRGO таймеров микроконтроллера:
ITR0 (TS=000) - подключение к таймеру TIM5 или TIM15 (TIM5 имеется только в линейке "high density value line devices"; в этом случае выбор между TIM5 и TIM15 осуществляется с помощью бита MISC_REMAP в регистре AFIO_MAPR2);
ITR1 (TS=001) - подключение к таймеру TIM2;
ITR2 (TS=010) - подключение к таймеру TIM3;
ITR3 (TS=011) - подключение к таймеру TIM4.
SMS[2:0]: Slave mode selection
Выбор подчинённого режима.
Битовое поле позволяет выбрать один из доступных вариантов подчинённого режима работы таймера. При выборе внешних сигналов, активный (запускающий) фронт сигнала (TRGI) определяется выбранной полярностью для внешнего входа.
000: подчинённый режим отключён; в этом случае при CEN=1 на предделитель поступает внутренний тактовый сигнал.
001: режим 1 энкодера - счёт вверх/вниз по фронту на TI2FP1; направление счёта определяется уровнем сигнала TI1FP2.
010: режим 2 энкодера - счёт вверх/вниз по фронту на TI1FP2; направление счёта определяется уровнем сигнала TI2FP1.
011: режим 3 энкодера - счёт вверх/вниз по фронту на любом из двух входов TI1FP1, TI2FP2; направление счёта при прохождении импульса на одном входе определяется уровнем сигнала в этот момент на другом входе.
100: Reset Mode, режим сброса - нарастающий фронт сигнала на выбранном триггерном входе (TRGI) сбрасывает счётчик и обновляет регистры.
101: Gated Mode, стробирующий режим - таймер выполняет счёт при высоком уровне сигнала на триггерном входе (TRGI); счётчик останавливается (но не сбрасывается) при переходе сигнала на запускающем входе к низкому уровню; таким образом, внешний сигнал управляет как запуском, так и остановкой счётчика.
110: Trigger Mode, триггерный режим - счётчик запускается (но не сбрасывается) нарастающим фронтом сигнала на триггерном входе TRGI; в отличие от стробирующего режима (Gated Mode), контролируется только запуск счётчика.
111: External Clock Mode 1, режим 1 внешнего тактового сигнала - счётчик тактируется нарастающими фронтами на выбранном триггерном входе (TRGI).
Примечание.
"Gated Mode" (стробирующий режим) не должен использоваться, если в качестве триггерного входа выбран TI1F_ED (TS=100). Действительно, TI1F_ED выводит единичный импульс (кратковременный переход в 1, затем происходит возврат к уровню 0) при каждом перепаде сигнала на TI1F, тогда как в стробирующем режиме управление осуществляется уровнем запускающего сигнала (счёт происходит при высоком уровне сигнала).

TIMx_DIER (TIM1 DMA/interrupt enable register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Res. TDE COMDE CC4DE CC3DE CC2DE CC1DE UDE BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр разрешения запросов DMA и прерываний

Address offset: 0x0C
Reset value: 0x0000

Reserved
Зарезервировано, значение после сброса должно оставаться в данном бите неизменным.
Биты данного регистра позволяют разрешать или запрещать генерацию запросов DMA и прерываний в ответ на установку соответствующих битов в регистре состояния TIMx_SR, которая происходит в случае возникновения определённых событий в таймере (или программно с помощью регистра TIMx_EGR). Нулевое значение бита запрещает генерацию запроса или прерывания, единичное - разрешает. Назначение битов следующее:
TDE: Trigger DMA request enable
запрет/разрешение запросов DMA в ответ на триггерный сигнал (сигнал запуска, trigger); здесь и далее для битов этого регистра, как сказано выше, значение 0 запрещает генерацию запроса, значение 1 разрешает.
COMDE: COM DMA request enable
разрешает запрос DMA по сигналу COM.
CC4DE: Capture/Compare 4 DMA request enable
разрешает запрос DMA в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 4.
CC3DE: Capture/Compare 3 DMA request enable
разрешает запрос DMA в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 3.
CC2DE: Capture/Compare 2 DMA request enable
разрешает запрос DMA в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 2.
CC1DE: Capture/Compare 1 DMA request enable
разрешает запрос DMA в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 1.
UDE: Update DMA request enable
разрешает запрос DMA в случае события обновления.
BIE: Break interrupt enable
разрешает прерывание в случае останова (при срабатывании схемы защитного отключения выходов таймера).
TIE: Trigger interrupt enable
разрешает прерывание в ответ на триггерный сигнал (сигнал запуска, trigger).
COMIE: COM interrupt enable
разрешает прерывание по сигналу COM.
CC4IE: Capture/Compare 4 interrupt enable
разрешает прерывание в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 4.
CC3IE: Capture/Compare 3 interrupt enable
разрешает прерывание в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 3.
CC2IE: Capture/Compare 2 interrupt enable
разрешает прерывание в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 2.
CC1IE: Capture/Compare 1 interrupt enable
разрешает прерывание в случае выполнения входной фиксации или срабатывания схемы сравнения в канале 1.
UIE: Update interrupt enable
разрешает прерывание в случае, когда происходит событие обновления.

TIMx_SR (TIM1 status register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved CC4OF CC3OF CC2OF CC1OF Res. BIF TIF COMIF CC4IF CC3IF CC2IF CC1IF UIF
rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0

Регистр состояния таймера

Address offset: 0x10
Reset value: 0x0000

Данный регистр имеет особенности при выполнении записи в него: запись 1 в некоторый бит регистра не изменяет значение в этом бите, а запись 0 в бит сбрасывает этот бит. Данный режим доступа обозначен в таблице как "rc_w0" (read/clear by writing 0: доступен для чтения и для сброса записью 0). Таким образом, возможен только программный сброс битов, установка происходит только аппаратно.

Reserved
Зарезервировано, значения после сброса должны оставаться в данных битах неизменными.
CCyOF, y=1..4 (CC1OF, CC2OF, CC3OF, CC4OF): Capture/Compare y (y=1..4) overcapture flag
Переполнение флага входной фиксации (при работе канала в режиме входа); устанавливается аппаратно в случае, если происходит фиксация значения счётчика в данном канале (фиксируемое значение помещается в регистр TIMx_CCRy, y=1..4) и при этом флаг фиксации CCyIF у этого канала уже установлен. Сброс бита выполняется программно путём записи в него значения 0.
0: переполнения флага входной фиксации не происходило.
1: обнаружено переполнение флага входной фиксации.
BIF: Break interrupt flag
Этот флаг устанавливается аппаратно сразу же, как только на входе останова (защитного отключения выходов таймера) устанавливается активный уровень сигнала. Флаг может быть сброшен программно, если на входе защитного отключения сигнал имеет неактивный уровень.
0: не происходило защитной остановки таймера.
1: на входе защитной остановки таймера был обнаружен активный уровень сигнала.
TIF: Trigger interrupt flag
Этот флаг устанавливается аппаратно триггерным событием (trigger event), которое возникает под действием активного фронта сигнала на входе TRGI при включённом контроллере подчинённого режима во всех режимах, кроме стробирующего. Флаг сбрасывается программно.
0: триггерное событие не происходило.
1: обнаружено триггерное событие.
COMIF: COM interrupt flag
Этот флаг устанавливается аппаратно событием COM (когда обновляются биты управления фиксацией/сравнением: CCxE, CCxNE, OCxM). Сбрасывается программно.
0: не происходило события COM.
1: обнаружено событие COM.
CCyIF, y=1..4 (CC1IF, CC2IF, CC3IF, CC4IF): Capture/Compare y=1..4 interrupt flag
Смысл бита зависит от режима работы канала.
При работе в режиме сравнения (compare), когда канал используется для формирования выходного сигнала
Этот флаг устанавливается аппаратно, когда значение в счётчике соответствует значению в регистре сравнения для данного канала y, за исключением некоторых случаев при работе в режиме с выравниванием по центру (смотрите описание бита CMS в регистре TIMx_CR1). Сброс флага выполняется программно.
0: не зафиксировано совпадения.
1: установка бита происходит при обнаружении равенства содержимого счётчика и содержимого регистра TIMx_CCRy в данном канале; в случае, если TIMx_CCRy превышает значение в регистре перезагрузки TIMx_ARR (а значит, счётчик никогда не достигнет значения в регистре сравнения), то бит устанавливается в 1 при переполнении счётчика (в режимах счёта вверх и вверх/вниз) или антипереполнении (в режиме счёта вниз).
При работе в режиме фиксации (capture), когда канал используется для работы с входным сигналом
Этот бит устанавливается аппаратно в момент выполнения входной фиксации. Сбрасывается программно записью значения 0 в данный бит или при чтении регистра TIMx_CCRy, в который было помещено зафиксированное значение счётчика.
0: входная фиксация не происходила.
1: была выполнена входная фиксация значения в счётчике, т.е. содержимое счётчика сохранено в регистре TIMx_CCRy; фиксация значения происходит в момент обнаружения фронта выбранной полярности на входе канала.
UIF: Update interrupt flag
Этот флаг устанавливается аппаратно при возникновении события обновления. Сброс бита производится программно.
0: событие обновление не происходило.
1: обнаружено событие обновления; бит устанавливается аппаратно, когда происходит обновление регистров при:
 - переполнении и антипереполнении с учётом счётчика повторений (обновление происходит, если содержащееся в счётчике повторений значение равно 0), если в регистре TIMx_CR1 бит UDIS=0;
 - программном обновлении CNT установкой бита UG в регистре TIMx_EGR, если URS=0 и UDIS=0 в регистре TIMx_CR1;
 - обновлении CNT триггерным событием (смотрите также описание регистра управления подчинённым режимом TIMx_SMCR), если URS=0 и UDIS=0 в регистре TIMx_CR1.

TIMx_EGR (TIM1 event generation register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved BG TG COMG CC4G CC3G CC2G CC1G UG
w w w w w w w w

Регистр генерации событий

Address offset: 0x14
Reset value: 0x0000

Reserved
Зарезервировано, значения после сброса должны оставаться в данных битах неизменными.
BG: Break generation
Этот бит используется для генерации события - останова (защитного отключения выходов таймера). Для генерации события следует программно установить бит в 1; сброс бита происходит аппаратно.
0: не вызывает действий.
1: генерация события останова; бит MOE сбрасывается, флаг BIF устанавливается; генерируется соответствующее прерывание и запрос DMA (если это разрешено установкой соответствующих битов).
TG: Trigger generation
Этот бит устанавливается программно для генерации триггерного события; сброс бита происходит аппаратно.
0: не вызывает действий.
1: генерация триггерного события; устанавливается флаг TIF в регистре TIMx_SR; возможна генерация прерывания и запроса DMA, если это разрешено установкой соответствующих битов.
COMG: Capture/Compare control update generation
Этот бит устанавливается программно для генерации события COM (обновление битов управления схемами захвата/сравнения); сброс бита происходит аппаратно.
0: не вызывает действий.
1: генерация события COM: когда бит CCPC установлен, это даёт возможность обновить буферизируемые биты CCxE, CCxNE и OCxM после их программной модификации.
Примечание.
Бит действует только на каналы, имеющие комплементарный выход.
CC1G, CC2G, CC3G, CC4G: Capture/Compare 1, 2, 3, 4 generation
Этот бит устанавливается программно для генерации события фиксации/сравнения (Capture/Compare) для соответствующего канала таймера (1, 2, 3 или 4); сброс бита происходит аппаратно.
0: не вызывает действий.
1: генерация события Capture/Compare в соответствующем канале таймера y=1..4; действие бита зависит от режима работы канала.
При работе в режиме сравнения (compare), когда канал используется для формирования выходного сигнала:
Устанавливается флаг CCyIF, генерируется соответствующее прерывание или запрос DMA (если разрешено).
При работе в режиме фиксации (capture), когда канал используется для работы с входным сигналом:
Фиксируется текущее значение счётчика (то есть, текущее значение счётчика сохраняется в регистр TIMx_CCRy); устанавливается флаг CCyIF и генерируется соответствующее прерывание или запрос DMA (если это разрешено). Если флаг CCyIF уже содержал значение 1, то устанавливается также и флаг переполнения флага фиксации CCyOF.
UG: Update generation
Этот бит устанавливается программно для генерации события обновления; сброс бита происходит аппаратно.
0: не вызывает действий.
1: генерация события обновления: происходит инициализация счётчика и обновляется содержимое буферизируемых регистров; также сбрасывается счётчик предделителя (коэффициент деления не изменяется). В режиме с выравниванием по центру, счётчик таймера сбрасывается в 0 при DIR=0 (во время счёта вверх) и инициализируется значением из регистра автоперезагрузки TIMx_ARR при DIR=1 (счёт вниз).

TIMx_CCMR1 (TIM1 capture/compare mode register 1)
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

Регистр 1 настройки режима фиксации/сравнения
Для битовых полей OC1M, OC2M можно включить буферизацию с помощью бита CCPC в регистре TIMxCR2.

Address offset: 0x18
Reset value: 0x0000

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

Биты, определяющие режимы работы каналов таймера

CC2S[1:0]: Capture/Compare 2 selection
Это битовое поле позволяет выбрать направление канала 2 (вход/выход), а также используемый источник сигнала при работе в режиме входа.
00: канал CC2 сконфигурирован как выход.
01: канал CC2 сконфигурирован как вход; IC2 подключено к TI2.
10: канал CC2 сконфигурирован как вход; IC2 подключено к TI1.
11: канал CC2 сконфигурирован как вход; IC2 подключено к TRC; этот режим работает, только если выбран внутренний триггерный вход (с помощью бита TS в регистре TIMx_SMCR).
Примечание.
Биты CC2S доступны для записи только при выключенном канале (бит CC2E=0 в регистре TIMx_CCER).
CC1S[1:0]: Capture/Compare 1 selection
Это битовое поле определяет направление канала 1 (выход/вход), а также используемый источник сигнала при работе в режиме входа.
00: канал настроен как выход.
01: канал настроен как вход, используется сигнал TI1.
10: канал настроен как вход, используется сигнал TI2.
11: канал настроен как вход, используется сигнал TRC. Работа в этом режиме возможна, только если выбран внутренний триггерный вход (с помощью бита TS в регистре TIMx_SMCR).
Примечание.
Данное битовое поле (CC1S[1:0]) доступно для записи только при выключенном канале (CC1E=0 в регистре TIMx_CCER).

При работе канала в режиме сравнения (канал используется как выход таймера)

OC2CE: Output Compare 2 clear enable
Функции этого бита для второго канала аналогичны функциям OC1CE для первого канала, смотрите далее.
OC2M[2:0]: Output Compare 2 mode
Функции этого битового поля для второго канала аналогичны функциям OC1M[2:0] для первого канала, смотрите далее.
OC2PE: Output Compare 2 preload enable
Функции этого бита для второго канала аналогичны функциям OC1PE для первого канала, смотрите далее.
OC2FE: Output Compare 2 fast enable
Функции этого бита для второго канала аналогичны функциям OC1FE для первого канала, смотрите далее.
OC1CE: Output Compare 1 clear enable
Бит определяет, каким образом будет влиять сигнал внешнего триггерного входа (ETR) на выходной сигнал канала (смотрите блок-схему таймера).
0: сигнал ETRF не влияет на OC1Ref.
1: высокий уровень ETRF сразу же сбрасывает OC1Ref.
OC1M: Output Compare 1 mode
Эти биты определяют способ формирования опорного сигнала OC1REF, из которого образуются выходные сигналы OC1 и OC1N. Следует отметить, что активным уровнем сигнала OC1REF является высокий, тогда как активный уровень OC1 и OC1N можно задать с помощью битов CC1P и CC1NP.
000: заморожено (frozen) - при совпадении значений счётчика (TIMx_CNT) и регистра сравнения TIMx_CCR1 состояние выходов не изменяется. Таймер в этом режиме может использоваться для того, чтобы формировать интервалы времени в программе.
001: установить на выходе канала 1 активный уровень при срабатывании схемы сравнения, т.е. устанавливается OC1REF=1 при достижении счётчиком TIMx_CNT значения в регистре сравнения этого канала (TIMx_CCR1).
010: установить на выходе канала 1 неактивный уровень при срабатывании схемы сравнения, т.е. устанавливается OC1REF=0 при достижении счётчиком TIMx_CNT значения в регистре сравнения этого канала (TIMx_CCR1).
011: переключить (toggle) - сигнал OC1REF переключается на противоположное значение, когда TIMx_CNT=TIMx_CCR1.
100: переключить в неактивное состояние - принудительно устанавливается низкий уровень сигнала OC1REF (независимо от значений в TIMx_CNT, TIMx_CCR1).
101: переключить в активное состояние - принудительно устанавливается высокий уровень сигнала OC1REF (независимо от значений в TIMx_CNT, TIMx_CCR1).
110: режим 1 PWM - при счёте вверх, канал 1 находится в активном состоянии пока TIMx_CNT<TIMx_CCR1, иначе канал будет в неактивном состоянии; при счёте вниз, канал 1 находится в неактивном состоянии (OC1REF=0) пока TIMx_CNT>TIMx_CCR1, иначе - в активном (OC1REF=1).
111: режим 2 PWM - при счёте вверх канал 1 находится в неактивном состоянии пока TIMx_CNT<TIMx_CCR1, иначе канал будет в активном состоянии; при счёте вниз, канал 1 находится в активном состоянии пока TIMx_CNT>TIMx_CCR1, иначе - в неактивном.
Примечания.
1. Это битовое поле не может модифицироваться, если установлен LOCK уровень 3 (битовое поле LOCK в регистре TIMx_BDTR) и CC1S=00 (канал сконфигурирован как выход).
2. В режимах 1 и 2 PWM, уровень сигнала OCREF изменяется только когда изменяется результат сравнения или когда происходит переключения из режима "frozen" в режим "PWM".
OC1PE: Output Compare 1 preload enable
Бит для управления буферизацией регистра TIMx_CCR1.
0: буферизация регистра TIMx_CCR1 не используется; запись в регистр TIMx_CCR1 может быть произведена в любой момент и новое значение начнёт использоваться немедленно.
1: используется буферизация регистра TIMx_CCR1; операции чтения/записи выполняются с буферным регистром, новое значение из буфера передаётся в активный регистр (который и управляет работой таймера) при каждом событии обновления.
Примечания.
1. Этот бит не может модифицироваться, если установлен LOCK уровень 3 (битовое поле LOCK в регистре TIMx_BDTR) и CC1S=00 (канал сконфигурирован как выход).
2. Следует устанавливать бит OC1PE для работы в PWM режиме, иначе не гарантируется корректность выходного сигнала. Режим PWM без установки данного бита можно использовать только при одновременном использовании режима одиночного импульса (в регистре TIMx_CR1 бит OPM=1).
OC1FE: Output Compare 1 fast enable
Бит для разрешения "быстрого сравнения" в канале 1. Этот бит используется для ускорения проявления эффекта на выходе канала от воздействия триггерного события на входе.
0: обычное функционирование канала, состояние канала определяется значениями в счётчике и в регистре сравнения CCR1. При работе таймера в подчинённом режиме, минимальная задержка от фронта триггерного сигнала до проявления эффекта, составляет 5 периодов тактового сигнала.
1: активный фронт триггерного сигнала воздействует на выход канала как срабатывание схемы сравнения. В результате на выходе устанавливается соответствующий совпадению уровень, независимо от результата сравнения. Задержка от выборки триггерного сигнала до воздействия на выход канала сокращается до 3 тактов. Бит действует только при работе канала в режиме PWM1 или PWM2.

При работе канала в режиме фиксации (канал используется как вход таймера)

IC2F[3:0]: Input capture 2 filter
Битовое поле для конфигурирования входного цифрового фильтра канала 2. Функции битового поля аналогичны функциям IC1F[3:0] для первого канала, смотрите далее.
IC2PSC[1:0]: Input capture 2 prescaler
Битовое поле для управления предделителем на входе канала 2. Функции битового поля аналогичны функциям IC1PSC[1:0] для первого канала, смотрите далее.
IC1F[3:0]: Input capture 1 filter
Битовое поле для конфигурирования входного цифрового фильтра канала 1. Это битовое поле определяет частоту сэмплирования на входе 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: Input capture 1 prescaler
Это битовое поле определяет коэффициент деления предделителя на входе первого канала таймера. Счётчик предделителя сбрасывается при сбросе в 0 бита CC1E в регистре TIMx_CCER.
00: предделитель не используется (коэффициент деления 1), захват выполняется по каждому фронту на входе канала (переднему или заднему - в зависимости от заданной полярности).
01: коэффициент деления 2.
10: коэффициент деления 4.
11: коэффициент деления 8.

TIMx_CCMR2 (TIM1 capture/compare mode register 2)
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

Регистр 2 настройки режима фиксации/сравнения
Для битовых полей OC3M, OC4M можно включить буферизацию с помощью бита CCPC в регистре TIMxCR2.

Address offset: 0x1C
Reset value: 0x0000

Этот регистр предназначен для управления режимом работы каналов 3 и 4 таймера. Функции данного регистра полностью аналогичны функциям регистра TIMx_CCMR1 (смотрите описание предыдущего регистра). Небольшие отличия имеются только в использовании битовых полей CC3S, CC4S, что связано с использованием других источников сигнала для каналов 3 и 4.

CC4S[1:0]: Capture/Compare 4 selection
Это битовое поле позволяет выбрать направление канала 4 (выход/вход), а также используемый источник сигнала при работе в режиме входа.
00: канал CC4 сконфигурирован как выход.
01: канал CC4 сконфигурирован как вход; IC4 подключено к TI4.
10: канал CC4 сконфигурирован как вход; IC4 подключено к TI3.
11: канал CC4 сконфигурирован как вход; IC4 подключено к TRC; этот режим работает, только если выбран внутренний триггерный вход (с помощью бита TS в регистре TIMx_SMCR).
Примечание.
Биты CC4S доступны для записи только при выключенном канале (бит CC4E=0 в регистре TIMx_CCER).
CC3S[1:0]: Capture/Compare 3 selection
Это битовое поле позволяет выбрать направление канала 3 (выход/вход), а также используемый источник сигнала при работе в режиме входа.
00: канал CC3 сконфигурирован как выход.
01: канал CC3 сконфигурирован как вход; IC4 подключено к TI3.
10: канал CC3 сконфигурирован как вход; IC4 подключено к TI4.
11: канал CC3 сконфигурирован как вход; IC4 подключено к TRC; этот режим работает, только если выбран внутренний триггерный вход (с помощью бита TS в регистре TIMx_SMCR).
Примечание.
Биты CC3S доступны для записи только при выключенном канале (бит CC3E=0 в регистре TIMx_CCER).

TIMx_CCER (TIM1 capture/compare enable register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved CC4P CC4E CC3NP CC3NE CC3P CC3E CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E
rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр включения каналов фиксации/сравнения
Для битов CCyE, CCyNE можно включить буферизацию с помощью бита CCPC в регистре TIMxCR2.

Address offset: 0x20
Reset value: 0x0000

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

Reserved
Зарезервировано, значения после сброса должны оставаться в данных битах неизменными.
CC3NP: Capture/Compare 3 complementary output polarity
CC2NP: Capture/Compare 2 complementary output polarity
CC1NP: Capture/Compare 1 complementary output polarity
Бит задаёт полярность (логический уровень) активного уровня сигнала на комплементарном выходе канала таймера. Неактивный уровень совпадает со значением бита.
0: активным уровнем является высокий (логическая 1).
1: активным уровнем является низкий (логический 0).
Примечание.
Этот бит не доступен для записи при установленном LOCK уровне 2 или 3 (LOCK битовое поле в регистре TIMx_BDTR) и при CC1S=00 (канал сконфигурирован как выход).
CC3NE: Capture/Compare 3 complementary output enable
CC2NE: Capture/Compare 2 complementary output enable
CC1NE: Capture/Compare 1 complementary output enable
Отключение/включение комплементарного выхода канала.
0: отключено, уровень на выходе данного канала является функцией битов MOE, OSSI, OSSR, OISy, OISyN и CCyE (в зависимости от комбинации указанных битов на выходе может быть 0 или 1).
1: включено - на выход OCyN канала выводится сигнал (в зависимости от битов MOE, OSSI, OSSR, OISy, OISyN и CCyE).
CC4P: Capture/Compare 4 output polarity
CC3P: Capture/Compare 3 output polarity
CC2P: Capture/Compare 2 output polarity
CC1P: Capture/Compare 1 output polarity
Выбор активного уровня выходного/входного сигнала соответствующего канала.
При работе канала в режиме выхода этот бит определяет полярность активного уровня выходного сигнала соответствующего канала (неактивный уровень равен значению данного бита).
0: активный уровень на выходе - высокий (такой же как у базового сигнала канала OCyREF).
1: активный уровень на выходе - низкий (инверсный по отношению к OCyREF).
При работе канала в режиме входа этот бит определяет, используется ли входной сигнал соответствующего канала или его инверсия в качестве триггерного сигнала или сигнала захвата.
0: сигнал не инвертируется: захват выполняется по нарастающему фронту сигнала ICy; при использовании ICy в качестве триггерного сигнала, инвертирования также не происходит.
1: сигнал инвертируется: захват выполняется по падающему фронту сигнала ICy; при использовании ICy в качестве триггерного сигнала, также происходит инвертирование.
Примечание.
Этот бит недоступен для записи, когда установлен LOCK уровень 2 или 3 (LOCK бит в регистре TIMx_BDTR).
CC4E: Capture/Compare 4 output enable
CC3E: Capture/Compare 3 output enable
CC2E: Capture/Compare 2 output enable
CC1E: Capture/Compare 1 output enable
Отключение/включение выхода (входа) канала.
При работе канала в режиме выхода (сравнения).
0: отключено, на выходе канала установлен уровень, который является функцией от битов MOE, OSSI, OSSR, OISy, OISyN и CCyNE.
1: включено - уровень выходного сигнала определяется состоянием таймера, а также зависит от битов MOE, OSSI, OSSR, OISy, OISyN и CCyNE.
При работе канала в режиме входа (фиксации) этот бит определяет, разрешёна ли входная фиксация в данном канале (сохранение текущего значения счётчика в регистр TIMx_CCRy).
0: входная фиксация отключена.
1: входная фиксация включена.

В следующей таблице указаны состояния выходов канала в зависимости от значения управляющих битов и базового сигнала канала OCyREF, из которого получаются выходной и комплементарный сигнал, с учётом заданных полярностей, времени запаздывания и др. Предполагается, что установлен основной бит включения выходов: MOE=1.

Управляющие биты Состояние выходов
MOE OSSI OSSR CCxE CCxNE Состояние выхода OCx Состояние выхода OCxN
1 X 0 0 0 0 0
0 0 1 0 OCxREF + полярность:
OCxREF xor CCxNP
0 1 0 OCxREF + полярность:
OCxREF xor CCxP
0
0 1 1 OCREF + полярность + dead-time:
OCxREF xor CCxP
/* + dead-time */
Комплементарный к OCREF (not OCREF) + полярность + dead-time:
(not OCxREF) xor CCxNP
/* + dead-time */
1 0 0 Неактивный уровень:
CCxP
Неактивный уровень:
CCxNP
1 0 1 Неактивный уровень:
CCxP
OCxREF + полярность:
OCxREF xor CCxNP
1 1 0 OCxREF + полярность:
OCxREF xor CCxP
Неактивный уровень:
CCxNP
1 1 1 OCREF + полярность + dead-time:
OCxREF xor CCxP
/* + dead-time */
Комплементарный к OCREF (not OCREF) + полярность + dead-time:
(not OCxREF) xor CCxNP
/* + dead-time */

Сложнее обстоит дело со случаем, когда бит MOE=0 (в регистре TIMx_BDTR). MOE - основной бит включения выходов таймера. При сбросе данного бита происходит отключение сразу всех выходов таймера. Этот бит используется в механизме останова таймера, когда происходит аппаратный сброс MOE и связанное с ним защитное отключение выходов - либо по внешнему сигналу, либо в случае обнаружения сбоев в системе тактирования микроконтроллера (за связанные с остановом настройки отвечает регистр TIMx_BDTR). Действие данного бита является асинхронным и эффект от его сброса проявляется даже при отсутствии тактового сигнала.

В соответствии со справочным руководством "RM0041. Reference manual. STM32F100xx advanced ARM-based 32-bit MCUs", поведение выходов таймера после сброса бита MOE зависит от значения бита OSSI в регистре TIMx_BDTR. Причём, назначение бита в руководстве описывается весьма туманно, но можно предположить, что при MOE=0 и OSSI=0 на выходах должен устанавливаться нулевой уровень, а при MOE=0 и OSSI=1 - уровень, заданный битами OISy, OISyN в регистре TIMx_CR2 (причём устанавливается именно заданный этими битами уровень, без учёта битов полярности CCyP, CCyNP). Если оба бита OISy и OISyN некоторого канала задают выходной уровень, являющийся активным для этих выходов, т.е. OISy=not CCyP и OISyN=not CCyNP, то при MOE=0 на выходах этого канала установятся неактивные уровни, в данном случае - инверсные по отношению к заданным битами OISy и OISyN и равные CCyP и CCyNP соответственно.

В действительности, в экспериментах с микроконтроллером STM32F100RB, не удалось обнаружить различий в работе таймера как при сброшенном OSSI, так и при установленном. В любом случае поведение выходов в основном соответствовало описанному для OSSI=1 случаю. Полученные результаты помещены в следующей таблице.

Control bits Output states (OC1, OC1N)
MOE OSSI OSSR CC1E* CC1NE* OIS1 OIS1N if CC1P, CC1NP =
= 00 = 01 = 10 = 11
0 x x x x 0 0 00 00 00 11
0 1 01 01 10 01
1 0 10 01 10 10
1 1 00 11 11 11

* Предполагается, что хотя бы один выход канала включён, иными словами, биты включения CCyE, CCyNE канала не должны быть одновременно равны 0. В противном случае наблюдается достаточно странное поведение выходов, в том числе, при определённых комбинациях управляющих битов, на выходах присутствует генерируемый каналом сигнал (и это при сброшенных битах включения!). В справочном руководстве по этому поводу сказано следующее: "Когда оба выхода канала не используются (CCyE=0, CCyNE=0), биты OISx, OISxN, CCxP и CCxNP должны оставаться сброшенными".

На практике это означает, что надо с осторожностью выбирать порядок инициализации таймера и портов ввода/вывода микроконтроллера и уделять особое внимание порядку конфигурирования таймера. В следующей таблице в качестве примера приведены наблюдаемые состояния выходов в случае микроконтроллера STM32F100xx, когда MOE=0, CCyE=0 и CCyNE=0 (содержимое бита OSSI в этом случае на выходы также не влияет).

CCyP CCyNP OCyREF Состояние выходов при различных комбинациях OISy, OISyN:
OISy, OISyN = 00 или 11 = 01 или 10
0 0 0 00 01
0 0 1 00 10
0 1 0 00 01
0 1 1 11 01
1 0 0 11 10
1 0 1 00 10
1 1 0 11 10
1 1 1 11 01

Выделенные красным цветом ячейки соответствуют тем случаям, когда на отключённых выходах каналов присутствует генерируемый каналом сигнал.


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

Счётчик таймера

Address offset: 0x24
Reset value: 0x0000

CNT[15:0]: Counter value
Значение счётчика.

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

Предделитель таймера Регистр является буферизируемым.

Address offset: 0x28
Reset value: 0x0000

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

TIMx_ARR (TIM1 auto-reload register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
ARR[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр автоматической перезагрузки
Регистр является буферизируемым, если установлен бит ARPE в регистре TIMx_CR1.

Address offset: 0x2C
Reset value: 0xFFFF*

* В руководстве на протяжении уже многих лет, из редакции в редакцию (пятая редакция на данный момент), с упорством, достойным лучшего применения, производитель указывает здесь в качестве значения после сброса значение 0x0000. Что не соответствует действительности. В действительности значение по умолчанию - максимальное 16-битовое число без знака.

ARR[15:0]: Auto-reload value
Значение, используемое для автоматической перезагрузки счётчика. Может быть включена буферизация этого регистра (смотрите описание бита ARPE в регистре TIMx_CR1). При записи в регистр нулевого значения, счётчик таймера останавливается.

TIMx_RCR (TIM1 repetition counter register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved REP[7:0]
rw rw rw rw rw rw rw rw

Регистр счётчика циклов
Регистр является буферизируемым.

Address offset: 0x30
Reset value: 0x0000

Reserved
Зарезервировано, значения после сброса должны оставаться в данных битах неизменными.
REP[7:0]: Repetition counter value
Значение (автоперезагрузки) счётчика циклов.
Это битовое поле даёт возможность пользователю управлять частотой генерации событий обновления, а значит, определяет, как часто будет происходить обновление буферизируемых регистров (т.е. пересылка значения из буфера регистра в активный регистр) и генерация прерываний обновления, если она разрешена. Счётчик циклов является вычитающим, т.е. выполняет счёт вниз: его значение уменьшается на единицу при каждом переполнении/антипереполнении счётчика таймера. Если счётчик циклов содержит нулевое значение, очередное переполнении/антипереполнении счётчика таймера приведёт к загрузке в счётчик циклов значения REP и генерации события обновления. Поскольку значение из REP загружается в счётчик циклов после его переполнения (момент которого совпадает с моментом события обновления), то любая запись в регистр TIMx_RCR не принимается во внимание до следующего события обновления. Так что TIMx_RCR может также рассматриваться как буферизируемый регистр. Счётчик циклов перезагружается значением из TIMx_RCR также при программной генерации события обновления (установка бита UG в регистре TIMx_EGR) или при аппаратной генерации посредством контроллера подчинённого режима.
В режиме PWM значение (REP+1) будет соответствовать:
- количеству периодов PWM в режиме с выравниванием по фронту;
- количеству полупериодов PWM в режиме с выравниванием по центру.

TIMx_CCR1 (TIM1 capture/compare register 1)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
CCR1[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр фиксации/сравнения 1
Регистр является буферизируемым, если установлен бит OC1PE в регистре TIMx_CCMR1.

Address offset: 0x34
Reset value: 0x0000

CCR1[15:0]: Capture/Compare 1 value
Если канал сконфигурирован в режиме выхода
CCR1 содержит значение для загрузки в свой действующий (активный) регистр, т.е. содержит предзагружаемое значение. Значение помещается сразу в активный регистр, если не используется предзагрузка. Настройка буферизации регистра осуществляется с помощью бита OC1PE в регистре TIMx_CCMR1. В случае использования буферизации, предзагружаемое значение копируется в активный регистр по событию обновления. Значение в активном регистре используется для сравнения с текущим значением счётчика TIMx_CNT, результат сравнения используется для формирования выходного сигнала канала.
Если канал сконфигурирован в режиме входа
CCR1 содержит значение счётчика, переданного в этот регистр при возникновении последнего события фиксации в данном канале (IC1, input capture 1 event).

TIMx_CCR2 (TIM1 capture/compare register 2)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
CCR2[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр фиксации/сравнения 2
Регистр является буферизируемым, если установлен бит OC2PE в регистре TIMx_CCMR1.

Address offset: 0x38
Reset value: 0x0000

Регистр фиксации/сравнения канала 2, по функциям аналогичен TIMx_CCR1 (смотрите выше).


TIMx_CCR3 (TIM1 capture/compare register 3)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
CCR3[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр фиксации/сравнения 3
Регистр является буферизируемым, если установлен бит OC3PE в регистре TIMx_CCMR2.

Address offset: 0x3C
Reset value: 0x0000

Регистр фиксации/сравнения канала 3, по функциям аналогичен TIMx_CCR1 (смотрите выше).


TIMx_CCR4 (TIM1 capture/compare register 4)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
CCR4[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр фиксации/сравнения 4
Регистр является буферизируемым, если установлен бит OC4PE в регистре TIMx_CCMR2.

Address offset: 0x40
Reset value: 0x0000

Регистр фиксации/сравнения канала 4, по функциям аналогичен TIMx_CCR1 (смотрите выше).


TIMx_BDTR (TIM1 break and dead-time register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
MOE AOE BKP BKE OSSR OSSI LOCK[1:0] DTG[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр останова (защитного отключения выходов, break) и времени запаздывания (dead-time)

Address offset: 0x44
Reset value: 0x0000

Примечание.
Биты AOE, BKP, BKE, OSSI, OSSR и DTG[7:0] этого регистра и некоторые биты других регистров (подробности смотрите далее в описании поля LOCK) могут быть защищены от записи с помощью битового поля LOCK. После записи в LOCK ненулевого значения, само поле LOCK и защищаемые биты становятся недоступными для записи до перезагрузки микроконтроллера. Поэтому, при использовании защиты, защищаемые биты должны быть сконфигурированы либо до установки битов LOCK, либо в одной операции записи, совместно с установкой требуемого уровня защиты LOCK.
MOE: Main output enable
Основное включение выхода.
Этот бит является частью механизма останова таймера (защитного отключения выходов в каналах таймера), который приводится в действие по сигналу от внешнего входа (TIMx_BKIN) или в случае обнаружения сбоев в системе тактирования микроконтроллера. Для использования выходов в рабочем режиме требуется программно установить данный бит или воспользоваться функцией автоматического включения (бит AOE), тогда бит будет устанавливаться аппаратно.
Бит MOE сбрасывается асинхронно аппаратно, как только на входе останова сигнал принимает активный уровень (если останов разрешён, смотрите BKE).
Бит оказывает влияние только на каналы, настроенные как выходы. Позволяет перевести в отключённое или неактивное состояние сразу все выходы всех каналов таймера.
0: на выходах каналов OC и OCN (выход и комплементарный выход каналов) устанавливается 0 или уровень, заданный для ждущего состояния - в зависимости от значения бита OSSI.*
1: выходы OC и OCN (выход и комплементарный выход канала) включены, если установлены соответствующие разрешающие биты (CCxE, CCxNE в регистре TIMx_CCER).
* На практике не удалось наблюдать влияния OSSI на работу таймера, который функионировал в любом случае примерно так, как описывает справочное руководство для случая OSSI=1.
AOE: Automatic output enable
Автоматическое включение выхода.
0: бит MOE может быть установлен только программно.
1: бит MOE может быть установлен программно или устанавливается автоматически при следующем событии обновления (если сигнал на входе останова имеет неактивный уровень).
Примечание.
Этот бит не может быть модифицирован, если установлен отличный от 0 LOCK уровень (битовое поле LOCK в данном регистре).
BKP: Break polarity
Полярность сигнала останова
0: низкий уровень для сигнала останова является активным.
1: высокий уровень для сигнала останова является активным.
Примечания.
Этот бит не может быть модифицирован, если установлен отличный от 0 LOCK уровень (битовое поле LOCK в данном регистре).
Операция записи требует 1 период тактового сигнала шины APB до проявления эффекта.
BKE: Break enable
Разрешение останова.
0: вход останова отключён, сигнал останова (BRK и событие - ошибка тактового сигнала CCS) игнорируется.
1: вход останова (BRK и событие - ошибка тактового сигнала CCS) включён, активный уровень сигнала на входе сбрасывает бит MOE.
Примечания.
Этот бит не может быть модифицирован, если установлен отличный от 0 LOCK уровень (битовое поле LOCK в данном регистре).
Операция записи требует 1 период тактового сигнала шины APB до проявления эффекта.
OSSR: Off-state selection for Run mode
Выбор отключённого состояния (off-state) в рабочем режиме.
Этот бит определяет состояние отключённых выходов, когда MOE=1 (естественно, только для каналов, сконфигурированных как выходы). Здесь имеется в виду включение/отключение выходов с помощью битов включения CCyE, CCyNE (смотрите отключение/включение выходов канала с помощью регистра TIMx_CCER). Бит OSSR не реализуется в таймерах без каналов с комплементарными выходами.
0: на отключённых выходах OC/OCN устанавливается 0.
1: на отключённых выходах OC/OCN устанавливается неактивный уровень, определяемый соответствующим битом полярности в регистре TIMx_CCER (уровень на выходе будет равен биту полярности).
Примечание.
1. Под отключённым понимается выход, для которого бит включения сброшен, т.е. CCyE=0 для выхода или CCxNE=0 для комплементарного выхода.
2. Этот бит не может быть модифицирован, если установлен LOCK уровень 2 или более (битовое поле LOCK в данном регистре).
3. Следует обратить внимание, что на отключённом выходе может быть установлен уровень 1 (если он задан в качестве неактивного).
4. Следует избегать такой конфигурации, когда оба выхода канала отключены (CCyE=0 и CCxNE=0) и задействована функция останова (защитного отключения выходов таймера), так как при сбросе бита MOE поведение выходов канала может отличаться от интуитивно ожидаемого (смотрите описание регистра TIMx_CCER).
OSSI: Off-state selection for Idle mode
Выбор отключённого состояния (off-state) для режима ожидания.
Этот бит определяет состояние выходов когда MOE=0 для каналов, сконфигурированных как выходы. Также смотрите отключение/включение выходов канала с помощью регистра TIMx_CCER.
0: на выходах OC/OCN устанавливается 0.
1: на выходах OC/OCN устанавливается уровень, заданный для состояния ожидания.
Примечание.
На практике наблюдается функционирование таймера в любом случае как здесь укзано для OSSI=1.
LOCK[1:0]: Lock configuration
Настройка защиты.
Это битовое поле позволяет заблокировать для записи отдельные биты некоторых регистров таймера для защиты от программных ошибок. Предусмотрены следующие уровни защиты.
00: никакие биты не защищены от записи.
01: LOCK 1 уровень - защищены от записи биты DTG, BKE, BKP, AOE в регистре TIMx_BDTR и биты OISx, OISxN в регистре TIMx_CR2.
10: LOCK 2 уровень - в дополнение к LOCK 1 защищаются от записи биты OSSR и OSSI в регистре TIMx_BDTR, а также биты полярности выходов (CCxP, CCxNP биты в регисте TIMx_CCER, при условии, что соответствующие каналы работают в режиме выхода, для каналов в режиме входа настройка полярности разрешена).
11: LOCK 3 уровень - в дополнение к LOCK 2 защищаются от записи биты OCyM и OCyPE в регистрах TIMx_CCMR1, TIMx_CCMR2 (если каналы, к которым относятся биты работает в режиме выхода).
Примечание.
Запись в LOCK значения, отличного от 0, возможна только один раз после сброса, после чего записанное значение сохраняется до следующего сброса. Соответственно, содержимое защищаемых битов также останется неизменным до сброса.
DTG[7:0]: Dead-time generator setup
Настройка генератора времени запаздывания.
Это битовое поле определяет величину времени запаздывания DT между комплементарными выходами.
0xxxxxxx: DT=DTG*tdtg, где tdtg=tDTS.
10xxxxxx: DT=(64+DTG[5:0])*tdtg, где Tdtg=2*tDTS.
110xxxxx: DT=(32+DTG[4:0])*tdtg, где Tdtg=8*tDTS.
111xxxxx: DT=(32+DTG[4:0])*tdtg, где Tdtg=16*tDTS.
Примечание.
Это битовое поле не может быть изменено, если LOCK уровень отличен от 0.

Например, если TDTS=125 нс (8 МГц), то время запаздывания можно установить в пределах:
0..15.875 мкс с шагом 125 нс (0.125 мкс);
16..31.750 мкс с шагом 250 нс (0.250 мкс);
32..63 мкс с шагом 1 мкс;
64..126 мкс с шагом 2 мкс.


TIMx_DCR (TIM1 DMA control register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved DBL[4:0] Reserved DBA[4:0]
rw rw rw rw rw rw rw rw rw rw

Регистр управления DMA

Address offset: 0x48
Reset value: 0x0000

Reserved
Зарезервировано, при чтении всегда возвращается 0.
DBL[4:0]: DMA burst length
Длина DMA пакета.
Это битовое поле определяет количество DMA пересылок n при пакетной передаче данных с использованием DMA, передача начинается, когда происходит доступ к регистру TIMx_DMAR для чтения или записи:
n=DBL+1,
Допустимые значения DBL лежат в диапазоне (в двоичной форме) 00000..10001, что соответствует значениям n=1..18.
DBA[4:0]: DMA base address
Базовый адрес DMA.
Это битовое поле определяет базовый адрес данных для передачи с использованием DMA (передача начинается при доступе к регистру TIMx_DMAR для чтения или записи). Содержит индекс передаваемых данных относительно регистра TIMx_CR1, индекс которого принимается за 0.
Пример:
00000: смещение соответствует адресу регистра TIMx_CR1.
00001: смещение соответствует адресу регистра TIMx_CR2.
00010: смещение соответствует адресу регистра TIMx_SMCR.

TIMx_DMAR (TIM1 DMA address for full transfer)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
DMAB[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Адрес для DMA для полной передачи

Address offset: 0x4C
Reset value: 0x0000

DMAB[15:0]: DMA register for burst accesses
Регистр для доступа к данным при пакетной передаче с использованием DMA.
При чтении из этого регистра или записи в него, фактически происходит доступ по адресу
(адрес регистра TIMx_CR1)+(DBA+DMA_index)*4,
где (адрес регистра TIMx_CR1) - адрес первого регистра управления таймером (имеет младший адрес среди всех регистров данного таймера в адресном пространстве микроконтроллера); DBA - битовое поле регистра TIMx_DCR, определяющее смещение данных при пакетной передаче относительно регистра TIMx_CR1; индекс DMA_index - автоматически назначается контроллером DMA во время передачи данных и изменяется от 0 до DBL (DBL - битовое поле, задаваемое в регистре TIMx_DCR).

Пример выполнения пакетной передачи с использованием DMA.

Допустим, нам требуется обновить содержимое регистров CCRx (x=2, 3, 4), используя пакетную передачу трёх полуслов в регистры CCRx с помощью механизма DMA. Это можно сделать, выполнив следующие шаги.

  1. Настраиваем соответствующий канал DMA:
  2. Задаём битовые поля DBA и DBL в регистре DCR таймера следующим образом: DBL=3, DBA=0xE.
  3. Разрешаем генерацию запросов DMA по событию обновления (устанавливаем в 1 бит UDE в регистре DIER).
  4. Включаем таймер (устанавливаем бит CEN в регистре TIMx_CR1).
  5. Включаем канал DMA.
Примечание.
В приведённом примере предполагается, что каждый регистр CCRx обновляется однократно. Если, допустим, потребуется повторное обновление, нужно установить количество данных для передачи равным 6. Пусть буфер в RAM содержит элементы data1, data2, data3, data4, data5 и data6. Тогда передача данных в регистры CCRx будет происходить следующим образом: первый запрос DMA приведёт к передаче элемента data1 в регистр CCR2, data2 в CCR3, data3 в CCR4; после второго запроса будет передано data4 в CCR2, data5 в CCR3 и data6 в CCR4.
author: hamper; date: 2017-09-20
  @Mail.ru