STM32L4R5xx зависает, когда включено внешнее прерывание
Я хотел бы использовать контакт PC3 в качестве внешнего прерывания. Всякий раз, когда я включаю прерывание, я оказываюсь в бесконечном цикле.
Вот как я запускаю gpio и его прерывание:
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
Я проверил оборудование и все сигналы, как они должны быть. Я пробовал PB0 и PC3, и результат тот же.
Кто-нибудь, кто знает, как играть с stm32l4 и exti?
Бесконечный цикл:
Default_Handler:
Infinite_Loop:
b Infinite_Loop
.size Default_Handler, .-Default_Handler
Я даже не достигаю прерывания здесь (у меня есть точка останова там)
void EXIT3_IRQnHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_3))
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_14);
}
EXTI_ClearITPendingBit(EXTI3_IRQn);
}
Может быть, важно отметить, что у меня также есть конфигурация SPI в том же проекте (SPI1).
1 ответ
Если имя ISR неверно, он будет использовать код ошибки по умолчанию (его имя зависит от конфигурации), как это происходит в вашем случае.
В моем коде это называется EXTI3_IRQHandler, а не EXTI3_IRQnHandler.
Проверьте в вашем файле запуска (в моей настройке он называется startup_stm32l432xx.s) для использования имен ISR.