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

ШИМ, он же широтно-импульсная модуляция (PWM pulse-width mode). Суть режима проста - каждый период выводу присваевается либо лог "0" либо "1" (в зависимости от настроек), а при совпадении с регистром сравнения/захвата переключается на противоположное. Если значение больше чем максимальное значение регистра счета или же оно равно 0, то на выводе всегда одно значение:

Т.к режимов шим у нас 2 - прямой и обратный, создадим переключение режимов на внешнем прерывании exti0 (кнопка).

Создадим проект:

nis@jane ~/stm32/f4examples/05-timers $ cp -a 02-ccr-in-comp-mode/ 03-ccr-pwm-mode

nis@jane ~/stm32/f4examples/05-timers $ cd 03-ccr-pwm-mode/

Добавим прерывание от exti0 в startup.c.

И немного исправим инциализацию в work.c.

После этого можно собрать проект и загрузить код в МК:

nis@jane ~/stm32/f4examples/05-timers/03-ccr-pwm-mode $ make write

Видео процесса:

В этом варианте мы используем pwm на низкой частоте - 1Гц, хотя на самом деле его обычно используют на частоте порядка нескольких десятков-сотен килогерц.