Всем привет!) сегодня продолжаем покорять stm32f4, в данной статье будем юзать stm32f429ZI (его DISCO) и использовать прерывания микроконтроллера. В момент возникновения прерывания необходимо будет зажигать светодиод на борде (их 2). Начнем с начала. Настраиваем(конфигурируем) GPIO в void MX_GPIO_Init(void).

PA0 — пин для пользовательской кнопки (user button)
Прерывание можно ловить по фронту, по спаду или смешенный, то есть по спаду и фронту.
Режимы прерываний:

там же (в той же функции) настраиваем прерывания для реакции по входам микроконтроллера

Наши действия:
1. Выставляем приоритет прерывания для вектора прерывания NVIC (The Nested Vectored Interrupt Controller — вложенный вектор прерывания контроллера). HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);

2. Выставляем личный приоритет прерывания (главный приоритет) и второстепенный(под) приоритет.
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
Startup_stm32f429xx.s

3. Разрешаем прерывание
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
После того, как мы сделали настройку, можем приступать к написанию задач от прерываний (исполняемая функция). В момент, когда на входе GPIOA0, GPIOB0, GPIOC0 (0 пин), высокий сигнл, микроконтроллер нас забрасывает во void EXTI0_IRQHandler(void), функция размещается в stm32f4xx_t.c, таким образом происходит и для пина 1 -4, то есть для каждого пина индивидуальное прерывание, для группы пинов 5-9 и группу пинов 10-15 дела обстоят не многу по-другому, то есть, для всех пинов одной из групп -прерывание одно, пришел высокий сигнал на 5,6 или 9 функция прерывания одна и та жа, выполняется функция void EXTI9_5_IRQHandler(void), аналогично и для void EXTI10_15_IRQHandler(void).
Небольшой код работы прерывания от нажатия пользовательской кнопки на борде.
stm32f4xx_it.c

HAL_NVIC_ClearPendingIRQ(EXTI0_IRQn) – функция сбрасывает бит в регистре прерываний, для EXTI0_IRQn
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0) – функция выхода прерывания с возвратом к тому месту, где прервался исполняемый код при возникновении прерывания.
В следующей части рассмотрим именное привязывание от пинов микроконтроллера, а на сегодня все, всем пока.

2
Отправить ответ

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
adminЖеня Recent comment authors

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Самый новый Самый старый Наиболее проголосовали
Уведомлять о
Женя
Гость
Женя

3 строчки и две ошибки, хоть и из за невнимателньости.

1.
«3. Разрешаем прерывание
HAL_NVIC_EnableIRQ(EXTI2_IRQn);»

Исправьте на HAL_NVIC_EnableIRQ(EXTI0_IRQn);

2. EXTI_IRQHandler пишется с большой H.