# STM_ATEM_F405 项目说明

## 项目概述
STM32F405 航空电磁接收机固件，基于 STM32CubeIDE + HAL 库开发。

**核心功能：** ADC 采集（LTC2508）→ 数据校正 → SD 卡存储 / UART 输出

## 目录结构
- `Core/` — CubeMX 生成代码（main.c、外设初始化），**不要手动修改生成区域**
- `User/` — 业务逻辑（驱动、数据包、存储、GPS、配置管理等）
- `Drivers/` — HAL 驱动库（不修改）
- `Middlewares/` — FatFs、USB（不修改）

## 关键模块
| 文件 | 职责 |
|------|------|
| `ltc2508_driver` | SPI ADC 采集驱动 |
| `data_packet` | 数据包格式定义与封包 |
| `data_storage` | FatFs SD 卡文件写入 |
| `correction` | ADC 校正参数应用 |
| `app_config` | 编译期配置（UART 输出、SD 存储开关）|
| `config_manager` | 配置运行时访问层，默认值来自 `app_config.h` |
| `gps_driver` | GPS NMEA 解析（UART）|
| `rs485_driver` | RS485 通信 |
| `optic_mag_driver` | 光学磁传感器 |
| `system_monitor` | 系统状态统计与诊断 |

## 通信接口
| 接口 | 用途 | 波特率 | 备注 |
|------|------|--------|------|
| USART1 (PA9/PA10) | RS485 数据输出 | 2 000 000 | TX DMA；DE/RE 控制脚 PC7 |
| USART2 (PA3) | 光泵磁力仪接收 | 115 200 | 仅 RX，DMA 循环；PA2 已改为普通 GPIO |
| USART3 (PB10/PB11) | GPS NMEA 接收 | 115 200 | TX/RX，单字节中断接收 |
| SPI1/2/3 | LTC2508 ADC 采集 | — | 三路 SPI 同时驱动三片 ADC |
| SDIO | SD 卡（FatFs） | — | 与 USB MSC 共用，采样期间独占 |
| USB | MSC 大容量存储 | — | 供 PC 直接访问 SD 卡 |

## 开发规范
- 每次修改代码后，判断是否影响模块职责、接口用途、配置项或注意事项，若有则同步更新 CLAUDE.md 对应部分

- 业务代码只放 `User/` 目录；CubeMX 生成区域（`USER CODE BEGIN/END`）内写用户代码
- 函数命名：`模块名_功能()` 如 `DataStorage_StartRecording()`
- 全局变量加 `g_` 前缀，静态变量加 `s_` 前缀
- 不添加无意义注释；注释用中文说明 **为什么**，不说明是什么

## 注意事项
- 修改 `.ioc` 文件后重新生成代码会覆盖 `Core/` 文件，需手动恢复用户代码
- USB MSC 与 FatFs 共享 SD 卡，采样期间需卸载再挂载
- 配置在 `User/app_config.h` 中以 `#define` 编译期确定；若需恢复 CONFIG.TXT 运行时加载，在 `main.c` 挂载 SD 后重新调用 `Config_Load()` 即可
