STM_ATEM/User/UART_Monitoring_Feature.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

3.5 KiB
Raw Permalink Blame History

串口发送监控功能说明

概述

在系统监控模块中增加了串口UART/RS485发送数据的统计功能用于跟踪通过串口发出的数据量和错误情况。

新增功能

1. 监控统计字段

SystemMonitorStats_t 结构体中新增了三个字段:

// 串口发送监控信息
uint32_t uart_tx_count;          // 串口发送次数
uint32_t uart_tx_bytes;          // 串口发送总字节数
uint32_t uart_tx_error_count;    // 串口发送错误次数

2. 监控函数

SystemMonitor_ReportUARTTx()

void SystemMonitor_ReportUARTTx(uint32_t bytes_sent);
  • 功能: 报告成功的串口发送操作
  • 参数: bytes_sent - 本次发送的字节数
  • 调用时机: 在 RS485_SendData() 中DMA启动成功后调用

SystemMonitor_ReportUARTTxError()

void SystemMonitor_ReportUARTTxError(void);
  • 功能: 报告串口发送错误
  • 调用时机: 在 RS485_SendData() 中DMA启动失败时调用

3. 集成位置

rs485_driver.c

RS485_SendData() 函数中集成了监控调用:

  • DMA启动成功时调用 SystemMonitor_ReportUARTTx(Size) 记录发送字节数
  • DMA启动失败时调用 SystemMonitor_ReportUARTTxError() 记录错误

4. 监控数据保存

监控数据会定期保存到SD卡的 LOG.TXT 文件中,采用精简格式以减少阻塞时间:

Samples:[样本数] Ovf:[溢出数]
SD:Wr=[写入次数] Err=[错误数] Full=[满次数] Bytes=[字节数] Files=[文件数] Drop=[丢弃数]
UART:Tx=[发送次数] Bytes=[字节数] Err=[错误数]

示例输出

Samples:1000000 Ovf:5
SD:Wr=500 Err=2 Full=3 Bytes=32000000 Files=10 Drop=15
UART:Tx=250 Bytes=12500 Err=1

使用示例

获取串口统计信息

SystemMonitorStats_t stats;
SystemMonitor_GetStats(&stats);

// 访问串口统计数据
uint32_t tx_count = stats.uart_tx_count;
uint32_t tx_bytes = stats.uart_tx_bytes;
uint32_t tx_errors = stats.uart_tx_error_count;

计算发送速率

// 假设运行时间为 runtime_seconds 秒
float bytes_per_second = (float)stats.uart_tx_bytes / runtime_seconds;
float packets_per_second = (float)stats.uart_tx_count / runtime_seconds;

文件修改清单

  1. User/system_monitor.h

    • SystemMonitorStats_t 结构体中添加串口统计字段
    • 声明 SystemMonitor_ReportUARTTx()SystemMonitor_ReportUARTTxError() 函数
  2. User/system_monitor.c

    • 实现 SystemMonitor_ReportUARTTx() 函数
    • 实现 SystemMonitor_ReportUARTTxError() 函数
    • 更新 SystemMonitor_SaveStatus() 函数,在保存的日志中包含串口统计信息
  3. User/rs485_driver.c

    • 包含 system_monitor.h 头文件
    • RS485_SendData() 函数中添加监控调用

注意事项

  1. 性能影响: 监控函数调用非常轻量(仅增加计数器),对系统性能影响可忽略不计
  2. 线程安全: 当前实现未使用互斥锁,如果在多线程环境中使用,建议添加适当的保护机制
  3. 计数器溢出: 使用 uint32_t 类型,在高频发送场景下可能溢出,建议定期保存和重置统计数据
  4. 错误统计: 仅统计DMA启动失败的情况不包括传输过程中的错误如需要可在DMA错误回调中添加

扩展建议

如需更详细的监控,可以考虑添加:

  • 平均包大小统计
  • 发送延迟统计
  • 忙状态拒绝次数(HAL_BUSY 返回次数)
  • 按时间段的发送速率统计