STM32 STM32VL Discovery STM32F100RBT6 (урок 5) General-purpose timers(2-5), таймеры

| 13.04.2015

STM32VL Discovery STM32F100RBT6 (урок 5) General-purpose timers(2-5), таймеры

Таймер – одна из самых полезных вещей в микроконтроллере и основная его задача – отсчитывание точных интервалов времени. На отладочной плате STM32VL Discovery установлен микроконтроллер STM32F100RBT6, который имеет следующие таймеры:
Basic timers (TIM6, TIM7) – самый простой таймер, который умеет только генерировать прерывания в заданный промежуток времени, но при этом очень легко настраивается и управляется.
General-purpose timers (TIM2-TIM4, TIM15-TIM17) – более продвинутый таймер, позволяющий генерировать ШИМ, считывать состояние ног, обрабатывать данные от энкодера и т.д.
The advanced-control timers (TIM1) – самый продвинутый таймер, может использоваться как трехфазный ШИМ генератор, например для управления трехфазными электродвигателями.

Устройство Базовых таймеров/счётчиков. General-purpose timers(2-5)

General_purpose(2-5)

Режим 1 внешнего источника тактирования
Этот режим выбирается когда SMS=111. Счетчик может считать по каждому нарастающему и спадающему фронту на выбранном входе.
Пример подключения внешнего тактирования TI2.
external_clock

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

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

Например, для конфигурации счетчика вверх на счет по каждым 2-м нарастающим фронтам на
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.

Capture/compare channel. General-purpose timers(2-5)Capture_compare_channel

Output stage of capture/compare channel. General-purpose timers(2-5)

Output_state_channel

Master/Slave timer example. General-purpose timers(2-5)MS_timer

Набор разных сведений про таймеры/счётчики. General-purpose timers(2-5)
1) Как называется обработчик для определенного прерывания
В этом файле смотрим прототипы обработчиков startup_stm32f10x_md_vl.c
2) Изменение пред делителя в любой момент
Менять можно когда угодно но оно поменяется после прерывания
3) Принудительный вызов прерывания
Можно программно вызвать принудительно вызвать (UDE) или (UIF)

Ссылки на комплектующие:
Отладочная плата: STM32VL Discovery (ссылка)
Микроконтроллер: STM32F100RBT6 (
ссылка)
Провод USB :  (ссылка)
Преобразователь USB-UART : FTDI (ссылка)

Макетная плата: (ссылка)
Блок питания на 12V (ссылка)
Преобразователь 12V  в  3,3/5V (ссылка)
Перемычки для макетной платы (ссылка)

Регистры (TIM2 - TIM5)

TIMx_CR1 [0x0000]TIMx_CR1

Описание: Регистр управления 1.
Биты:
Bits 9:8    CKD[2:0]:    Clock division
Описание: 
Определяют временную задержку для использования в цифровых фильтрах (определяем что есть t_DTS)

Bit 7    ARPE:    Auto-reload preload enable
Описание: 
Бит управления буферизацией регистра TIMx_ARR (смена происходит моментально или после события прерывания)

Bits 6:5    CMS[1:0]:    Center-aligned mode selection
Описание:
Выбираем режим счета (вверх, вниз, вверх/вниз) (доопределяет бит DIR !)
Center-aligned mode – считаем и вверх и вниз. Таких режимов 3шт (когда прерывание генерировать)

Bit 4    DIR:    Direction
Описание: 
Направление счета ’0′-вверх, а ’1′-вниз.

Bit 3    OPM:    One-pulse mode
Описание: 
Ставится для включения режима одиночного счета счетчика.

Bit 2    URS:    Update request source
Описание: 
Бит выбирает возможные источники для прерывания и DMA
0: Любое из следующих событий генерирует обновление прерывания или запрос DMA
при разрешении. Этими событиями могут быть:
- переполнение счетчика(вверх/вниз)
- установка бита UG
- генерация обновления через контроллер подчиненного режима
1: Только переполнение счетчика(вверх-вниз) генерирует прерывание обновления или
запрос DMA при разрешении.

