Я использую NucleoF091RC, и я пытаюсь переключить один из светодиодных выводов нажатием кнопки пользователя (B1).
В настоящее время мой код работает, устанавливая вывод UserButton (вывод 13).) в «Режиме внешнего прерывания с нарастающим / падающим краем», а затем я добавил следующие строки в свой файл main.c
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin==GPIO_PIN_13)
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_SET);
}
Микроконтроллер ведет себя правильно: если я удерживаю кнопку пользователя, светодиод включается инаоборот.Однако в некоторых случаях происходит обратное: светодиод включается и остается включенным, и удержание кнопки выключает его, в основном изменяя намеченное поведение.
Я знаю, что это проблема, связанная с тактовым сигналом, и я былмне сказали использовать debouncer для его решения, но так как я новичок в полной мере, я понятия не имею, как этого добиться, несмотря на то, что я прочитал об этом несколько статей / просмотр веб-сайтов.
Пока лучшее, что я могпридумал добавить HAL_Delay внутри оператора if, но это полностью нарушает процесс и перестает работать.