STM_ATEM/User/Config_Manager_Guide.md
zhoujie 3c0acaa176 feat(config): 新增运行时配置管理功能
- 新增配置管理器模块,支持从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()` 函数替代
- 优化数据存储启动逻辑,仅在存储功能启用时开始记录
- 添加配置加载成功/失败的调试输出信息
2026-02-07 14:28:14 +08:00

4.9 KiB
Raw Permalink Blame History

配置管理功能说明

概述

将数据输出模式配置从编译时的 #define 改为运行时可配置配置存储在SD卡文件中系统启动时自动加载。

配置项

1. UART输出使能 (uart_output_enabled)

  • 功能: 控制是否通过串口(RS485)发送数据
  • 默认值: 1 (启用)
  • 取值: 0=禁用, 1=启用

2. 存储使能 (storage_enabled)

  • 功能: 控制是否将数据存储到SD卡
  • 默认值: 0 (禁用)
  • 取值: 0=禁用, 1=启用

配置文件

文件路径

0:/CONFIG.TXT

文件格式

UART=1
STORAGE=0
SESSION=0
VERSION=65536

说明:

  • UART: 串口输出使能状态 (0或1)
  • STORAGE: SD卡存储使能状态 (0或1)
  • SESSION: 会话序号 (用于数据存储文件夹命名)
  • VERSION: 配置版本号 (用于验证配置兼容性)

使用方法

1. 初始化配置管理器

// 在main()函数中初始化
Config_Init();  // 设置默认配置

2. 加载配置

// 在文件系统挂载后加载配置
if (Config_Load() == HAL_OK) {
    // 配置加载成功
} else {
    // 配置加载失败,使用默认值
}

3. 读取配置

// 检查串口输出是否启用
if (Config_IsUartOutputEnabled()) {
    RS485_SendData(data, size);
}

// 检查存储是否启用
if (Config_IsStorageEnabled()) {
    DataStorage_WriteData(&storage, &packet);
}

4. 修改配置

// 修改串口输出设置
Config_SetUartOutput(1);  // 启用
Config_SetUartOutput(0);  // 禁用

// 修改存储设置
Config_SetStorage(1);     // 启用
Config_SetStorage(0);     // 禁用

// 保存配置到SD卡
Config_Save();

配置文件管理

创建配置文件

如果SD卡中不存在配置文件系统会在首次启动时自动创建使用默认配置值。

修改配置文件

可以通过以下方式修改配置:

  1. 通过USB连接修改:

    • 将设备连接到PC
    • 打开SD卡中的 CONFIG.TXT 文件
    • 修改配置值
    • 保存文件
    • 断开USB重启设备
  2. 通过代码修改:

    Config_SetUartOutput(1);
    Config_SetStorage(1);
    Config_Save();  // 保存到SD卡
    

恢复默认配置

Config_SetDefaults();  // 恢复默认值
Config_Save();         // 保存到SD卡

配置验证

配置管理器包含以下验证机制:

  1. 版本检查: 确保配置文件版本与当前软件兼容
  2. 值范围检查: 确保配置值在有效范围内 (0或1)
  3. 校验和验证: 检测配置数据完整性

如果验证失败,系统将自动使用默认配置。

与原有代码的对比

原有方式(编译时配置)

#define DATA_OUTPUT_MODE_UART       1
#define DATA_OUTPUT_MODE_STORAGE    0

#if DATA_OUTPUT_MODE_UART
    RS485_SendData(data, size);
#endif

#if DATA_OUTPUT_MODE_STORAGE
    DataStorage_WriteData(&storage, &packet);
#endif

新方式(运行时配置)

// 配置从SD卡加载
if (Config_IsUartOutputEnabled()) {
    RS485_SendData(data, size);
}

if (Config_IsStorageEnabled()) {
    DataStorage_WriteData(&storage, &packet);
}

优势

  1. 灵活性: 无需重新编译即可更改配置
  2. 便捷性: 通过修改SD卡文件即可调整系统行为
  3. 可维护性: 配置集中管理,易于维护
  4. 可扩展性: 易于添加新的配置项

注意事项

  1. 文件系统依赖: 配置加载需要SD卡文件系统正常工作
  2. 启动顺序: 必须在文件系统挂载后才能加载配置
  3. 默认配置: 如果配置文件不存在或损坏,系统使用默认配置
  4. 性能影响: 运行时检查比编译时宏略慢,但影响可忽略

文件修改清单

  1. User/config_manager.h - 配置管理器头文件
  2. User/config_manager.c - 配置管理器实现
  3. Core/Src/main.c - 集成配置管理器,替换编译时宏

配置示例

示例1: 仅串口输出

UART=1
STORAGE=0
SESSION=0
VERSION=65536

示例2: 仅SD卡存储

UART=0
STORAGE=1
SESSION=5
VERSION=65536

示例3: 同时启用

UART=1
STORAGE=1
SESSION=10
VERSION=65536

示例4: 全部禁用

UART=0
STORAGE=0
SESSION=0
VERSION=65536

会话序号管理

会话序号的作用

会话序号用于为每次数据采集创建唯一的文件夹。每次系统启动并开始数据存储时,会话序号会自动递增,生成类似 SESSION_000001SESSION_000002 的文件夹名称。

会话序号函数

// 获取当前会话序号
uint32_t session_num = Config_GetSessionNumber();

// 设置会话序号
Config_SetSessionNumber(100);

// 递增会话序号并返回新值
uint32_t new_session = Config_IncrementSessionNumber();

注意事项

  • 会话序号在 DataStorage_CreateSessionFolder() 中自动递增
  • 配置文件统一管理,替代了原来的 PARAM.TXT 文件
  • 会话序号会随配置一起保存到 CONFIG.TXT