Bit 1    UDIS:    Update disable
Описание: 
Этот бит устанавливается и очищается программно для разрешения/запрещения генерации события UEV.
0: UEV разрешен. Событие обновления(UEV) генерируется одним из следующих событий:
- переполнение счетчика(вверх/вниз)
- установка бита UG
- генерация обновления через контроллер подчиненного режима
Затем буферизованные регистры загружаются своими предварительно загруженными
значениями.
1: UEV запрещен. Событие обновления не генерируется, теневые регистры удерживают
свои значения(ARR, PSC, CCRx). Однако счетчик и предделитель реинициализируются
если устанавливается бит UG или если получен аппаратный сброс от контроллера
подчиненного режима.

Bit 0    CEN:    Counter enable
Описание:
 Бит вкл/выкл работы таймера. (1 – счет запущен)

TIMx_CR2  [0x0000]TIMx_CR2

Описание: 2-й регистр управления.
Биты:
Bit 7    TI1S:    TI1 selection
Описание: 
Определяем что подключено к входу TI1.Тут 2 варианта.
0: вывод TIMx_CH1 подключен ко входу TI1
1: выводы TIMx_CH1, CH2 и CH3 подключены ко входу TI1(объединение через исключающее ИЛИ)

Bits 6:4    MMS[2:0]:    Master mode selection
Описание: Выбор режима главного
Эти биты в главном режиме позволяют выбирать посылаемую информацию
подчиненным таймерам для синхронизации(TRGO).
000:
Сброс – бит UG из регистра TIMx_EGR используется как выход запуска(TRGO).
Если сброс генерируется входом запуска(контроллер подчиненного режима
сконфигурирован в режиме сброса), тогда сигнал на TRGO задерживается по сравнению
с действительным сбросом.
001: Разрешение – сигнал разрешения счетчика используется как выход запуска(TRGO).
Он полезен для запуска нескольких таймеров в одно время или для управления окном, в
котором разрешен подчиненный таймер. Сигнал разрешения счетчика генерируется
через логическое ИЛИ между управляющим битом CEN и входом запуска при
конфигурации в режиме стробирования. На TRGO есть задержка, когда сигнал
разрешения счетчика управляется входом запуска за исключением выбора режима
главного/подчиненного.
010: Обновление – событие обновления выбирается как выход запуска(TRGO).
Например главный таймер может использоваться как предделитель подчиненного
таймера.
011: Импульс сравнения – выход запуска посылает положительный импульс когда
устанавливается флаг CC1IF(даже если он уже высокий) как только происходит
совпадение при сравнении или захват.
100: Сравнение – сигнал OC1REF используется как выход запуска(TRGO)
101: Сравнение – сигнал OC2REF используется как выход запуска(TRGO)
110: Сравнение – сигнал OC3REF используется как выход запуска(TRGO)
111: Сравнение – сигнал OC4REF используется как выход запуска(TRGO)

Bit 3    CCDS:    Capture/compare DMA selection
Описание: 
Выбор DMA захвата/сравнения.
0: посылается запрос DMA CCx когда происходит событие ССх
1: посылается запрос DMA CCx когда происходит событие обновления

TIMx_SMCR  [0x0000]TIMx_SMCR

Описание: Регистр управления подчинённым режимом (выбор режима Master/Slave, режима (источника) тактирования, настройка параметров запуска, выбор режима энкодера).
Биты:
Bits 15    ETP:    External trigger polarity
Описание: 
Полярность внешнего запуска (ножка ETR).
0: ЕТР неинвертирован, активный высокий уровень или нарастающий фронт
1: ЕТР инвертирован, активный низкий уровень или спадающий фронт

Bits 14    ECE:    External clock enable
Описание: 
Разрешение внешнего тактирования для счетчика (mode 2).
0: Режим 2 внешнего тактирования запрещен
1: Режим 2 внешнего тактирования разрешен. Счетчик тактируется любым активным
фронтом сигнала ETRF.
Прим: 1.Установка бита ЕСЕ имеет такой же эффект, как выбор режима 1 внешнего
тактирования с TRGI подключенным к ETRF(SMS=111 и TS=111)
2.Возможно одновременно использовать режим 2 внешнего тактирования со
следующими подчиненными режимами: режим сброса, режим стробирования и режим
запуска. Однако в этом случае TRGI не должен подключаться к ETRF(биты TS не
должны быть 111).
3. Если в одно время разрешается режим 1 внешнего тактирования и режим 2 внешнего
тактирования, то внешний вход тактирования – ETRF.

