From b53fff11e6f0d560594834de32886239cbba90a3 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期二, 16 十二月 2025 15:48:58 +0800
Subject: [PATCH] 外部调完,可以解析下发的MQTT数据了,但是路径文件太大准备换成http模式

---
 STM32H743/Core/Src/stm32h7xx_it.c |   78 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 72 insertions(+), 6 deletions(-)

diff --git a/STM32H743/Core/Src/stm32h7xx_it.c b/STM32H743/Core/Src/stm32h7xx_it.c
index 205126b..eac2b1a 100644
--- a/STM32H743/Core/Src/stm32h7xx_it.c
+++ b/STM32H743/Core/Src/stm32h7xx_it.c
@@ -23,6 +23,7 @@
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
 #include "bluetooth.h"
+#include "DBG.h"
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/
@@ -55,6 +56,27 @@
 
 /* USER CODE END 0 */
 
+/* store fault info for post-mortem inspection */
+typedef struct {
+  volatile uint32_t r0;
+  volatile uint32_t r1;
+  volatile uint32_t r2;
+  volatile uint32_t r3;
+  volatile uint32_t r12;
+  volatile uint32_t lr;
+  volatile uint32_t pc;
+  volatile uint32_t psr;
+  volatile uint32_t cfsr;
+  volatile uint32_t hfsr;
+  volatile uint32_t mmfar;
+  volatile uint32_t bfar;
+} MemFaultInfo_t;
+
+volatile MemFaultInfo_t g_memFaultInfo;
+
+void MemManage_Handler_C(uint32_t *pulFaultStackAddress);
+
+
 /* External variables --------------------------------------------------------*/
 extern TIM_HandleTypeDef htim2;
 extern TIM_HandleTypeDef htim3;
@@ -118,15 +140,59 @@
 /**
   * @brief This function handles Memory management fault.
   */
-void MemManage_Handler(void)
-{
-  /* USER CODE BEGIN MemoryManagement_IRQn 0 */
+//__attribute__((naked)) void MemManage_Handler(void)
+//{
+//  __ASM volatile(
+//      "TST LR, #4\n\t"
+//      "ITE EQ\n\t"
+//      "MRSEQ R0, MSP\n\t"
+//      "MRSNE R0, PSP\n\t"
+//      "B MemManage_Handler_C\n\t"
+//  );
+//}
 
-  /* USER CODE END MemoryManagement_IRQn 0 */
+/* C handler: pulFaultStackAddress points to stacked r0, r1, r2, r3, r12, lr, pc, psr */
+void MemManage_Handler_C(uint32_t *pulFaultStackAddress)
+{
+  /* save stacked registers */
+  g_memFaultInfo.r0 = pulFaultStackAddress[0];
+  g_memFaultInfo.r1 = pulFaultStackAddress[1];
+  g_memFaultInfo.r2 = pulFaultStackAddress[2];
+  g_memFaultInfo.r3 = pulFaultStackAddress[3];
+  g_memFaultInfo.r12 = pulFaultStackAddress[4];
+  g_memFaultInfo.lr = pulFaultStackAddress[5];
+  g_memFaultInfo.pc = pulFaultStackAddress[6];
+  g_memFaultInfo.psr = pulFaultStackAddress[7];
+
+  /* save fault status registers */
+  g_memFaultInfo.cfsr = SCB->CFSR;
+  g_memFaultInfo.hfsr = SCB->HFSR;
+  g_memFaultInfo.mmfar = SCB->MMFAR;
+  g_memFaultInfo.bfar = SCB->BFAR;
+
+  /* try to print brief info to debug UART (may not always succeed in fault context) */
+  DBG_Printf("*** MemManage Fault ***\r\n");
+  DBG_Printf("CFSR=0x%08x HFSR=0x%08x MMFAR=0x%08x BFAR=0x%08x\r\n",
+             (unsigned)g_memFaultInfo.cfsr,
+             (unsigned)g_memFaultInfo.hfsr,
+             (unsigned)g_memFaultInfo.mmfar,
+             (unsigned)g_memFaultInfo.bfar);
+  DBG_Printf("R0=0x%08x R1=0x%08x R2=0x%08x R3=0x%08x\r\n",
+             (unsigned)g_memFaultInfo.r0,
+             (unsigned)g_memFaultInfo.r1,
+             (unsigned)g_memFaultInfo.r2,
+             (unsigned)g_memFaultInfo.r3);
+  DBG_Printf("R12=0x%08x LR=0x%08x PC=0x%08x PSR=0x%08x\r\n",
+             (unsigned)g_memFaultInfo.r12,
+             (unsigned)g_memFaultInfo.lr,
+             (unsigned)g_memFaultInfo.pc,
+             (unsigned)g_memFaultInfo.psr);
+
+  /* break here for debugger, then loop forever */
+  __asm volatile ("BKPT #0");
   while (1)
   {
-    /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
-    /* USER CODE END W1_MemoryManagement_IRQn 0 */
+    __asm volatile ("WFI");
   }
 }
 

--
Gitblit v1.10.0