[STM32N6] STM32N6 GPIO EXTI 中断处理函数缺失

[复制链接]
10|0
Treasure101 发表于 2026-9-20 20:40 | 显示全部楼层 |阅读模式
我修改`VENC_SDCard_ThreadX`示例工程,用按键触发一些动作:按惯用的 HAL + BSP 辅助函数初始化 GPIO,并创建一个针对下降沿的中断回调处理函数。

于是我调用:
BSP_PB_Init(BUTTON_USER1, BUTTON_MODE_EXTI);
并且实现了`BSP_PB_Callback()`。
按下按键后程序卡死,回调函数根本没有被调用。

我查看了 BSP 实现代码,又改用纯 HAL 函数重新做了一遍,现象完全一样。`BSP_PB_Init()`里的这段代码

(void)HAL_EXTI_GetHandle(&hpb_exti[Button], BUTTON_EXTI_LINE[Button]);
(void)HAL_EXTI_RegisterCallback(&hpb_exti[Button], HAL_EXTI_COMMON_CB_ID, ButtonCallback[Button]);

上面代码注册了回调函数;但顺着代码往下,在 stm32n6xx-hal-driver-exti.c 这个文件里,存在一个 函数,却从来没有被调用过。

这个示例代码似乎缺少针对实际`EXTIxx_IRQHandler`中断处理函数的初始化。
// GPIO C13 USER button / exti channel 13
void EXTI13_IRQHandler(void) {
HAL_EXTI_ClearPending(&hpb_exti_user, EXTI_TRIGGER_FALLING);
btnCallback(); // in my code I simply perform the action needed not going through HAL
}

这个 IRQ 中断处理函数需要引用 EXTI 配置句柄,而该句柄正是 BSP 代码初始化过的:

static EXTI_HandleTypeDef hpb_exti_user;
//... near the top of main(), after calling BSP_PB_Init():
        HAL_EXTI_GetHandle(&hpb_exti_user, EXTI_LINE_13); // USER

我看过新建的 CubeMX 工程,`EXTI...IRQHandler`这些中断处理函数似乎也没有生成出来。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

201

主题

201

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0