Найти тему
Радист

Прерывание (Interrupts) в STM32


На микроконтроллерах
STM32 прерывание может срабатывать по различным событиям, которые зависят от выбранного источника прерывания. Каждый периферийный блок микроконтроллера может генерировать прерывание по определенным условиям, которые могут быть настроены программно.

Вот некоторые примеры событий, по которым может срабатывать прерывание на
STM32:

  1. Прерывание таймера (Timer Interrupt): Таймер может генерировать прерывание при достижении значения перезагрузки, сравнения или по изменению состояния входного сигнала.
  2. Внешнее прерывание (External Interrupt): Микроконтроллер может генерировать прерывание при изменении уровня или фронта внешнего сигнала, подключенного к соответствующему пину.
  3. Прерывание по UART, SPI, I2C и другим периферийным интерфейсам: Прерывание может быть сгенерировано при завершении передачи/приема данных или при возникновении ошибок в коммуникационных интерфейсах.
  4. Прерывание по DMA (Direct Memory Access): Модуль DMA может генерировать прерывание после завершения передачи данных из или в память без вмешательства процессора.
  5. Прерывание от АЦП (ADC): АЦП может генерировать прерывание после окончания преобразования и доступности результата.
  6. Прерывание от системных таймеров: Микроконтроллер может иметь системные таймеры, которые генерируют прерывания для поддержания системного времени или выполнения периодических задач.
  7. Прерывание по событиям питания и управления энергопотреблением: Микроконтроллер может генерировать прерывания при изменении состояния питания или входа событий в режимы энергосбережения.
    В каждом из этих случаев программист может настроить периферийный блок и прерывание для обработки необходимых событий. Обработчик прерывания, соответствующий конкретному событию, выполняет задачи, которые необходимо выполнить при возникновении этого события.

    Пример по 1 пункту: этом примере будет использоваться таймер TIM2 для генерации прерывания каждую секунду. Когда происходит прерывание, будет включаться светодиод, и его состояние будет меняться каждую секунду.
1 часть кода
1 часть кода

продолжение:

2 часть кода
2 часть кода

В этом примере мы настраиваем таймер TIM2 так, чтобы он генерировал прерывание каждую секунду. При каждом прерывании состояние светодиода меняется, и он будет мигать с интервалом в 1 секунду.