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

108 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 串口发送监控功能说明
## 概述
在系统监控模块中增加了串口UART/RS485发送数据的统计功能用于跟踪通过串口发出的数据量和错误情况。
## 新增功能
### 1. 监控统计字段
`SystemMonitorStats_t` 结构体中新增了三个字段:
```c
// 串口发送监控信息
uint32_t uart_tx_count; // 串口发送次数
uint32_t uart_tx_bytes; // 串口发送总字节数
uint32_t uart_tx_error_count; // 串口发送错误次数
```
### 2. 监控函数
#### SystemMonitor_ReportUARTTx()
```c
void SystemMonitor_ReportUARTTx(uint32_t bytes_sent);
```
- **功能**: 报告成功的串口发送操作
- **参数**: `bytes_sent` - 本次发送的字节数
- **调用时机**: 在 `RS485_SendData()` 中DMA启动成功后调用
#### SystemMonitor_ReportUARTTxError()
```c
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
```
## 使用示例
### 获取串口统计信息
```c
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;
```
### 计算发送速率
```c
// 假设运行时间为 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` 返回次数)
- 按时间段的发送速率统计