Bits 13:12    ETPS[1:0]:    External trigger prescaler
Описание:  
Предделитель внешнего запуска (ножкаETR).
Частота сигнала внешнего запуска ETRP должна составлять по крайней мере ¼ от
частоты TIMxCLK. Предделитель может быть разрешен для уменьшения частоты ETRP.
Он полезен когда вход имеет слишком быстрое тактирование.
00: предделитель отключен
01: частота ETRP делится на 2
10: частота ETRP делится на 4
11: частота ETRP делится на 8

Bits 11:8    ETF[3:0]:    External trigger filter
Описание: 
Фильтр внешнего запуска (ножкаETR).
Это битовое поле определяет частоту, используемую для выборки сигнала ETRP и длину
цифрового фильтра, применяемого к ETRP. Цифровой фильтр состоит из счетчика
событий для которого требуется N событий, чтобы подтвердить передачу на выход.
Нам нужно знать число выборок(F_sampling) + частота этих выборок(N).
Частота вычисляется из (F_ck_int – внутр частота тактирования или F_dts - определяли раньше)

Bits 7    MSM:    Master/Slave mode
Описание: 
Режим главного/подчиненного
0: Бездействует
1: Действие события по входу запуска(TRGI) задерживается чтобы совершить
синхронизацию между текущим таймером и его подчиненными(через TRGO). Это
полезно если мы захотим синхронизировать несколько таймеров по одному внешнему
событию.

Bits 6:4    TS[3:0]:    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)
Прим: Эти биты должны изменяться только когда не используются(когда SMS=000)
чтобы избежать неверного определения фронтов в момент перехода.

Bits 3    OCCS:    OCREF clear selection
Описание: 
Определяем что будет подключено к OCREF_CLR_INT.
Два варианта: Либо ножка OCREF_CLR нашего МК, либо сигнал от выхода ETRF.

Bits 2:0    SMS[2:0]:    Slave mode selection
Описание: 
Это конечный выбор того, что именно будет тактировать наш счетчик.
000: Slave mode disabled – Тактируемся от внутреннего источника тактов (internal clock).
001: Encoder mode 1 – Счет идет по фронту на входе TI2FP2, а вверх или вниз определяем напряжением на входе TI1FP1
010: Encoder mode 2 – Счет идет по фронту на входе TI1FP1, а вверх или вниз определяем напряжением на входе TI2FP2
011: Encoder mode 3 –  Счет идет по фронту на двух входах TI1FP1 и TI2FP2, а вверх или вниз определяем напряжением на  другом входе входе
100: Reset Mode – Нарастающий фронт на выбранном входе (TRGI) вызовет сброс таймера и прерывание.
101: Gated Mode - В этом режиме счет идет пока на ножке (TRGI) высокий уровень. И счет останавливается когда там станет низкий уровень.
110: Trigger Mode - В этом режиме мы можем контролировать только старт таймера от ножки (TRGI).
111: External Clock Mode 1 – В этом режиме мы тактируем наш таймер от ножки (TRGI).

TIMx_DIER  [0x0000]TIMx_DIER

Описание: Регистр разрешения прерываний/DMA.
Биты:
Bits 14    TDE:    Trigger DMA request enable.
Описание: 
Этот бит ставится программно, разрешить (DMA) от trigger flag  (слейв режим).

Bits 12    CC4DE:    Capture/Compare 4 DMA request enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 4 (DMA).

Bits 11    CC3DE:    Capture/Compare 3 DMA request enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 3 (DMA).

Bits 10     CC2DE:    Capture/Compare 2 DMA request enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 2 (DMA).

Bits 9    CC1DE:    Capture/Compare 1 DMA request enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 1 (DMA).

Bits 8    UDE:    Reserved, must be kept at reset value.
Описание: 
Этот бит ставится программно, разрешить UDE (DMA).

Bits 6    TIE:    Trigger interrupt enable.
Описание: 
Этот бит ставится программно, разрешить прерывание от trigger flag (слейв режим).

Bits 4    CC4IE:    Capture/Compare 4 interrupt enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 4 (прерывание).

Bits 3    CC3IE:    Capture/Compare 3 interrupt enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 3 (прерывание).

