Мигание светодиодов со сменой режима от внешнего прерывания

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

nis@jane ~/stm32/f4examples/04-exti $ cp -av 01-led-en-if-but-pres/ 02-change-blink-mode

nis@jane ~/stm32/f4examples/04-exti $ cd 02-change-blink-mode/

Программа будет ловить события на линии exti0, по нарастающему фронту - будем определять только нажатия. После которого будем менять состояние двух противоположных светодиодов. Также будет прерывание от системного таймера.

Начнем как обычно с изменения startup.c.

Затем добавим несколько блоков кода в work.c.

Выключение прерывания внутри обработчика exti0 и включение его ч/з 1мс (внутри функции аппаратной задержки) вызвано тем, что МК работает на значительно большой частоте - 16МГц и для него такое явление как дребезг контактов даже с применением триггера Шмитта выглядит как несколько отдельных нажатий. Поэтому мы должны снизить чувствительность МК с помощью задержки.

Наконец, можно собрать проект и загрузить его в МК:

nis@jane ~/stm32/f4examples/04-exti/02-change-blink-mode $ make write

Видео к проекту: