我想将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);
}
也许值得一提的是,我在同一项目(SPI1)中也有SPI配置。
答案 0 :(得分:2)
如果ISR名称不正确,则会使用某些默认错误代码(其名称取决于配置)。
在我的代码中,其名为EXTI3_IRQHandler而不是EXTI3_IRQnHandler。
检入启动文件(在我的设置中为startup_stm32l432xx.s),以使用ISR名称。