ШИМ, он же широтно-импульсная модуляция (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Гц, хотя на самом деле его обычно используют на частоте порядка нескольких десятков-сотен килогерц.