Bits 2    CC2IE:    Capture/Compare 2 interrupt enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 2 (прерывание).

Bits 1    CC1IE:    Capture/Compare 1 interrupt enable.
Описание: 
Этот бит ставится программно, разрешить Capture/Compare 1 (прерывание).

Bits 0    UIE:    Update interrupt enable
Описание: 
Этот бит ставится программно, разрешить UIE (прерывание).

TIMx_SR  [0x0000]TIMx_SR

Описание: Регистр статуса таймера TIMx. Здесь устанавливаются различные флаги произошедших событий. Важно что очищается этот флаг программно записью нуля.
Биты:
Bits 12    CC4OF:    Capture/Compare 4 overcapture flag.
Описание: 
Флаг перезахвата захвата/сравнения 4

Bits 11    CC3OF:    Capture/Compare 3 overcapture flag.
Описание: 
Флаг перезахвата захвата/сравнения 3

Bits 10    CC2OF:    Capture/Compare 2 overcapture flag.
Описание: 
Флаг перезахвата захвата/сравнения 2

Bits 9    CC1OF:    Capture/Compare 1 overcapture flag.
Описание: 
Флаг перезахвата захвата/сравнения 1
Этот флаг устанавливается аппаратно только когда соответствующий канал
сконфигурирован в режиме захвата входа. Он очищается программно через запись в него ‘0’.
0: Перезахват не обнаружен
1: Значение счетчика было захвачено в регистр TIMx_CCR1 когда уже был установлен
флаг CC1F.

Bits 6    TIF:    Trigger interrupt flag.
Описание: 
Этот ФЛАГ устанавливается при активном фронте TRGI в слейв режиме.

Bits 4    CC4IF:    Capture/Compare 4 interrupt flag.
Описание: 
Флаг прерывания захвата/сравнения 4

Bits 3    CC3IF:    Capture/Compare 3 interrupt flag.
Описание: 
Флаг прерывания захвата/сравнения 3

Bits 2    CC2IF:    Capture/Compare 2 interrupt flag.
Описание: 
Флаг прерывания захвата/сравнения 2

Bits 1    CC1IF:    Capture/Compare 1 interrupt flag.
Описание: 
Флаг прерывания захвата/сравнения 1
Если канал СС1 сконфигурирован как выход:
Этот флаг устанавливается аппаратно когда значение счетчика совпадает со значением
сравнение за некоторым исключением в режиме выравнивания по центру. Он очищается
программно.
0: нет совпадения
1: Содержимое счетчика TIMx_CNT совпало с содержимым регистра TIMx_CCR1. Когда
содержимое TIMx_CCR1 больше содержимого TIMx_ARR, бит CC1IF становится
высоким при переполнении счетчика(в режиме счета вверх, вниз и вверх/вниз).
Если канал СС1 сконфигурирован на вход:
Этот бит устанавливается аппаратно при захвате. Он очищается программно или чтением регистра TIMx_CCR1.
0: Захват входа не произошел
1: Значение счетчика было захвачено в регистр TIMx_CCR1(Обнаружен фронт на IC1,
который совпадает с выбранной полярностью).

Bits 0    UIF:    Update interrupt flag.
Описание: 
Этот бит ставится аппаратно, (UIF) – флаг прерывания.

TIMx_EGR  [0x0000]TIMx_EGR

Описание: Регистр генерации событий.
Биты:
Bits 6   TG:    Trigger generation
Описание: 
Ставим программно чтобы сгенерировать событие триггера (TIF флаг).
0: Не действует
1: Устанавливается флаг TIF в регистре TIMx_SR. Связанное прерывание или передача
DMA могут происходить при разрешении.

Bits 4   CC4G:    Capture/compare 4 generation.
Описание: 
Ставим программно чтобы сгенерировать событие Capture/compare 4.

Bits 3    CC3G:    Capture/compare 3 generation.
Описание: 
Ставим программно чтобы сгенерировать событие Capture/compare 3.

Bits 2    CC2G:    Capture/compare 2 generation.
Описание: 
Ставим программно чтобы сгенерировать событие Capture/compare 2.

Bits 1    CC1G:    Capture/compare 1 generation.
Описание: 
Ставим программно чтобы сгенерировать событие Capture/compare 1 .

