Вступить в клуб →
средняявопросПрошивка: память, загрузчик и надёжность

Нажатие кнопки навсегда вешает контроллер на 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 нельзя вызывать до запуска планировщика

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела