【问题标题】:Is it possible to enable the MemManage_Handler in a STM32 L0是否可以在 STM32 L0 中启用 MemManage_Handler
【发布时间】:2025-12-08 00:15:02
【问题描述】:

我编写了一个触发HardFault_Handler 的程序。我相信这是因为内存不足异常,但我想完全确定。我见过有人在 M3/M4 内核上禁用 system interrupt handlers,参考数据表指出

(2016 年 2 月 19 日)嵌套向量中断控制器

删除了 MemManage_Handler、BusFault_Handler、Usagefault _Handler 和 DebugMon_Handler 来自表 53:向量列表。 更新了 EXTI_IMR 复位值。 (2016 年 2 月 19 日)

这意味着曾几何时MemManage_Handler 存在并且可以启用/禁用。但不存在这方面的文档。 是否可以启用此处理程序?

我个人觉得很难相信 ST 已经从硅片中完全移除了这个处理程序,因此应该写入一个寄存器的休眠部分来启用这个处理程序。

【问题讨论】:

    标签: arm interrupt stm32


    【解决方案1】:

    请参阅ARM's Cortex-M0+ Devices Generic User Guide 的第 2-17/2-18 页,其中显示了处理器本机的异常。这部分没有 MemManage 异常,故障处理程序处理的所有异常都通过HardFault

    我怀疑 ST 的员工在其他地方的某个时间点对向量表进行了复制粘贴错误,其中确实有 MemManage_Handler。这也解释了数据表中的注释,因为他们修复了错误而不是隐藏功能。

    【讨论】:

      【解决方案2】:

      你不能。

      根据Managing memory protection unit (MPU) in STM32 MCUs中的第3.5节Cortex-M0+设备没有MemMange Fault,它只能触发HardFault for MPU error。

      删除此功能不是 ST 的决定,但 Cortex-M0+ 根本没有 MemMange 故障。我认为 ST 在他们的文档中犯了一个复制粘贴错误。

      但是,我相信您仍然可以在 HardFault Handler 中捕获 MPU 错误。

      【讨论】:

        最近更新 更多