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.

Другие вопросы по тегам