Nucleo STM32F103RB开发板EXTI4中断失效问题排查求助
故障排查及修复方案
1. GPIO配置的致命错误
你在配置PB3和PB4引脚时,错误操作了GPIOC->CRL而非GPIOB->CRL:
GPIOC->CRL |= ((1 << 15) | (1<<19)); // 错误:应该是GPIOB->CRL
这导致PB3和PB4的引脚模式根本没有被正确设置,虽然EXTI3碰巧工作(可能是引脚默认浮空状态刚好能触发),但PB4的配置完全失效。
2. GPIO输入模式配置逻辑错误
你注释里标注的10 : input是错误的:STM32F1的GPIO模式位(MODE)中,10是复用功能输出模式,而非输入模式。输入模式需要将MODE位设为00,再通过CNF位配置输入类型(浮空/上拉/下拉)。
正确的PB3、PB4输入配置示例(以上拉输入为例):
// PB3:MODE位清0(输入模式),CNF位设为01(上拉输入) GPIOB->CRL &= ~(0xF << 12); GPIOB->CRL |= (0x2 << 12); // PB4:MODE位清0,CNF位设为01(上拉输入) GPIOB->CRL &= ~(0xF << 16); GPIOB->CRL |= (0x2 << 16);
3. AFIO_EXTICR寄存器宏定义误用
你配置EXTI3时使用了错误的宏:
AFIO->EXTICR[0] &= ~AFIO_EXTICR2_EXTI3; // 错误:EXTI3属于EXTICR1,对应宏是AFIO_EXTICR1_EXTI3
虽然EXTI3当前能工作,但这是不规范的写法,建议修正为:
AFIO->EXTICR[0] &= ~AFIO_EXTICR1_EXTI3; AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI3_PB;
4. 中断服务函数的延时问题
你在中断服务函数里加了20000000次nop的延时,这会导致系统长时间被中断阻塞,可能影响其他功能,建议替换为更合理的防抖方式(比如使用定时器防抖),不过这不是EXTI4失效的直接原因。
内容的提问来源于stack exchange,提问作者lucas mure
相关产品推荐
相关产品推荐

