- 新增配置管理器模块,支持从SD卡加载运行时配置 - 将数据输出模式从编译时宏改为运行时配置,提高灵活性 - 新增配置文件 `CONFIG.TXT`,支持串口输出和存储功能的动态开关 - 集成配置管理器到主程序,在系统启动时自动加载配置 - 更新数据存储模块,使用配置管理器管理会话序号 🐛 fix(usart): 修复USART3中断配置并优化波特率 - 添加USART3中断处理函数声明和实现 - 将USART3波特率从921600提升至2000000以提高通信速率 - 调整USART1中断优先级从2改为11,优化中断响应 - 在USART3 MSP初始化和反初始化中添加中断配置 📝 docs(user): 新增功能说明文档 - 新增《配置管理功能说明》文档,详细说明运行时配置的使用方法 - 新增《串口发送监控功能说明》文档,说明新增的串口统计功能 - 文档包含配置项说明、文件格式、使用示例和注意事项 ✨ feat(monitor): 增强系统监控功能 - 在系统监控统计中添加串口发送监控字段(发送次数、字节数、错误数) - 新增串口发送统计报告函数,集成到RS485驱动中 - 优化监控状态保存格式,采用精简格式减少文件写入阻塞时间 - 监控数据现在包含串口统计信息,便于性能分析和故障排查 ♻️ refactor(main): 重构主程序配置处理逻辑 - 移除编译时宏 `DATA_OUTPUT_MODE_UART` 和 `DATA_OUTPUT_MODE_STORAGE` - 使用 `Config_IsUartOutputEnabled()` 和 `Config_IsStorageEnabled()` 函数替代 - 优化数据存储启动逻辑,仅在存储功能启用时开始记录 - 添加配置加载成功/失败的调试输出信息
402 lines
9.6 KiB
C
402 lines
9.6 KiB
C
/* USER CODE BEGIN Header */
|
|
/**
|
|
******************************************************************************
|
|
* @file stm32f4xx_it.c
|
|
* @brief Interrupt Service Routines.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2026 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
/* USER CODE END Header */
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "main.h"
|
|
#include "stm32f4xx_it.h"
|
|
/* Private includes ----------------------------------------------------------*/
|
|
/* USER CODE BEGIN Includes */
|
|
#include "ltc2508_driver.h"
|
|
#include "rs485_driver.h"
|
|
/* USER CODE END Includes */
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* USER CODE BEGIN TD */
|
|
|
|
/* USER CODE END TD */
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* USER CODE BEGIN PD */
|
|
|
|
/* USER CODE END PD */
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* USER CODE BEGIN PM */
|
|
|
|
/* USER CODE END PM */
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* USER CODE BEGIN PV */
|
|
|
|
/* USER CODE END PV */
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* USER CODE BEGIN PFP */
|
|
|
|
/* USER CODE END PFP */
|
|
|
|
/* Private user code ---------------------------------------------------------*/
|
|
/* USER CODE BEGIN 0 */
|
|
|
|
/* USER CODE END 0 */
|
|
|
|
/* External variables --------------------------------------------------------*/
|
|
extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
|
|
extern DMA_HandleTypeDef hdma_sdio_rx;
|
|
extern DMA_HandleTypeDef hdma_sdio_tx;
|
|
extern SD_HandleTypeDef hsd;
|
|
extern DMA_HandleTypeDef hdma_spi1_rx;
|
|
extern DMA_HandleTypeDef hdma_spi1_tx;
|
|
extern DMA_HandleTypeDef hdma_spi2_rx;
|
|
extern DMA_HandleTypeDef hdma_spi3_rx;
|
|
extern TIM_HandleTypeDef htim2;
|
|
extern DMA_HandleTypeDef hdma_usart1_tx;
|
|
extern UART_HandleTypeDef huart1;
|
|
extern UART_HandleTypeDef huart3;
|
|
/* USER CODE BEGIN EV */
|
|
extern SPI_HandleTypeDef hspi1;
|
|
extern SPI_HandleTypeDef hspi2;
|
|
extern SPI_HandleTypeDef hspi3;
|
|
extern UART_HandleTypeDef huart1;
|
|
/* USER CODE END EV */
|
|
|
|
/******************************************************************************/
|
|
/* Cortex-M4 Processor Interruption and Exception Handlers */
|
|
/******************************************************************************/
|
|
/**
|
|
* @brief This function handles Non maskable interrupt.
|
|
*/
|
|
void NMI_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
|
|
|
/* USER CODE END NonMaskableInt_IRQn 0 */
|
|
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
|
while (1)
|
|
{
|
|
}
|
|
/* USER CODE END NonMaskableInt_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles Hard fault interrupt.
|
|
*/
|
|
void HardFault_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN HardFault_IRQn 0 */
|
|
|
|
/* USER CODE END HardFault_IRQn 0 */
|
|
while (1)
|
|
{
|
|
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
|
|
/* USER CODE END W1_HardFault_IRQn 0 */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles Memory management fault.
|
|
*/
|
|
void MemManage_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
|
|
|
|
/* USER CODE END MemoryManagement_IRQn 0 */
|
|
while (1)
|
|
{
|
|
/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
|
|
/* USER CODE END W1_MemoryManagement_IRQn 0 */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles Pre-fetch fault, memory access fault.
|
|
*/
|
|
void BusFault_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN BusFault_IRQn 0 */
|
|
|
|
/* USER CODE END BusFault_IRQn 0 */
|
|
while (1)
|
|
{
|
|
/* USER CODE BEGIN W1_BusFault_IRQn 0 */
|
|
/* USER CODE END W1_BusFault_IRQn 0 */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles Undefined instruction or illegal state.
|
|
*/
|
|
void UsageFault_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
|
|
|
/* USER CODE END UsageFault_IRQn 0 */
|
|
while (1)
|
|
{
|
|
/* USER CODE BEGIN W1_UsageFault_IRQn 0 */
|
|
/* USER CODE END W1_UsageFault_IRQn 0 */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles System service call via SWI instruction.
|
|
*/
|
|
void SVC_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN SVCall_IRQn 0 */
|
|
|
|
/* USER CODE END SVCall_IRQn 0 */
|
|
/* USER CODE BEGIN SVCall_IRQn 1 */
|
|
|
|
/* USER CODE END SVCall_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles Debug monitor.
|
|
*/
|
|
void DebugMon_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
|
|
|
/* USER CODE END DebugMonitor_IRQn 0 */
|
|
/* USER CODE BEGIN DebugMonitor_IRQn 1 */
|
|
|
|
/* USER CODE END DebugMonitor_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles Pendable request for system service.
|
|
*/
|
|
void PendSV_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN PendSV_IRQn 0 */
|
|
|
|
/* USER CODE END PendSV_IRQn 0 */
|
|
/* USER CODE BEGIN PendSV_IRQn 1 */
|
|
|
|
/* USER CODE END PendSV_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles System tick timer.
|
|
*/
|
|
void SysTick_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN SysTick_IRQn 0 */
|
|
|
|
/* USER CODE END SysTick_IRQn 0 */
|
|
HAL_IncTick();
|
|
/* USER CODE BEGIN SysTick_IRQn 1 */
|
|
|
|
/* USER CODE END SysTick_IRQn 1 */
|
|
}
|
|
|
|
/******************************************************************************/
|
|
/* STM32F4xx Peripheral Interrupt Handlers */
|
|
/* Add here the Interrupt Handlers for the used peripherals. */
|
|
/* For the available peripheral interrupt handler names, */
|
|
/* please refer to the startup file (startup_stm32f4xx.s). */
|
|
/******************************************************************************/
|
|
|
|
/**
|
|
* @brief This function handles EXTI line1 interrupt.
|
|
*/
|
|
void EXTI1_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN EXTI1_IRQn 0 */
|
|
|
|
/* USER CODE END EXTI1_IRQn 0 */
|
|
HAL_GPIO_EXTI_IRQHandler(ADC_DRY_Pin);
|
|
/* USER CODE BEGIN EXTI1_IRQn 1 */
|
|
|
|
/* USER CODE END EXTI1_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles DMA1 stream0 global interrupt.
|
|
*/
|
|
void DMA1_Stream0_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
|
|
|
|
/* USER CODE END DMA1_Stream0_IRQn 0 */
|
|
HAL_DMA_IRQHandler(&hdma_spi3_rx);
|
|
/* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
|
|
|
|
/* USER CODE END DMA1_Stream0_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles DMA1 stream3 global interrupt.
|
|
*/
|
|
void DMA1_Stream3_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN DMA1_Stream3_IRQn 0 */
|
|
|
|
/* USER CODE END DMA1_Stream3_IRQn 0 */
|
|
HAL_DMA_IRQHandler(&hdma_spi2_rx);
|
|
/* USER CODE BEGIN DMA1_Stream3_IRQn 1 */
|
|
|
|
/* USER CODE END DMA1_Stream3_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles TIM2 global interrupt.
|
|
*/
|
|
void TIM2_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN TIM2_IRQn 0 */
|
|
|
|
/* USER CODE END TIM2_IRQn 0 */
|
|
HAL_TIM_IRQHandler(&htim2);
|
|
/* USER CODE BEGIN TIM2_IRQn 1 */
|
|
|
|
/* USER CODE END TIM2_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles USART1 global interrupt.
|
|
*/
|
|
void USART1_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN USART1_IRQn 0 */
|
|
|
|
/* USER CODE END USART1_IRQn 0 */
|
|
HAL_UART_IRQHandler(&huart1);
|
|
/* USER CODE BEGIN USART1_IRQn 1 */
|
|
|
|
/* USER CODE END USART1_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles USART3 global interrupt.
|
|
*/
|
|
void USART3_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN USART3_IRQn 0 */
|
|
|
|
/* USER CODE END USART3_IRQn 0 */
|
|
HAL_UART_IRQHandler(&huart3);
|
|
/* USER CODE BEGIN USART3_IRQn 1 */
|
|
|
|
/* USER CODE END USART3_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles SDIO global interrupt.
|
|
*/
|
|
void SDIO_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN SDIO_IRQn 0 */
|
|
|
|
/* USER CODE END SDIO_IRQn 0 */
|
|
HAL_SD_IRQHandler(&hsd);
|
|
/* USER CODE BEGIN SDIO_IRQn 1 */
|
|
|
|
/* USER CODE END SDIO_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_spi1_rx);
|
|
/* USER CODE BEGIN DMA2_Stream0_IRQn 1 */
|
|
|
|
/* USER CODE END DMA2_Stream0_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles DMA2 stream3 global interrupt.
|
|
*/
|
|
void DMA2_Stream3_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN DMA2_Stream3_IRQn 0 */
|
|
|
|
/* USER CODE END DMA2_Stream3_IRQn 0 */
|
|
HAL_DMA_IRQHandler(&hdma_sdio_rx);
|
|
/* USER CODE BEGIN DMA2_Stream3_IRQn 1 */
|
|
|
|
/* USER CODE END DMA2_Stream3_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles USB On The Go FS global interrupt.
|
|
*/
|
|
void OTG_FS_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN OTG_FS_IRQn 0 */
|
|
|
|
/* USER CODE END OTG_FS_IRQn 0 */
|
|
HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
|
|
/* USER CODE BEGIN OTG_FS_IRQn 1 */
|
|
|
|
/* USER CODE END OTG_FS_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles DMA2 stream5 global interrupt.
|
|
*/
|
|
void DMA2_Stream5_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN DMA2_Stream5_IRQn 0 */
|
|
|
|
/* USER CODE END DMA2_Stream5_IRQn 0 */
|
|
HAL_DMA_IRQHandler(&hdma_spi1_tx);
|
|
/* USER CODE BEGIN DMA2_Stream5_IRQn 1 */
|
|
|
|
/* USER CODE END DMA2_Stream5_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles DMA2 stream6 global interrupt.
|
|
*/
|
|
void DMA2_Stream6_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN DMA2_Stream6_IRQn 0 */
|
|
|
|
/* USER CODE END DMA2_Stream6_IRQn 0 */
|
|
HAL_DMA_IRQHandler(&hdma_sdio_tx);
|
|
/* USER CODE BEGIN DMA2_Stream6_IRQn 1 */
|
|
|
|
/* USER CODE END DMA2_Stream6_IRQn 1 */
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles DMA2 stream7 global interrupt.
|
|
*/
|
|
void DMA2_Stream7_IRQHandler(void)
|
|
{
|
|
/* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
|
|
|
|
/* USER CODE END DMA2_Stream7_IRQn 0 */
|
|
HAL_DMA_IRQHandler(&hdma_usart1_tx);
|
|
/* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
|
|
|
|
/* USER CODE END DMA2_Stream7_IRQn 1 */
|
|
}
|
|
|
|
/* USER CODE BEGIN 1 */
|
|
|
|
/* USER CODE END 1 */
|