Регистры сравнения/захвата в режиме сравнения

Сам считающий блок с его обработчиками конечно интересен, но существует более интересный блок таймера - канал захвата/сравнения (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

А после загрузки можно наблюдать процесс работы таймера:

В этом примере видно как можно настроить таймер чтобы он сам управлял светодиодами без нагрузки на процессорное ядро.