refactor: 适配STM32F103RCT6 + FreeRTOS工程框架,同步baremetal-r8协议手册

- IOC: MCU切换为STM32F103RCTx,添加FREERTOS+TIM4中间件,HAL时间基准改为TIM4
- Keil uvprojx: 目标器件RC,Flash 256KB/48KB SRAM,宏xE,HD Flash算法,启动文件xe.s
- EWARM ewp: 宏xE,ICF/启动文件切换为xe版本
- 启动文件: Stack_Size 0x400→0x800适配FreeRTOS
- 重写项目需求说明/技术实现文档,描述FreeRTOS 5任务架构+lwIP NO_SYS=0
- 新增AT固件使用手册(MUX/NET/LINK协议)和工程调试指南(FreeRTOS专项)
This commit is contained in:
2026-04-09 20:22:48 +08:00
parent 68c64959c7
commit c21d85a9da
10 changed files with 1322 additions and 430 deletions
+164 -38
View File
@@ -1,59 +1,185 @@
# TCP2UART 项目需求说明
## 一、项目概述
## 一、项目目标
基于 STM32F103 单片机和 FreeRTOS 开发一款具有双网口通信功能的 TCP 串口透传设备,实现网络数据与串口数据之间的双向透明传输
本项目基于 `STM32F103RCT6``CH390D` 实现一台多实例 TCP 与双串口数据透传设备
## 二、硬件平台
最终对外协议模型固定为:
| 项目 | 说明 |
1. `MUX`:控制串口侧是否采用 MUX 承载
2. `NET`:全局静态网络配置
3. `LINK[idx]`:按实例索引组织的链路配置
系统必须支持:
- `2` 路 TCP Server 实例
- `2` 路 TCP Client 实例
- `UART1` 作为 AT 配置口
- `UART2 / UART3` 作为业务数据口
## 二、硬件与软件边界
### 2.1 硬件边界
- 主控:`STM32F103RCT6`256KB Flash / 48KB SRAM
- 以太网芯片:`CH390D`
- 网卡数量:`1`
- 配置口:`UART1`
- 数据口:`UART2``UART3`
### 2.2 软件边界
- 执行模型:`FreeRTOS`
- 网络协议栈:`lwIP + NO_SYS=0`(支持 socket/netconn 线程安全 API
- 调试输出:`SEGGER RTT`
- 采用 `FreeRTOS` 任务调度
- 采用 `lwIP socket/netconn``RAW API` 实现多路 TCP 并发
- 不包含 DHCP 协议支持
## 三、最终协议需求
### 3.1 MUX 帧格式
所有 MUX 数据承载必须使用如下格式:
```text
SYNC | LEN_H | LEN_L | SRCID | DSTMASK | PAYLOAD | TAIL
```
要求:
- `DSTMASK != 0x00`:业务数据帧
- `DSTMASK = 0x00`:系统控制帧
- 系统控制帧承载 AT 文本命令
- AT 文本命令必须以 `\r\n` 结尾
### 3.2 统一端点编码
系统必须使用统一端点编码,同时覆盖 UART 与 TCP 逻辑实例:
| 端点 | 编码 |
|------|------|
| 主控芯片 | STM32F103R8T6(后续大批量生产可用 GD32 替代) |
| 以太网芯片 | CH390D |
| PCB 设计工具 | 立创 EDA(避免 AD 版权纠纷) |
| 串口通道 | 2 路 UART |
| `C1` | `0x01` |
| `C2` | `0x02` |
| `UART2` | `0x04` |
| `UART3` | `0x08` |
| `S1` | `0x10` |
| `S2` | `0x20` |
## 三、软件平台
要求:
| 项目 | 说明 |
|------|------|
| 开发环境 | STM32CubeMX + HAL 库 |
| 操作系统 | FreeRTOS |
| 协议栈 | 标准 TCP/IP 协议 |
- `SRCID` 为单值
- `DSTMASK` 为位图
- `DSTMASK=0x00` 仅保留给系统控制帧
## 四、核心功能需求
## 四、AT 接口需求
### 4.1 双链路 TCP 通信
### 4.1 命令分类
- **Server 链路**:设备作为 TCP Server,监听指定端口,等待外部客户端连接
- **Client 链路**:设备作为 TCP Client,主动连接远程服务器
- 两条链路共享**同一个对外 IP 地址**
AT 协议必须收敛为以下三类命令:
### 4.2 串口透传
1. `AT+MUX`
2. `AT+NET`
3. `AT+LINK`
- **Server 链路数据** <==> **UART2** 双向透传
- **Client 链路数据** <==> **UART3** 双向透传
- 仅透传 TCP 数据区(Payload),无需解析串口协议
不再保留历史展开式实例字段命令。
### 4.3 参数配置
### 4.2 MUX 命令需求
- 支持通过 **UART1** 串口命令修改设备 IP 地址等网络参数
- 配置参数需掉电保存
- `AT+MUX=0/1`:设置全局 MUX 模式
- `AT+MUX?`:查询当前 MUX 模式
### 4.4 数据可靠性
### 4.3 NET 命令需求
- 确保 TCP 数据与串口数据双向传输不丢包
- 提供丢包率测试方案及测试数据
`NET` 必须统一表达以下静态网络参数:
## 五、交付物
```text
IP,MASK,GW,MAC
```
1. 原理图及 PCB 设计文件(立创 EDA 格式)
2. STM32 固件源码(CubeMX 工程 + HAL 库 + FreeRTOS
3. 丢包测试方案及测试工具/数据
4. 使用说明文档
说明:
## 六、约束条件
- 设备只有一张网卡,因此本地 IP 不按实例拆分
- DHCP 不属于协议需求范围
- 通信协议:标准 TCP/IP
- 串口透传:纯数据透传,不解析上层协议
- 硬件尺寸及供电参数由甲方提供
### 4.4 LINK 命令需求
`LINK[idx]` 必须统一表达如下字段:
```text
EN,LPORT,RIP,RPORT,UART
```
要求:
- `idx` 固定映射四个实例:`0=S1``1=S2``2=C1``3=C2`
- `Server``Client` 共用同一条 `LINK` 配置模型
- `LPORT` 必须可配置
- `RIP / RPORT` 必须可配置
- `UART` 必须可配置
## 五、功能需求
### 5.1 TCP 功能
- 支持 `2` 路 Server
- 支持 `2` 路 Client
- 每个实例通过 `LINK[idx]` 配置其本地端口、对端地址、对端端口和串口路由
### 5.2 串口透传功能
- `UART2 / UART3` 支持普通透传模式与 MUX 透传模式
- 当需要多实例共享数据口时,必须启用 MUX 模式
- 业务数据流向由 `SRCID / DSTMASK` 决定
### 5.3 系统控制功能
- 系统控制帧由 `DSTMASK=0x00` 表示
- 系统控制帧进入 AT 解析路径
- 控制文本必须以 `\r\n` 结束
### 5.4 参数保存功能
- 参数修改后支持 `SAVE`
- 支持 `RESET` 后按保存配置启动
- 支持恢复默认配置
## 六、FreeRTOS 任务架构需求
### 6.1 任务划分
系统至少应包含以下 FreeRTOS 任务:
| 任务 | 优先级 | 职责 |
|------|--------|------|
| NetworkTask | 高 | CH390 事件轮询 + lwIP tcpip 处理 |
| UartTask | 高 | UART DMA/IDLE 接收 + MUX 帧处理 |
| ConfigTask | 中 | AT 命令解析与响应 |
| RouteTask | 中 | SRCID/DSTMASK 数据路由 |
| DefaultTask | 低 | LED 心跳 + 看门狗 |
### 6.2 任务间通信
- 使用 `Queue` 传递 UART 接收数据帧
- 使用 `Semaphore` 同步 CH390 中断事件
- 使用 `Mutex` 保护 SPI/CH390 共享访问
- 使用 `StreamBuffer` 传递 TCP 数据到 UART 方向
## 七、非功能需求
1. 满足 `STM32F103RCT6``256KB Flash / 48KB SRAM` 约束
2. 工程可在 `MDK-ARM` 下构建
3. 调试输出统一使用 `SEGGER RTT`
4. 不引入 DHCP、DNS、UDP 等当前非目标协议
5. FreeRTOS 堆使用 `heap_4.c`,总堆大小建议 `10KB`
6. 所有任务栈通过 `uxTaskGetStackHighWaterMark` 监控
## 八、验收口径
验收时以下几点必须同时成立:
1. 文档只使用 `MUX / NET / LINK` 作为最终协议模型
2. 文档不再出现历史 `S1... / C1...` 外部字段
3. 串口控制文本统一规定为 `\r\n` 结束
4. MUX 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致
5. FreeRTOS 任务无死锁、无栈溢出、无优先级反转