Прерывания HAL на STM32

Поговорим сегодня про одну из важны тем в изучении микроконтроллеров STM32 — прерывания. Рассмотрим примеры настройки и как использовать прерывания HAL STM32 на практике. Программный код будет представлен для Cube IDE, вся настройка прерываний будет в Cube MX.

Если говорить по простому, то прерывания это какое либо событие произошедшее с контроллером, требующие первоочередной обработки. Например появление единицы на ножке микроконтроллера, если это внешнее прерывание. Или прием данных по UART или SPI интерфейсам.

Обработка прерываний STM32

В STM32 обработка прерываний одинакова для всех видов прерываний. Алгоритм работы одинаковый.

  • Выбрать нужное прерывание (внешние или от периферии)
  • Активировать данное прерывание в CubeMX
  • Активировать функцию Callback
  • Написать обработчик прерывания

Рассмотрим подробнее данный алгоритм на примере внешнего прерывания. Генерировать его будет кнопка подключенная к PC4. Какой контроллер говорить не буду, так как для всех алгоритм обработки прерываний одинаков.

Внешние прерывания HAL

Чтобы назначить на ножку микроконтроллера внешнее прерывание, необходимо в CubeMX выбрать нужную ножку, нажать на ней левой клавишей мышки и выбрать из списка GPIO_EXTIx, ult X — номер контакта:

Внешние прерывание HAL

После этого, на вкладке System Core -> NVIC появится строка EXTI line4 interrupt. Необходимо установить галочку в этой строчке. Этим действием, мы указываем, что будем использовать внешние прерывание на 4 линии. В STM32 имеется возможность подключить до 16 внешних прерываний. При выборе нескольких прерываний может появится строчка: EXTI line[9:5] interrupts.

Активация внешнего прерывания HAL

ВНИМАНИЕ! Если активировать прерывание на любой линии одновременно на разных портах, то STM32 не сможет их распознать. Например: STM32 не поймет если подключить кнопки на PC4, PD4 и PA4. Для этих портов будет одно и тоже внешнее прерывание EXTI line4 interrupt. Что бы все работало можно подключить кнопки например так: PC1,PD2,PA3 и активировать прерывания на этих линиях.

После этого нам необходимо включить функцию Callback. Для этого необходимо перейти на вкладку Project Manager -> Advanced Settings и на против EXTI выбрать ENABLE:

Включение функции Callback внешнего прерывания

Вот и все, мы настроили работу нашего внешнего прерывания. Включаем генерацию кода и переходим к обработчику нашего прерывания. Ниже разберем как использовать прерывания HAL STM32 на практике.

Пример работы с внешним прерыванием STM32

Функция Callback отмечена как __weak ‘void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) это значит, что эту функцию можно переопределить пользователем. Описана функция в модуле stm32f1xx_hal_gpio.c.

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
     if (GPIO_Pin == GPIO_PIN_4)
     {
    	// Выполняем необходимый код
     }
}

В следующих статьях рассмотрим прерывания от периферии, такие как SPI, UART, Таймеры и др.

Aliexpress

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии