Найти в Дзене

Реагируем на нажатие кнопки правильно. STM32CubeMx + HAL

Самый простой способ управления любым прибором - это кнопка! И тут есть простой способ: в цикле опрашивать кнопку. while(true) { // Кнопка нажата? //Что-то тут происходит HAL_Delay(какое-то значение); } И тут возникают проблемы: что будет, если кнопка нажата во время ожидания? Есть элегантное решение: прерывания! Их суть понятна из названия, они прерывают исполнение главного кода, например, бесконечного цикла в функции main(). То есть когда бы ни была нажата кнопка, на нажатие будет реакция. Настроим прерывания из STM32CubeMX Кнопка у нас настраивается в разделе GPIO. Нам нужно установить специализированный режим для пина: External Interrupt Mode with Rising edge trigger detection. Это запрограммирует реакцию прерывания на повышение напряжения на пине. Далее переходим на вкладку NVIC, там всего лишь один пункт, который и надо выбрать. После настроек можно нажимать "Генерировать". STM32CubeMx сгенерирует новый код. Сами настройки включения прерывания находятся в файле main.c В файле

Самый простой способ управления любым прибором - это кнопка!

И тут есть простой способ: в цикле опрашивать кнопку.

while(true)
{
// Кнопка нажата?
//Что-то тут происходит
HAL_Delay(какое-то значение);
}

И тут возникают проблемы: что будет, если кнопка нажата во время ожидания?

Есть элегантное решение: прерывания! Их суть понятна из названия, они прерывают исполнение главного кода, например, бесконечного цикла в функции main(). То есть когда бы ни была нажата кнопка, на нажатие будет реакция.

Настроим прерывания из STM32CubeMX

Кнопка у нас настраивается в разделе GPIO. Нам нужно установить специализированный режим для пина: External Interrupt Mode with Rising edge trigger detection. Это запрограммирует реакцию прерывания на повышение напряжения на пине.

Сначала правой клавишей на пины упрощенной схемы микросхемы, где надо выбрать GPIO_EXTI13. Далее в пункте GPIO  одноименной вкладке GPIO находим целевую строчку PC13
Сначала правой клавишей на пины упрощенной схемы микросхемы, где надо выбрать GPIO_EXTI13. Далее в пункте GPIO одноименной вкладке GPIO находим целевую строчку PC13

Далее переходим на вкладку NVIC, там всего лишь один пункт, который и надо выбрать.

Включаем прерывания
Включаем прерывания

После настроек можно нажимать "Генерировать". STM32CubeMx сгенерирует новый код.

Сами настройки включения прерывания находятся в файле main.c

Функции инициализации прерывания
Функции инициализации прерывания

В файле stm32f7xx_it.c появится новая функция void EXTI15_10_IRQHandler(void). Эта функция запустится после нажатия кнопки.

Функция, которая запускается после прерывания
Функция, которая запускается после прерывания

Вписывая в эту функцию процедуры реакции на нажатие, вы без труда сможете использовать кнопку, как элемент управления вашим прибором.