Оглавление:
- Шаг 1. Требования к оборудованию и программному обеспечению
- Шаг 2: понимание проблемы
- Шаг 3: Конфигурация STM32CubeMX
- Шаг 4: Разработка программного обеспечения Keil
- Шаг 5: Заключение
Видео: Устранение дребезга кнопки STM32CubeMX с прерыванием: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Привет, в этом уроке я постараюсь дать свое простое решение, чтобы предотвратить отскок кнопки, что является очень серьезной проблемой. В Интернете есть много видео, предлагающих решение этой проблемы, но ни одного из них для внешнего прерывания. Во всех этих видео нажатие кнопки проверяется методом опроса, что неэффективно. Итак, начнем!
Шаг 1. Требования к оборудованию и программному обеспечению
Требования к оборудованию:
- Совет по развитию STM32 ARM
- Компьютер
Программные требования:
- STM32CubeMX
- Keil uVision5
Шаг 2: понимание проблемы
Итак, мы пытаемся найти решение проблемы подпрыгивания кнопок. Следовательно, мы должны разобраться в проблеме. Итак, когда мы нажимаем кнопку, она должна перейти в состояние, противоположное предыдущему состоянию. Например, если он был ВЫСОКИЙ, он должен быть НИЗКИМ, а если НИЗКИЙ, то он должен быть ВЫСОКИМ. Однако это идеальное состояние (в PROTEUS:)). На самом деле, когда мы нажимаем кнопку, она начинает колебаться между ВЫСОКИМ и НИЗКИМ, прежде чем перейдет в состояние ожидания. Таким образом, он делает вид, что он был нажат несколько раз, что вызывает проблемы. Итак, что нам делать?
Здесь я хочу отметить, что в этом примере мы будем использовать внешнее прерывание для обнаружения нажатия кнопки. Итак, после того, как мы обнаружим нажатие кнопки, нам нужно подождать немного времени, например, 50 мс, чтобы перейти в состояние ожидания и еще раз проверить, находится ли кнопка в состоянии ожидания или нет. Если он находится в состоянии ожидания, мы можем продолжить выполнение нашей задачи. Итак, посмотрим код:)
Шаг 3: Конфигурация STM32CubeMX
Итак, нам нужно сначала включить внешнее прерывание для нашей кнопки (я предполагаю, что вы используете плату обнаружения STM32F407VG):
- На вкладке «Распиновка и конфигурация» щелкните контакт PA0, который подключен к кнопке, и выберите GPIO_EXTI0, который разрешает внешнее прерывание на этом контакте.
- Измените «метку пользователя» пина на «Push_Button» или что угодно.
Затем нам нужно настроить таймер, чтобы создать временную задержку 50 мс:
- Войдите в раздел "Таймеры"
- Нажмите на TIM1
- Выберите «Internal Clock» в качестве источника синхронизации.
-
В конфигурации (если вы хотите понять этот раздел, обратитесь к этому руководству, настоятельно рекомендуется «Управление серводвигателем с помощью STM32F4 ARM MCU»):
- Установите предварительный делитель на 32000
- И счетчик периода до 50
- На вкладке «Настройки NVIC» включите все прерывания.
Включить светодиод как выход:
Щелкните PD12 и установите "GPIO_Output"
Затем настройте часы, как показано на изображении выше, и сгенерируйте код.
Шаг 4: Разработка программного обеспечения Keil
Во-первых, мы определяем переменную состояния, которая гарантирует, что мы не запустим таймер внутри внешнего прерывания, когда произойдет отскок:
/ * КОД ПОЛЬЗОВАТЕЛЯ НАЧАТЬ PFP * / bool state = true; / * КОД ПОЛЬЗОВАТЕЛЯ КОНЕЦ PFP * /
Затем мы пишем ISR для внешнего прерывания:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); состояние = ложь; } еще {_NOP (); }}
Когда кнопка нажата, мы проверяем, была ли это наша определенная кнопка и истинно ли состояние. Вначале состояние будет истинным, чтобы войти в оператор if. После ввода мы запускаем таймер и устанавливаем состояние false, чтобы гарантировать, что подпрыгивание не перезапустит таймер.
Затем мы пишем ISR для прерывания таймера:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Запретить предупреждение компиляции неиспользуемых аргументов * / UNUSED (htim);
/ * ПРИМЕЧАНИЕ: эту функцию не следует изменять, когда требуется обратный вызов, HAL_TIM_PeriodElapsedCallback может быть реализован в пользовательском файле * / if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); состояние = истина; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * КОНЕЦ КОДА ПОЛЬЗОВАТЕЛЯ 4 * /
Через 50 мс мы проверяем, находится ли кнопка еще в состоянии сброса или отпущена, если да, то мы знаем, что кнопка находится в состоянии ожидания. Затем мы переключаем светодиод, делаем состояние истинным, чтобы иметь возможность обнаруживать другое нажатие кнопки, и останавливаем таймер, чтобы иметь возможность снова запустить его.
Таким образом, этот процесс гарантирует, что мы предотвратим проблему с отскоком.
Шаг 5: Заключение
Это был код для блокировки кнопок. Хочу отметить, что этот код был разработан мной, и я не являюсь опытным программистом. Так что ошибки наверняка могут быть. Если у вас есть лучшее решение, обратите внимание на него. Не забывайте, если у вас возникнут проблемы, напишите мне, и я постараюсь помочь.
Рекомендуемые:
Устранение проблемы с батареей CMOS на ноутбуке: 7 шагов (с изображениями)
Устранение проблемы с батареей CMOS на ноутбуке: однажды на вашем ПК произойдет неизбежное - батарея CMOS выйдет из строя. Это может быть диагностировано как обычная причина, по которой компьютеру необходимо повторно вводить время и дату каждый раз, когда компьютер теряет питание. Если аккумулятор вашего ноутбука разряжен и
Устранение проблемы последовательного порта USB / драйвера Mac Lilypad: 10 шагов (с изображениями)
Устранение проблемы с последовательным портом / драйвером USB Lilypad для Mac: по состоянию на 2016 год вашему Mac меньше 2 лет? Вы недавно обновляли ОС (Yosemite или что-то более новое)? Ваши USB / MP3-диски Lilypad больше не работают? Мой Учебник покажет вам, как я исправил свои USB-накопители Lilypad. Ошибка, с которой я столкнулся, была связана
Проблема с включением ЖК-телевизора Samsung Устранение неполадок при самостоятельном ремонте: 5 шагов (с изображениями)
ЖК-телевизор Samsung включен. Неисправность. Исправление самостоятельного ремонта. У нас был телевизор Samsung 32 " ЖК-телевизоры в последнее время пошли на убыль. Телевизор включился, затем сразу выключился, а затем снова включился … в бесконечном цикле. Проведя небольшое исследование, мы обнаружили, что был отзыв о
Технологии RAM и устранение неисправностей: 6 шагов
Технологии RAM и устранение неполадок: Оперативная память (RAM) - это форма очень быстрой памяти, используемая компьютерами для быстрого доступа к информации. Оперативная память намного быстрее, чем жесткие диски или твердотельные накопители, но она намного дороже и не может хранить данные без постоянного питания. Как лет
ЗАМЕНА ЗАДНЕЙ КНОПКИ ЗАДНЕЙ КНОПКИ ЗАДНЕЙ КНОПКИ RENAULT SCENIC / MEGANE: 3 шага
ЗАМЕНА ЗАДНЕЙ КНОПКИ ЗАДНЕЙ КНОПКИ RENAULT SCENIC / MEGANE BOOT BOOT TILGATE LOCK: Плохое уплотнительное кольцо, удерживающее кнопку багажника на месте, изнашивается, что приводит к потере кнопки багажника на вашем автомобиле. Единственное решение Renaults - это полная замена механизма блокировки загрузки, которая выйдет из строя снова и будет стоить