Для начало рассмотрим количество прерываний по ножкам: существует всего семь обработчиков внешних прерываний: EXTI0, EXTI1, EXTI2, EXTI3, EXTI4, EXTI9_5, EXTI15_10. Как мы видим, что не все ножки имеют свое личное прерывание, часть ножек объединены общим прерыванием.
Так как мы в данном уроке будем использовать HAL библиотеку, нам нет необходимости заботиться о правильности выбора номера прерывания, обработки и сброса флага прерывания.
ФункциHAL_GPIO_EXTI_Callback решает все данные задачи, ее синтаксис:
где: N — номер ножки.
Единственный подводный камень, это ножка на которой настроено прерывание:
Как мы видим c документации, если мы захотим настроить прерывание EXTI1 на первой ножке порта А и первой ножке порта В, у нас не чего не выйдет, так оба порта используют один и тот же номер прерывания.
Для проверки работы прерывания мы воспользуемся ножкой PB14.
/* USER CODE BEGIN PFP */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){// функция обрабатывающая прерывание
if (GPIO_Pin==GPIO_PIN_14){// проверяем по какой ножке произошло прерывание
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_13);
}
}
/* USER CODE END PFP */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
HAL_Delay(1000);
}
/* USER CODE END 3 */