11. Таймеры общего назначения
Таймеры в микроконтроллерах STM32 делятся по функционалу на:
- basic timers (базовые таймеры)
- general-purpose timers (общего назначения: TIM2, TIM3, TIM4)
- advanced-control timers (продвинутые таймеры: TIM1)
В различных микроконтроллерах количество таймеров разная. Согласно
документации к контроллеру STM32F103C8 имеем 3 таймера general-purpose, и
один advanced-control.
Таймеры общего назначения
имеют такой же функционал, как и базовые.
Вообще, счетчики могут не только генерировать прерывания через определенное
время и измерять время между событиями. Таймеры могут генерировать PWM сигнал, и
одиночные импульсы, работать с периферией, например запускать преобразования АЦП,
выполнять захват сигнала, работать с энкодером и тому подобное.
Таймером будет
посвящено несколько статей. Начнем с самого простого.
11.1 Генерирование прерывания через равные промежутки времени
Например, настроим таймер TIM4 и заставим его мигать светодиод через
определенные промежутки времени. Ранее задержка делалась с помощью цикла. Давайте
сделаем мигание светодиодом "по фэншую".
Итак, мы настроим таймер
таким образом, чтобы он считал до определенного числа
и вызывал прерывания по переполнению. Таймеры считают импульсы,
которыми они
тактируются. В STM микроконтроллерах есть делитель частоты для каждого таймера.
Значение делителя могут быть от 1 до 65535. Кроме того, можно задать число, досчитав к
которому таймер будет вызывать прерывания по переполнению, обнуляться и считать
сначала.
Комбинируя эти два параметра, можно добиться нужной частоты, с которой
будет вызываться прерывания от таймера. В данном
примере контроллер будет
тактироваться от внешнего кварца частотой 8МГц. Таймер также будет работать на этой
частоте, так как значение делителя APB1 = 1. Обратите внимание на желтые блоки схемы
тактирования.
Рисунок 11.1 – Структурная сзема тактирования
То есть, если APB1
=
1, тогда таймер TIM4 будет тактуватися частотой 8МГц.
Если APB1 = 2, тогда таймер TIM4 будет тактуватися тоже частотой 8МГц.
Потому, как показано на рисунке, частота умножается на 2. Если APB1
=
4,
тогда
таймер TIM4 будет тактуватися частотой 4МГц. Потому, как показано на рисунке, если
APB1> 1, то частота, деленная на APB1 затем домножиться на 2. Не
забывайте об этой
особенности.
Мы установим делитеь 8000. Таймер будет считать с частотой 8000000/8000 = 1000
раз в секунду. Установим период = 500. То есть, досчитав до 500 (это 2 раза в секунду)
будет вызываться прерывание. В обработчике прерывания мы пропишем команду для
изменения состояния светодиода.