Bits 0    UG:    Update generation.
Описание: 
Этот бит ставится программно, чтобы принудительно вызвать (UDE) или (UIF) .

TIMx_CCMR1  [0x0000]TIMx_CCMR1

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

Биты (Output compare mode):
Bits 15   OC2CE:    Output compare 2 clear enable
Описание: 
Разрешение очистку при помощи сигнала ETRF.
0: Вход ETRF не влияет на OCxRef
1: OCxRef очищается как только обнаружен высокий уровень на входе ETRF.

Bits 14:12    OC2M[2:0]:    Output compare 2 mode
Описание: 
Выбираем режим работы ножки настроенной как выход.
000: Frozen – Состояние простоя (ножка никак не меняет своё значение).
001: При превышении значения в счетном регистре и регистра сравнения канала, ножка ‘АКТИВНА’
010: При превышении значения в счетном регистре и регистра сравнения канала, ножка ‘ПАССИВНА’
011: При совпадении значения в счетном регистре и регистра сравнения канала, ножка инвертируется
100: Установка ножки в ‘ПАССИВНА’.
101: Установка ножки в ‘АКТИВНА’.
110: PWM mode 1 – ПРИ СЧЕТЕ ВВЕРХ, ножка в лог ‘АКТИВНА’ пока TIMx_CNT<TIMx_CCR2
ПРИ СЧЕТЕ ВНИЗ, ножка в лог ‘ПАССИВНА’ пока TIMx_CNT>TIMx_CCR2
111: PWM mode 2 - ПРИ СЧЕТЕ ВВЕРХ, ножка в лог ‘ПАССИВНА’ пока TIMx_CNT<TIMx_CCR2
ПРИ СЧЕТЕ ВНИЗ, ножка в лог ‘АКТИВНА’ пока TIMx_CNT>TIMx_CCR2

Bits 11    OC2PE:    Output compare 2 preload enable
Описание: 
Включаем буферизацию регистра TIMx_CCR2.
0: Предзагрузочный регистр для TIMx_CCR1 запрещен. TIMx_CCR1 может быть
записан в любой момент, новое значение принимается немедленно.
1: Предзагрузочный регистр для TIMx_CCR1 разрешен. Операции доступа
чтения/записи обращаются к предзагрузочному регистру. Предзагруженное значение
TIMx_CCR1 загружается в активный регистр по каждому событию обновления.
Прим:
1. Эти биты не могут модифицироваться при программировании LOCK-уровня 3 и
CC1S=00(канал сконфигурирован на выход).
2. Режим ШИМ может использоваться без подтверждения предзагрузочного
регистра только в режиме одного импульса(установлен бит ОРМ в регистре
TIMx_CR1). В противном случае поведение не гарантируется.

Bits 10    OC2FE:    Output compare 2 fast enable
Описание: 
Проблема состоит в том что на то что бы поменять сост ножки надо неск. тактов.
0 – Выключено (минимальное число тактов с момента сигнала до изм. состояния 5 тактов)
1 - Включено (минимальное число тактов с момента сигнала до изм. состояния 3 тактов)
(включать можно только при работе ножки в режимах PWM1 или PWM2)

Bits 9:8    CC2S[1:0]:    Capture/Compare 2 selection
Описание: 
Определяем как будут работать ножки каналов (вход/выход).
00: CC2 channel (канал настроен как выход)
01: CC2 channel (канал настроен как вход) IC2 соединен с TI2
10: CC2 channel (канал настроен как вход) IC2 соединен с TI1
11: CC2 channel (канал настроен как вход) IC2 соединен с TRC. Этот режим разрешен
только если какой-то внутренний триггер выбран при помощи TS Битов (TIMx_SMCR)
Note: CC2S Биты могут быть перезаписаны только если канал выключен (CC2E = 0 в TIMx_CCER).

Биты (Input capture mode):

Bits 15:12   IC2F[2:0]:    Input capture 2 filter
Описание: 
Эти биты определяют цифровой фильтр (длительность)
Цифровой фильтр состоит из счетчика
событий, которому требуется N событий чтобы передать переход на выход.
f_SAMPLING – частота выборки. как часто опрашивается ножка.
N – число выборок необходимых для подтверждения события изменения на входе.
f_DTS – эта частота которая определяется битами CKD[2:0] в регистре TIMx_CR1

