Нажатие кнопки навсегда вешает контроллер на HAL_Delay
Для подавления дребезга в обработчике внешнего прерывания добавили задержку:
void HAL_GPIO_EXTI_Callback(uint16_t pin) {
HAL_Delay(20);
if (HAL_GPIO_ReadPin(BTN_GPIO_Port, BTN_Pin) == GPIO_PIN_RESET) {
mode_next();
}
}
Приоритет EXTI в NVIC — 0, приоритет SysTick — 15. При первом нажатии кнопки контроллер зависает внутри HAL_Delay. Почему?
- SysTick не вытесняет EXTI, и счётчик тиков стоит
- HAL_Delay запрещает прерывания на время паузы
- Кнопка генерирует новое прерывание при каждом тике
- HAL_Delay нельзя вызывать до запуска планировщика
