微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确定 stm32 上的中断源?

如何解决如何确定 stm32 上的中断源?

我最近在我的 stm32 项目中使用了 Default_Handler 并且无法弄清楚是什么封装了它:

  .section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
    b   Infinite_Loop <--- here!

认情况下,很多中断都映射到认处理程序,我能弄清楚实际中断原因的唯一方法是为所有中断(60+)编写处理程序并暂停代码调试器。呸!

我在谷歌搜索中没有找到好的答案,所以我想我为其他人(或者最有可能在 6 个月内为自己记录解决方案......)

解决方法

因此,我们可以使用 NVIC(中断控制器)中的一些寄存器:

NVIC registers

以上来自STM32CubeIDE调试器。 NVIC_IABRX 包含当前活动中断的位掩码,我可以看到 NVIC_IABR1 有一个非零位(它是 0x1000)。

每个 IABR reg 是 32 位宽,所以通过一些简单的位计数,我得出结论,中断源是 32+12 = 44。现在我需要查看我的 mcu(一个 stm32wb55)的数据表,看看对应的是什么到:

datasheet excerpt

啊哈,原来是 IPCC 导致了中断!为了仔细检查,我为这个特定的中断添加了一个处理程序

void IPCC_C1_RX_IRQHandler(void)
{

}

它被调用了!

注意:我最初只是查看了 startup_stm32xxx.s 文件中的中断向量,并从该文件的开始开始计数,但由于前几个中断未包含在 NVIC_IABRX 寄存器中,因此没有成功。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。