基于RT-Thread与兆易创新GD32F527的工业级网络-CAN透传网关设计与实现 | 技术集结
目录
系统概述
RT-Thread使用情况
硬件框架
软件架构
软件模块详解
功能展示
链接地址
1 系统概述
本系统是一个基于GD32F527I_EVAL和RT-Thread实时操作系统开发的工业级网络-CAN总线透传网关。该系统实现了TCP/UDP网络协议与CAN总线之间的双向透明数据传输,支持Web配置管理、固件在线升级(暂未验证)、SD卡配置存储等功能,适用于工业自动化、车联网、智能设备等需要网络与CAN总线互联的应用场景。
1.1 核心功能特性
双向透明传输:网络数据与CAN总线数据的无缝双向转发
多协议支持:TCP Server/Client、UDP通信模式
灵活CAN配置:支持标准帧/扩展帧、可变波特率(5Kbps~1Mbps)
智能ID管理:固定ID、自增ID、数据提取ID三种模式
Web配置界面:现代化响应式Web UI,支持实时配置修改
配置持久化:基于SD卡的配置文件存储系统
固件OTA升级:支持通过Web界面上传固件并安全升级
系统监控:实时显示网络状态、CAN状态、传输统计
2 RT-Thread使用情况
2.1 操作系统版本与组件
系统基于RT-Thread master版本构建,充分利用了其丰富的组件生态:
已启用的核心组件:
内核:多线程调度、信号量、互斥锁、消息队列
文件系统:DFS + ELM-FAT,用于SD卡配置存储
网络协议栈:LwIP 2.03,支持TCP/UDP、DHCP、DNS。RT-Thread最新版可能会与LWIP2.03中cc.h文件的变量类型定义冲突,修cc.h文件的内容。
设备驱动框架:CAN驱动、SDIO驱动、EMAC以太网驱动
Shell组件:MSH (Module Shell),用于命令行调试
FAL:Flash抽象层(可选),用于固件分区管理
2.2 线程资源使用
系统采用多线程并发架构,主要线程包括:

2.3 IPC应用
消息队列: 用于网络与CAN数据的异步传递(net_to_can_queue, can_to_net_queue)
信号量: 用于消息队列的同步通知(net_to_can_sem, can_to_net_sem)
互斥锁: 保护配置文件访问(config_lock)、固件升级状态(upgrade_mutex)
2.4 内存管理
采用动态内存分配策略:
消息缓冲区:动态分配最大2048字节数据缓冲
Web缓冲区:请求4KB,响应34KB(扩展缓冲区)
网络缓冲区:各服务独立分配1KB缓冲
3 硬件框架
微控制器:GigaDevice GD32F527IST7
内核:ARM Cortex-M33 @ 200MHz
Flash:7680KB
SRAM:512KB
外设:本次使用CAN、10/100M以太网MAC、SDIO等

4 软件架构
4.1 系统分层架构
ApplicationLayer(应用层)
┌─────────┐ ┌─────────┐ ┌─────────┐
│Web Server│ │ Bridge │ │ Network │
│ 管理 │ │ 透传 │ │ 服务 │
└─────────┘ └─────────┘ └─────────┘
ServiceLayer(服务层)
┌──────────┐ ┌──────────┐ ┌──────────┐
│Config Save│ │ Firmware │ │ System │
│ 配置管理 │ │ 固件升级 │ │ 系统管理 │
└──────────┘ └──────────┘ └──────────┘
RT-ThreadComponents(组件层)
┌────┐ ┌─────┐ ┌─────┐ ┌────┐ ┌────┐
│LwIP│ │ DFS │ │ MSH │ │CAN │ │SDIO│
└────┘ └─────┘ └─────┘ └────┘ └────┘
RT-ThreadKernel(内核层) 线程调度 | IPC通信 | 内存管理 | 定时器 HardwareDrivers(驱动层) EMAC | CAN | SDIO | USART | GPIO | SPI
关键设计点:
异步解耦:接收线程与转发线程通过消息队列解耦
双向流控:使用信号量控制队列消费速率
动态内存:消息体动态分配,避免大栈空间占用
CAN重组:CAN帧自动重组为完整网络数据包
5 软件模块详解
5.1 Bridge透传引擎 (user_bridge.c/h)
核心功能:
网络与CAN双向数据转发,支持网络协议自定义。
CAN帧分段/重组(8字节限制)
CAN ID智能管理(固定/自增/提取)
统计信息:
网络→CAN: 数据包数、字节数
CAN→网络: 数据包数、字节数
错误计数、丢包计数、内存分配失败计数
5.2 Web配置服务器 (user_web_*.c/h)
架构特点:
单线程服务器:串行处理请求(简化设计)
页面生成:服务器端动态生成完整HTML
响应式设计:现代化CSS,支持桌面/移动端
页面模块:
user_web_network.c: 网络IP配置(DHCP/静态IP)
user_web_can.c: CAN总线参数配置
user_web_bridge.c: 透传桥接配置
user_web_server.c: 主服务器 + 系统页面 + 固件页面
扩展响应缓冲区以容纳完整的多页面HTML(~34KB)。
UI设计亮点:
渐变色侧边栏导航
卡片式内容布局
开关按钮、进度条、徽章等现代组件
悬停动画、状态指示点
表单验证与提示信息
5.3 配置管理
存储方案:
介质:MicroSD卡,16GB,由于外部扩展FLash的SPI与网络接口冲突,所以使用SDIO存储配置,后续可扩展存储数据日志和操作日志,方便进一步分析
路径:/gd32_net.cfg (使用虚拟文件系统挂载)
格式:二进制结构体 + CRC32校验
健壮性措施:
写入临时文件→重命名→删除旧备份
读取失败自动创建默认配置
CRC32完整性校验
设备健康检查(几何信息、扇区读取测试)
5.4 固件升级 (user_firmware.c/h)待验证
5.5 网络应用服务 (user_net_app.c)
可单独测试四种网络模式:

控制命令:
tcp_server start/stop
udp_server start/stop
tcp_client start/stop
udp_client start/stop
net_status: 查看所有服务状态
5.6 系统管理 (user_system.c/h)
提供功能:
系统信息查询(内存、运行时间、版本)
设备重启(reboot [delay])
恢复出厂设置(factory_reset)
配置导出为JSON格式
6 功能展示
1.1 实现功能
1.设备网络配置界面

2.CAN配置界面

注意:透传需要启动CAN(当前参数默认启动)
3.透传桥接界面

4.设备信息界面

可以查看当前固件版本,并在配置后利用按钮进行软件重启设备,以实现配置生效。
5.固件升级

固件升级界面暂未验证,可进一步拓展。
6.2 数据传输功能展示
1.设备内部默认为TCP_server,当前IP地址为192.168.1.50,CAN一侧波特率设置为1Mbps,标准帧。

实现了双向数据发送。
6.3 接口连接
连接了网口和CAN口,SD卡也插入接口中。

7 链接地址
代码地址:https://gitee.com/wujunc/gd32-f527_rtthread
