STM32. Внешние прерывания EXTI

Поділитися
Вставка
  • Опубліковано 15 жов 2024
  • Если вы мечтаете научиться работать с микроконтроллерами, писать для них программы, но не имеете никаких знаний, то канал "it-самородок" именно для вас.
    Мы вместе по шагам, не спеша изучим один (может и больше) из языков программирования, научимся загружать программу в микроконтроллер, чтобы последний выполнял нужную нам функцию.
    Если вы захотите поддержать автора, то это можно сделать подписавшись на канал, рекомендуя наш канал в сети интернет, и/или отправив небольшую монету на карту Сбербанка 5469 6200 2019 7610.

КОМЕНТАРІ • 10

  • @ВячеславСоколов-з3б
    @ВячеславСоколов-з3б 4 місяці тому

    Огромное Вам спасибо за видео. Это практически единственное видео, где объяснена работа с регистрами STM напрямую!

  • @Mr.Moy-Gospodin
    @Mr.Moy-Gospodin Рік тому

    Подскажите. Важен ли именно такой порядок сперва включение прерываний (NVIC), потом настройка порта, а потом мультиплексора, включение по маске и только потом фронты . Или это не принципиально? Логичнее было-бы сперва настроить порты, потом настроить мультиплексор и фронты, и только потом разрешать прерывания (NVIC) и только уже в конце маску разрешать. И насколько правильно сбрасывать флаг прерывания PR до завершения остальных действий в обработчике прерывания? Не произойдет ли повторный вызов прерывания ДО выхода из обработчика в таком случае или просто оно будет помещено в "очередь" и прерывание вызовется опять сразу после выхода из прерывания? Вроде как это обычный void, как контролер определяет выход из подпрограмм от выхода из обработчика?

    • @itsamorodok
      @itsamorodok  Рік тому +1

      Требования к включению контроллера прерываний надо уточнить в "Program manual". Сколько примеров я смотрел, сначала включают глобальные прерывания, затем уже все остальное. Так как сначала выполняются операции настройки/конфигурирования, а только потом происходит прерывание и ее обработка, то разницы какой регистр (конфигурирование выводов порта или выбор прерывания по фронту или спаду) сначала модифицировать, думаю, разницы нет, это разные регистры. Прямо сейчас проверить не могу, может, позже уточню. Не помню, чтобы как при включении SPI, нужно было сначала конфигурировать порты, а только потом включать глобальные прерывания. В примере с SPI последний включается только по завершении других настроек.
      Что касается сброса флагов, то показанный пример не критичен к тому когда сбросить флаг, а по сути, вы правы, флаг надо бы сбросить по окончании обработки прерывания. Если специально в регистрах не задавать приоритет прерываний путем перевода его в разряд ожидающих, то действует правило веса прерывания по номеру. Чем меньше номер, тем весомее прерывание.

    • @Mr.Moy-Gospodin
      @Mr.Moy-Gospodin Рік тому

      @@itsamorodok Спасибо.

    • @itsamorodok
      @itsamorodok  Рік тому

      Тут наиболее, на мой взгляд, важное действие, если мы не пользуемся библиотеками и сами пишем код на уровне регистров - после всех настроек (конфигурирование портов, разрешение прерываний в NVIC, в EXTIx) не забыть в самую последнюю очередь включить глобальные прерывания:
      __enable_irq ();

    • @Mr.Moy-Gospodin
      @Mr.Moy-Gospodin Рік тому

      @@itsamorodok Я сам не спец по микроконтроллерам, теоретически порядок может быть важен с точки зрения реинициализации или доступности регистров NVIC или мультиплексора. Не знаю описано ли это в документации, поэтому и спросил.

    • @itsamorodok
      @itsamorodok  Рік тому

      Категорического какого-то требования по порядку настроек я не нашел, прерывания в STM32 изначально выключены. Настройки пишутся как обычно, в любом порядке. Главное, чтобы при этом сами модули периферии были выключены. И последним включаем глобальные прерывания.