Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2739
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

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

200

Чтобы получить приоритет прерывания, HAL определяет следующую функцию:

 

void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, \ uint32_t* pSubPriority);

Должен признать, что сигнатура данной функции немного нечеткая, поскольку она отличается от HAL_NVIC_SetPriority(): в ней мы также должны указать PriorityGroup, тогда как функция HAL_NVIC_SetPriority() вычисляет ее внутренне. Я не знаю, почему ST решила использовать такую сигнатуру, и я не вижу причины отличать ее от сигнатуры

HAL_NVIC_SetPriority().

Текущие сгруппированные приоритеты можно получить с помощью следующей функции:

uint32_t HAL_NVIC_GetPriorityGrouping(void);

7.4.3. Установка уровня прерываний в CubeMX

CubeMX также можно использовать для установки приоритета IRQ и схемы сгруппированных приоритетов. Данная конфигурация выполняется в представлении Configuration, нажав кнопку NVIC. Появится список разрешаемых ISR, как показано на рисунке 21.

Рисунок 21: Представление NVIC Configuration позволяет установить приоритет ISR

Используя выпадающий список Priority Group, мы можем установить схему сгруппированных приоритетов, а затем установить приоритет вытеснения и субприоритет для каждого прерывания. CubeMX автоматически сгенерирует соответствующий код Си для установки приоритета IRQ внутри функции MX_GPIO_Init(). Напротив, глобальная схема сгруппированных приоритетов конфигурируется внутри функции HAL_MspInit().