You need to enable JavaScript to run this app. STM32F103外部中断禁用后如何重新启用?
优惠活动
大模型
产品
解决方案
定价
更多

STM32F103外部中断禁用后如何重新启用?

你可以根据你用的固件库或者开发需求选以下任意一种方式实现,两种方式本质都是操作NVIC的ISER/ICER寄存器,区别只是要不要自己手写寄存器操作:

  • 第一种:复用现有标准库配置(最稳妥,不需要手动改寄存器)
    只要你之前存配置的NVIC_InitStructure变量里的其他参数(中断通道、抢占优先级、响应优先级)没有被后续代码修改过,直接重新执行你最开始的启用代码即可:
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

NVIC_Init标准库函数内部会自动计算你配置的中断通道对应的位,自动写ISER寄存器完成使能,不需要你手动操作寄存器,也不会改动其他中断的配置。

  • 第二种:直接操作寄存器(适合对寄存器映射熟悉,需要极致精简代码的场景)
    ARM Cortex内核的NVIC设计里,ISER(中断设置使能寄存器)是只写1生效的寄存器,写0不会改动任何位,所以直接给对应通道的位写1就能完成使能:
// 举个例子,假如你要使能的是EXTI0_IRQn,对应通道号是6
NVIC->ISER[EXTI0_IRQn >> 5] = 1 << (EXTI0_IRQn & 0x1F);

同理禁用的时候写ICER寄存器即可:

NVIC->ICER[EXTI0_IRQn >> 5] = 1 << (EXTI0_IRQn & 0x1F);

注意如果是外部中断的话,重新使能前最好先清掉EXTI对应的挂起位,避免之前触发的未处理中断在使能后立刻执行。

  • 第三种:如果你用的是HAL库,直接调用官方封装的接口即可,不需要维护结构体配置:
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 传入你要使能的外部中断号即可

内容的提问来源于stack exchange,提问作者jiangyin first brother

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 05:18:02