是否可以在 STM32 L0 中启用 MemManage_Handler

Is it possible to enable the MemManage_Handler in a STM32 L0

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

(19-Feb-2016) Nested Vector Interrupt Controller

Removed MemManage_Handler, BusFault_Handler,Usagefault _Handler and DebugMon_Handler from Table 53: List of vectors. Updated EXTI_IMR reset value. (19-Feb-2016)

这意味着曾几何时 MemManage_Handler 存在并且它可能是 enabled/disabled。但是没有这方面的文件。 是否可以启用此处理程序?

我个人很难相信 ST 已将此处理程序从芯片中完全删除,因此应该写入寄存器的休眠部分以启用此处理程序。

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

我怀疑 ST 的员工在某个时候从其他地方复制粘贴了矢量 table,但确实有 MemManage_Handler。这也解释了数据表中的说明,因为他们修复了一个错误而不是隐藏了一个功能。

你不能。

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

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

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