Bits 11:10   IC2PSC[1:0]:   Input capture 2 prescaler
Описание: 
Этот пред делитель .
00: no prescaler – нет пред делителя
01: capture is done once every 2 events (каждый 2 сигнал)
10: capture is done once every 4 events (каждый 4 сигнал)
11: capture is done once every 8 events (каждый 8 сигнал)

TIMx_CCMR2  [0x0000]TIMx_CCMR2_111

Описание: 2-й регистр выбора и настройки режимов захват/сравнение (каналы CH3 и CH4).
Биты (Output compare mode):

ТЕ ЖЕ БИТЫ ЧТО И В ПРОШЛОМ РЕГИСТРЕ, ТОЛЬКО ДЛЯ КАНАЛОВ 4 И 3

TIMx_CCER  [0x0000]TIMx_CCERОписание: Регистр разрешения захвата/сравнения (настройка полярности и разрешение выхода захвата/сравнения).
Биты :
Bits 13   CC4P:    Capture/Compare 4 output polarity
Описание: 
Если ножка определена как ВЫХОД то:
0 – ‘АКТИВНА’ – активное сост это лог ’1′
1 - ‘АКТИВНА’ – активное сост это лог ’0′
Если ножка определена как ВХОД то:
0 – Ножка не инвертирована. Захват происходит по нарастающему фронту.
1 - Ножка инвертирована. Захват происходит по спадающему фронту.

Bits 12   CC4E:    Capture/Compare 4 output enable
Описание: 
Если ножка определена как ВЫХОД то:
0 - Ножка не активна (сигнал не поступает на ножку)
1 - Нока активна (сигнал поступает на ножку)
Если ножка определена как ВХОД то:
0 - Ножка не активна  (запрещаем захват счетчика от сигнала на ножке)
1 - Нока активна  (разрешаем захват счетчика от сигнала на ножке)

ТЕ ЖЕ БИТЫ, ТОЛЬКО ДЛЯ КАНАЛОВ ОСТАЛЬНЫХ КАНАЛОВ

TIMx_CNT  [0x0000]TIMx_CNT Описание: Этот регистр содержит значение счета, так как это счетный регистр. Каждый такт частоты увеличивает значение этого счетчика на единицу. Необходимо предварительно включить таймер.

TIMx_PSC  [0x0000]TIMx_PSCОписание: Этот регистр содержит биты для  определения результирующей частоты работы счетчика. Вот формула расчета результирующей частоты работы (частота называется CK_CNT) расчет fck/(PSC[15:0] + 1)

TIMx_ARR  [0x0000]TIMx_ARRОписание: Этот регистр содержит биты, которые определяют до какого значения надо досчитывать счетчику. Это регистр автоперезагрузки (сравнения).

TIMx_CCR1  [0x0000] TIMx_CCR1Описание: 1-й регистр захвата/сравнения (сохраняет значение счётного режима в режиме захвата или же в него записывается нужное значение в режиме сравнения).
Если канал настроен как выход: В этом регистре будет храниться значение которое будет сравниваться с значением счетного регистра для формирования сигналов на ножке.
Если канал настроен как вход: В этом регистре будет храниться значение счетного регистра в момент последнего события захвата (IC1)

TIMx_CCR2  [0x0000]TIMx_CCR2Описание: 2-й регистр захвата/сравнения (сохраняет значение счётного режима в режиме захвата или же в него записывается нужное значение в режиме сравнения).
Если канал настроен как выход: В этом регистре будет храниться значение которое будет сравниваться с значением счетного регистра для формирования сигналов на ножке.
Если канал настроен как вход: В этом регистре будет храниться значение счетного регистра в момент последнего события захвата (IC1)

TIMx_CCR3  [0x0000]TIMx_CCR3Описание: 3-й регистр захвата/сравнения (сохраняет значение счётного режима в режиме захвата или же в него записывается нужное значение в режиме сравнения).
Если канал настроен как выход: В этом регистре будет храниться значение которое будет сравниваться с значением счетного регистра для формирования сигналов на ножке.
Если канал настроен как вход: В этом регистре будет храниться значение счетного регистра в момент последнего события захвата (IC1)

