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