From c8240d55741f0ed86099a0a8c616f4fc68372134 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期四, 25 十二月 2025 10:17:55 +0800
Subject: [PATCH] OTA功能测试完成,4G超时时间异常,出现4G中断情况,等杜工修改。
---
STM32H743/Core/Src/stm32h7xx_it.c | 163 ++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 139 insertions(+), 24 deletions(-)
diff --git a/STM32H743/Core/Src/stm32h7xx_it.c b/STM32H743/Core/Src/stm32h7xx_it.c
index aa119d7..990df7a 100644
--- a/STM32H743/Core/Src/stm32h7xx_it.c
+++ b/STM32H743/Core/Src/stm32h7xx_it.c
@@ -20,10 +20,10 @@
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32h7xx_it.h"
-#include "bluetooth.h"
-
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
+#include "bluetooth.h"
+#include "DBG.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -57,9 +57,12 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
-extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
+extern TIM_HandleTypeDef htim4;
+extern DMA_HandleTypeDef hdma_uart4_rx;
+extern DMA_HandleTypeDef hdma_uart5_rx;
+extern DMA_HandleTypeDef hdma_uart5_tx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
@@ -68,6 +71,8 @@
extern DMA_HandleTypeDef hdma_usart3_tx;
extern DMA_HandleTypeDef hdma_usart6_rx;
extern DMA_HandleTypeDef hdma_usart6_tx;
+extern UART_HandleTypeDef huart4;
+extern UART_HandleTypeDef huart5;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
@@ -102,7 +107,49 @@
void HardFault_Handler(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
-
+ // 鎵撳嵃HardFault淇℃伅
+ // 娉ㄦ剰锛氳繖閲屽亣璁緋rintf宸茬粡閲嶅畾鍚戝埌UART锛屼笖鍦℉ardFault涓繕鑳藉伐浣�
+ // 濡傛灉涓嶈兘宸ヤ綔锛屽彲鑳介渶瑕佺洿鎺ユ搷浣滃瘎瀛樺櫒杈撳嚭
+
+// // 鑾峰彇SCB->HFSR, CFSR绛夊瘎瀛樺櫒鍊�
+// volatile uint32_t hfsr = SCB->HFSR;
+// volatile uint32_t cfsr = SCB->CFSR;
+// volatile uint32_t mmfar = SCB->MMFAR;
+// volatile uint32_t bfar = SCB->BFAR;
+//
+// printf("\r\n=== HARD FAULT ===\r\n");
+// printf("HFSR: 0x%08X\r\n", hfsr);
+// printf("CFSR: 0x%08X\r\n", cfsr);
+//
+// if (hfsr & (1 << 30)) {
+// printf("Forced HardFault\r\n");
+// }
+//
+// if (cfsr & 0xFFFF0000) {
+// printf("Usage Fault: 0x%04X\r\n", (cfsr >> 16));
+// if (cfsr & (1 << 24)) printf(" - UNALIGNED access\r\n");
+// if (cfsr & (1 << 25)) printf(" - DIVBYZERO\r\n");
+// }
+//
+// if (cfsr & 0x0000FF00) {
+// printf("Bus Fault: 0x%02X\r\n", (cfsr >> 8));
+// if (cfsr & (1 << 15)) printf(" - BFAR valid: 0x%08X\r\n", bfar);
+// if (cfsr & (1 << 10)) printf(" - IMPRECISERR (Imprecise data bus error)\r\n");
+// if (cfsr & (1 << 9)) printf(" - PRECISERR (Precise data bus error)\r\n");
+// if (cfsr & (1 << 8)) printf(" - IBUSERR (Instruction bus error)\r\n");
+// }
+//
+// if (cfsr & 0x000000FF) {
+// printf("MemManage Fault: 0x%02X\r\n", cfsr & 0xFF);
+// if (cfsr & (1 << 7)) printf(" - MMFAR valid: 0x%08X\r\n", mmfar);
+// }
+//
+// // 灏濊瘯鎵撳嵃LR鍜孭C锛堥渶瑕佹眹缂栬緟鍔╋紝杩欓噷绠�鍗曟墦鍗板瘎瀛樺櫒锛�
+// // __asm("MOV R0, LR");
+// // __asm("MRS R1, MSP");
+// // __asm("MRS R2, PSP");
+//
+// printf("System Halted.\r\n");
/* USER CODE END HardFault_IRQn 0 */
while (1)
{
@@ -275,20 +322,6 @@
}
/**
- * @brief This function handles TIM1 update interrupt.
- */
-void TIM1_UP_IRQHandler(void)
-{
- /* USER CODE BEGIN TIM1_UP_IRQn 0 */
-
- /* USER CODE END TIM1_UP_IRQn 0 */
- HAL_TIM_IRQHandler(&htim1);
- /* USER CODE BEGIN TIM1_UP_IRQn 1 */
-
- /* USER CODE END TIM1_UP_IRQn 1 */
-}
-
-/**
* @brief This function handles TIM2 global interrupt.
*/
void TIM2_IRQHandler(void)
@@ -317,6 +350,20 @@
}
/**
+ * @brief This function handles TIM4 global interrupt.
+ */
+void TIM4_IRQHandler(void)
+{
+ /* USER CODE BEGIN TIM4_IRQn 0 */
+
+ /* USER CODE END TIM4_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim4);
+ /* USER CODE BEGIN TIM4_IRQn 1 */
+
+ /* USER CODE END TIM4_IRQn 1 */
+}
+
+/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
@@ -373,23 +420,91 @@
}
/**
+ * @brief This function handles UART4 global interrupt.
+ */
+void UART4_IRQHandler(void)
+{
+ /* USER CODE BEGIN UART4_IRQn 0 */
+
+ /* USER CODE END UART4_IRQn 0 */
+ HAL_UART_IRQHandler(&huart4);
+ /* USER CODE BEGIN UART4_IRQn 1 */
+
+ /* USER CODE END UART4_IRQn 1 */
+}
+
+/**
+ * @brief This function handles UART5 global interrupt.
+ */
+void UART5_IRQHandler(void)
+{
+ /* USER CODE BEGIN UART5_IRQn 0 */
+
+ /* USER CODE END UART5_IRQn 0 */
+ HAL_UART_IRQHandler(&huart5);
+ /* USER CODE BEGIN UART5_IRQn 1 */
+
+ /* USER CODE END UART5_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA2 stream0 global interrupt.
+ */
+void DMA2_Stream0_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA2_Stream0_IRQn 0 */
+
+ /* USER CODE END DMA2_Stream0_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_uart4_rx);
+ /* USER CODE BEGIN DMA2_Stream0_IRQn 1 */
+
+ /* USER CODE END DMA2_Stream0_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA2 stream1 global interrupt.
+ */
+void DMA2_Stream1_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */
+
+ /* USER CODE END DMA2_Stream1_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_uart5_rx);
+ /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */
+
+ /* USER CODE END DMA2_Stream1_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA2 stream2 global interrupt.
+ */
+void DMA2_Stream2_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
+
+ /* USER CODE END DMA2_Stream2_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_uart5_tx);
+ /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
+
+ /* USER CODE END DMA2_Stream2_IRQn 1 */
+}
+
+/**
* @brief This function handles USART6 global interrupt.
*/
void USART6_IRQHandler(void)
{
/* USER CODE BEGIN USART6_IRQn 0 */
+ // Circular DMA Mode: Just set a flag, do NOT stop DMA
uint32_t tmp_flag = 0;
- uint32_t temp;
tmp_flag = __HAL_UART_GET_FLAG(&huart6, UART_FLAG_IDLE);
if ((tmp_flag != RESET))
{
-
+ g_u32BtIdleIntCount++; // Debug Counter
__HAL_UART_CLEAR_IDLEFLAG(&huart6);
- HAL_UART_DMAStop(&huart6); //
- temp = __HAL_DMA_GET_COUNTER(&hdma_usart6_rx);
- uart6_dma_recv_len = UART6_DMA_RX_BUF_SIZE - temp;
- uart6_dma_recv_end_flag = 1;
+ // For Circular DMA, we do NOT stop DMA. Just set a flag to notify Poll.
+ uart6_dma_recv_end_flag = 1; // Notify Poll that new data arrived
}
/* USER CODE END USART6_IRQn 0 */
--
Gitblit v1.10.0