Внешние прерывания могут быть полезны например когда нужно зафиксировать кратковременные импульсы на пине микроконтроллера, по тому что обычный опрос пина не обязательно будет происходить в нужный момент времени. Для демонстрации полезности внешних прерываний, на микроконтроллере STM32, можно изготовить например счетчик дребезга контактов. Ранее, в данный блог, уже выкладывалась статья о внешних прерываниях для ATtiny2313 и настройке их на ассемблере. Такой счетчик показывает что дребезг есть при нажати на кнопку и даже при её отпускании, хотя при отпускании он заметно слабее и даже иногда может отсутствовать, хотя это зависит от конструкции кнопки. Счетчик дребезга контактов также может использоваться как генератор случайных чисел т.к. количество дребезга практически невозможно предсказать. М.б. на него можно, в некоторой степени повлиять например магнитом, но например в тандеме с псевдослучаным программным генератором, счетчик дребезга контактов может быть одновременно и устойчивым к внешним физическим воздействиям воздействиям и генерировать реально случайные числа. Схема может быть например такой:
Выбранный пин (пин А2) надо настроить на вход с альтернативной функцией и подтяжкой к +питания, сделать это можно командами:
Установить прерывания по восходящему фронту для пина А2 можно установкой в 1 бита 2 регистра XTI_RTSR:
Для этого в коде можно написать команду:
Для того чтобы аналогично включить прерывания по спаду, можно использовать регистр XTI_FTSR:
Для разрешения внешних прерываний пина 2, бит 2 регистра EXTI_IMR
устанавливается в 1:Теперь чтобы прерывание сработало осталось разрешить его в NVIC командой:
NVIC_EnableIRQ (EXTI2_IRQn);
После этого можно написать функцию-обработчик прерывания:
Записью единицы в бит 2 регистра EXTI_PR сбрасывается флаг внешнего прерывания 2.
counter++ -инкремент счетчика дребезга контактов.
Помимо описанных выше команд, также понадобиться работа с UARTом (см. передача по UART - https://electe.blogspot.com/2022/01/uart-stm32f103c8-cmsis.html и прием по UART - https://electe.blogspot.com/2022/01/uart-stm32f103c8-cmsis_7.html) для вывода получения результатов и некоторые другие команды. Полный текст программы можно скопировать из поля:
Результат работы счетчика дребезга контактов можно посмотреть на видео: