c21d85a9da
- 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专项)
4.5 KiB
4.5 KiB
TCP2UART 项目需求说明
一、项目目标
本项目基于 STM32F103RCT6 与 CH390D 实现一台多实例 TCP 与双串口数据透传设备。
最终对外协议模型固定为:
MUX:控制串口侧是否采用 MUX 承载NET:全局静态网络配置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 数据承载必须使用如下格式:
SYNC | LEN_H | LEN_L | SRCID | DSTMASK | PAYLOAD | TAIL
要求:
DSTMASK != 0x00:业务数据帧DSTMASK = 0x00:系统控制帧- 系统控制帧承载 AT 文本命令
- AT 文本命令必须以
\r\n结尾
3.2 统一端点编码
系统必须使用统一端点编码,同时覆盖 UART 与 TCP 逻辑实例:
| 端点 | 编码 |
|---|---|
C1 |
0x01 |
C2 |
0x02 |
UART2 |
0x04 |
UART3 |
0x08 |
S1 |
0x10 |
S2 |
0x20 |
要求:
SRCID为单值DSTMASK为位图DSTMASK=0x00仅保留给系统控制帧
四、AT 接口需求
4.1 命令分类
AT 协议必须收敛为以下三类命令:
AT+MUXAT+NETAT+LINK
不再保留历史展开式实例字段命令。
4.2 MUX 命令需求
AT+MUX=0/1:设置全局 MUX 模式AT+MUX?:查询当前 MUX 模式
4.3 NET 命令需求
NET 必须统一表达以下静态网络参数:
IP,MASK,GW,MAC
说明:
- 设备只有一张网卡,因此本地 IP 不按实例拆分
- DHCP 不属于协议需求范围
4.4 LINK 命令需求
LINK[idx] 必须统一表达如下字段:
EN,LPORT,RIP,RPORT,UART
要求:
idx固定映射四个实例:0=S1、1=S2、2=C1、3=C2Server与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 方向
七、非功能需求
- 满足
STM32F103RCT6的256KB Flash / 48KB SRAM约束 - 工程可在
MDK-ARM下构建 - 调试输出统一使用
SEGGER RTT - 不引入 DHCP、DNS、UDP 等当前非目标协议
- FreeRTOS 堆使用
heap_4.c,总堆大小建议10KB - 所有任务栈通过
uxTaskGetStackHighWaterMark监控
八、验收口径
验收时以下几点必须同时成立:
- 文档只使用
MUX / NET / LINK作为最终协议模型 - 文档不再出现历史
S1... / C1...外部字段 - 串口控制文本统一规定为
\r\n结束 - MUX 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致
- FreeRTOS 任务无死锁、无栈溢出、无优先级反转