TIMx_CCR4  [0x0000]TIMx_CCR4Описание: 4-й регистр захвата/сравнения (сохраняет значение счётного режима в режиме захвата или же в него записывается нужное значение в режиме сравнения).
Если канал настроен как выход: В этом регистре будет храниться значение которое будет сравниваться с значением счетного регистра для формирования сигналов на ножке.
Если канал настроен как вход: В этом регистре будет храниться значение счетного регистра в момент последнего события захвата (IC1)

TIMx_DCR  [0x0000]TIMx_DCRОписание: Регистр управления DMA.
Биты :
Bits 12:8    DBL[4:0]:    DMA burst length
Описание: 
Определяет сколько пересылать данных. Этот 5-битовый вектор определяет длину пересылок DMA(таймер распознает пересылку вспышки когда производится доступ чтения или записи по адресу TIMx_DMAR) т.е. количество пересылок. Пересылками могут быть полуслова или байты(см пример ниже).
00000: 1 transfer,
00001: 2 transfers,
00010: 3 transfers,

10001: 18 transfers.

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

00000: TIMx_CR1,
00001: TIMx_CR2,
00010: TIMx_SMCR

TIMx_DMAR  [0x0000]TIMx_DMARОписание: Адрес полной пересылки DMA.
Регистр обманка)) читаем пишем через DMA а попадаем в разные регистры.
Определяем адрес : (TIMx_CR1 address) + (DBA + DMA index) x 4
TIMx_CR1 address – первый адрес нашего таймера
DBA – биты отсупа от начального регистра (определяем конкретный регистр)
DMA index – параметр увеличивается или стоит на месте
(для чтения одного регистра несколько раз или нескоських)

Пример использования возможности вспышки DMA
В данном примере используется возможность вспышки DMA таймера для обновления
содержимого регистров CCRx (x = 2, 3, 4) с полусловной передачей в регистры CCRx. Это
делается в следующих шагах:
1. Сконфигурировать соответствующий канал DMA:
– периферийным адресом канала DMA является адрес регистра DMAR
– адресом памяти канала DMA является адрес буфера в ОЗУ, содержащий данные,
пересылаемые через DMA в регистры CCRx.
– количество пересылаемых данных = 3(см. примечание ниже)
– циклический режим запрещен
2. Сконфигурировать регистр DCR через конфигурацию битовых полей DBA и DBL: DBL = 3
пересылки, DBA = 0xE.
3. Разрешить DMA-запрос обновления TIMx(установить бит UDE в регистре DIER).
4. Разрешить TIMx.
5. Разрешить канал DMA.
Прим: Данный пример для случая, когда каждый регистр CCRx обновляется один раз. Если
каждый регистр CCRx обновляется к примеру дважды, то количество данных на пересылку
должно быть 6. Например, буфер в ОЗУ содержит data1, data2, data3, data4, data5 и data6. Данные
пересылаются в регистры CCRx следующим образом: по первому запросу обновления DMA data1
передается в CCR2, data2 передается в CCR3, data3 передается в CCR4 и по второму запросу
обновления DMA, data4 передается в CCR2, data5 передается в CCR3 и data6 передается в CCR4.

Практика

Порядок запуска таймера таков:
1. Подать тактирование на выбранный таймер. Через RCC. Все таймеры сидят на шине APB1, и, соответственно, включаются с помощью регистра RCC_APB1EN. 
2. Назначить предделитель, записав необходимое число в регистр TIMx_PSC (это необходима для формирования частоты счета, которая считается исходя из частоты шины APB1). Частота счёта будет определяться как Ftclk / (TIMx_PSC + 1). Например, если частота шины APB1  24 МГц, а TIMx_PSC равен 2399, то частота счёта (с какой скоростью будет увеличиваться значение счётчика) будет равна 24 / (2399 + 1) = 1 МГц.
3. Назначить максимальное значение счётчика, при коем он будет перезагружаться, записав его в TIMx_ARR. При наличии там нуля, таймер работать не будет.
4. Установить флаг разрешения счёта (CEN в TIMx_CR1).

Пример

Ссылки на комплектующие:
Отладочная плата: STM32VL Discovery (ссылка)
Микроконтроллер: STM32F100RBT6 (
ссылка)
Провод USB :  (ссылка)
Макетная плата: (ссылка)



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

Ваш e-mail не будет опубликован. Обязательные поля помечены *