Сам считающий блок с его обработчиками конечно интересен, но существует более интересный блок таймера - канал захвата/сравнения (Capture/compare channel) в качестве примера расмотрим 1-ый канал:
Этот блок интересен тем, что позволяет делать захват/сравнение в зависимости от настроек. У этих двух режимов есть много подрежимов и различных настроек.
Мы начнем с самого простого из них - режим сравнения. В этом режиме содержимое регистра сравнения/захвата TIMx_CCRx периодически сравнивается с содержимым счетчика и при совпадении генерируется событие, которое в зависимости от настроек может привести к различным действиям:
Возьмем для начала самый простой случай - переключение состояния вывода по совпадению.
Для начала создадим проект:
nis@jane ~/stm32/f4examples/05-timers $ cp -a 01-ints-if-overflow/ 02-ccr-in-comp-mode
nis@jane ~/stm32/f4examples/05-timers $ cd 02-ccr-in-comp-mode/
После упростим файл startup.c т.к. прерывания нам пока не нужны.
А вот в рабочем коде инициализация немного усложнилась поэтому внесем изменения в work.c.
Соберем проект и загрузим его в МК:
nis@jane ~/stm32/f4examples/05-timers/02-ccr-in-comp-mode $ make write
А после загрузки можно наблюдать процесс работы таймера:
В этом примере видно как можно настроить таймер чтобы он сам управлял светодиодами без нагрузки на процессорное ядро.