1、 仪 表 技 术 与 传 感 器Instrument Technique and Sensor2023 年第 8 期收稿日期:2023-02-01基于 FreeRTOS 的多连接 TCP Server 设计范亚南,高军科,韩文斌,魏亚伟(中国航空工业集团公司洛阳电光设备研究所,河南洛阳 471009)摘要:文中提出了一种支持多客户端连接的 TCP Server 的嵌入式软硬件设计方案。该网络服务器以 Cortex-M4 芯片 STM32F407VET6 为核心控制器,通过 RMII 接口与 LAN8742A 以太网收发器进行网络数据交互。此外,文中将 LwIP 协议栈移植到 FreeRTOS
2、实时操作系统中,并根据 TCP 客户端连接情况,动态创建或消除相应客户端的网络通信线程。研究证明,TCP Server 最大可支持 4 个客户端同时连接,进行稳定的网络数据传输,有效解决了嵌入式网络系统仅单点连接的问题。关键词:FreeRTOS;STM32F407;多连接 TCP Server中图分类号:TP368 文献标识码:A 文章编号:1002-1841(2023)08-0096-05Design of Multi-connected TCP Server Based on FreeRTOSFAN Yanan,GAO Junke,HAN Wenbin,WEI Yawei(Luoyang
3、Institute of Electro-Optical Equipment,AVIC,Luoyang 471009,China)Abstract:This paper put forward a design scheme of software and hardware for multi-connected TCP Server in embedded system.The network server used Cortex-M4 chip STM32F407VET6 as the core controller,via RMII bus connected to LAN8742A E
4、thernet transceiver to process network data.Furthermore,the LwIP protocol stack was transplanted into FreeRTOS real-time op-erating system,and according to the connections of TCP clients,the TCP server can dynamically create and delete the correspond-ing communication processing thread.Research prov
5、es that the TCP Server supports a maximum of 4 client connections for steady network data transmission,which can effectively solve the problem of point to point connection for embedded network system.Keywords:FreeRTOS;STM32F407;multi-connected TCP Server0 引言以太网通信具有抗干扰性、实时性和高速率等特点。面向复杂应用环境设计的 TCP/IP
6、通信协议,具有自动纠错功能,通信质量稳定,不易受外部环境干扰,已应用于生产生活中的各个领域1-3。但是目前嵌入式系统的 TCP/IP 服务器,一般只能被单个 TCP客户端连接,未能充分体现 TCP/IP 协议的功能,不能满足多个网络节点同时连接、分布式通信架构的现代化网络通信需求4。本文提出了一种以高性能微处理器 Cortex-M4 芯片 STM32F407VET6 和以太网收发器 LAN8742A 为核心的网络通信电路。通过 FreeRTOS 实现多线程任务管理与调度,并根据 TCP 客户端连接情况,进行网络处理线程和数据内存空间的动态管理,最大可实现 4个客户端的同时连接与数据通信。基于该
7、 TCP Server的嵌入式系统,能够快速集成到网络系统中,实现分布式系统构建。1 系统总体设计如图1 所示,嵌入式 TCP 服务器由 STM32F407VET6微处理器、以太网收发器 LAN8472A、含网络变压器的RJ45 连接器以及系统电源、时钟分发等电路组成,并可通过 RJ45 连 接 器 连 接 多 个 TCP 客 户 端。其 中STM32F407VET6 处理器内部移植了 FreeRTOS 嵌入式操作系统和 Lwip 网络协议栈,可实现多个外部 TCP 客户端的同时连接。当接收到客户端的数据指令后,TCP Server 通过 Lwip 完成用户 IP 识别和数据缓存,并在任务处理
8、线程中完成对用户指令的响应执行和数据回传。图 1 嵌入式 TCP Server 总体框图69 第 8 期范亚南等:基于 FreeRTOS 的多连接 TCP Server 设计 2 硬件设计2.1 系统控制核心基于 FreeRTOS 的多连接 TCP Server 采用高性能且低功耗的 STM32F407VET6 处理器作为主控芯片。该芯片以 ARM Cortex-M4 为内核,具有 32 位浮点运算单元(FPU)和自适应实时加速器,可以从闪存 0 等待状态执行,具备内存保护单元和数字信号处理 DSP功能。STM32F407VET6 时钟频率配置为 168 MHz时,其运算能力高达 210 DM
9、IPS。除此之外,在接口方面集成了 Ethernet、USART、FSMC、CAN 等接口,能够满足各类嵌入式系统设计需求。2.2 LAN8742A 通信模块设计以太网电路由 STM32 内部集成的 MAC(媒体接入控制层)和低功耗高速网络收发器 LAN8742A(PHY物理层)、TVS 二极管 USBLC6 以及 RJ45 连接器HR911105A 组成。其中 TVS 二极管具有瞬态电压抑制作用,主要防止网线热插拔过程中的电压浪涌冲击。此外,HR911105A 内部集成网络变压器,可以隔离网线上连接的不同设备间电平不一致的影响,保护PHY 不因外部网络电压不同而通信异常甚至烧坏电路。LAN8
10、742A 通 过 RMII 接 口 与 STM32 连 接。STM32 为网络通信设计了直接内存访问(DMA)功能,当 STM32 内部 MAC 接收到来自 PHY 传递的数据包后,将其通过 FIFO 传递到 DMA,最终由 DMA 将以太网数据包直接传递给总线。同理,STM32 对外发送的数据,通过总线传递到 DMA,进而由 DMA 发送到PHY 芯片 LAN8742A,最终通过 HR911105A 连接器到达客户端。STM32F407VET6 内部 MAC 和 LAN8742A 收发器均符合 IEEE 802.32002 标准的以太网协议,且支持10/100 MB/s 的网速自动检测适配功
11、能,二者之间通过 RMII 接口连接。图 2 为网络通信电路原理图,RMII 接口的主要引脚定义如表 1 所示。表 1 RMII 接口主要信号说明表信号名称功能说明ETH_TX_ EN数据发送使能信号ETH_TXD0,ETH_TXD1同步发送的 2 位数据ETH_RXD0,ETH_RXD1同步接收的 2 位数据ETH_CRS_DV侦听与有效信号的叠加信号ETH_REF_CLK外部时钟ETH_RESETPHY 芯片复位信号图 2 LAN8742A 网络收发器电路原理图3 系统软件设计与实现系统软件使用 STM32CubeMX 界面化工具(以下简称 CubeMX)和 MDK-ARM 集成开发环境(
12、以下简称 MDK)进行程序设计。CubeMX 是一种用于 STM32系列 MCU 生成驱动配置和初始化代码的图形化工具,使用 CubeMX 在进行管脚、时钟、寄存器等硬件资源配置时,可自动进行管脚重映射和时钟倍频计算,并对各硬件资源生成底层驱动代码,可显著提高系统79 仪 表 技 术 与 传 感 器第 8 期软硬件开发的工作效率。CubeMX 支持一些常用的中间件,如 RTOS、USB、LwIP、图像和文件等。此外,CubeMX 还支持 MDK、IAR 等工具链,便于不同 IDE 的新建工程或中途修改工程配置。MDK 开发环境包含代码编辑、编译、调试、下载等功能,支持 C 语言、汇编语言编程,
13、对 STM32 微处理器有良好的支持。使用CubeMX 选择 MDK 工具链配置并生成工程后,可以直接由 MDK 打开,其工程目录如图 3 所示。图 3 MDK 打开 CubeMX 生成的代码工程目录3.1 FreeRTOS 简介与移植FreeRTOS 操作系统是一个轻量级的嵌入式系统,用 C 语言开发,系统中的任务没有数量的限制,并且支持优先级调度算法,每个任务被赋予一定的优先级,处理器会优先执行处于就绪态的优先级最高的任务;系统还支持轮换调度算法,允许不同的任务使用相同的优先级,同一优先级的任务可以共享处理器的使用时间5-6。本文使用 CubeMx 添加 FreeRTOS 系统,主要需要配
14、置的参数包括抢占式调度器、系统主频、系统时钟、最大优先级号、堆大小等,最终会集中体现在 FreeR-TOSConfig.h 文件中的相关宏定义。此外,FreeRTOS执行需要在 SysTick_Handler 中断函数中调用 osSy-stickHandler(),其 内 部 修 改 了 SVC _ Handler 和PendSV_Handler 系统中断,为实时操作系统构建运行节拍。FreeRTOS 主要包括 list.c(内核调度链表)、queue.c(队列)、croutine.c(共享堆栈任务)和 task.c(任务)等文件。本文使用独立堆栈任务(task.c)建立多个任务线程,各任务线
15、程之间支持抢占式调度。3.2 LwIP 简介与移植LwIP 的资源开销低、轻量化,是专为资源有限的嵌入式设备设计的,它以少量的资源消耗实现了较完整的 TCP/IP 协议栈,减少了对 RAM 的占用。此外LwIP 既可以移植在 RTOS 里运行,也可无系统运行。LwIP 具有内存管理策略和数据包管理策略,数据处理效率很高。通过宏编译可对 LwIP 代码和内核进行裁剪,从而进一步减少对资源的占用7-8。LwIP 保 留 了 TCP/IP 协 议 的 主 要 功 能,支 持UDP、TCP、IPv4、ARP 等协议,并提供了 3 种编程接口:Raw API、Netconn API 和 Socket A
16、PI。本文采用Socket API 进行编程,具有可读性好,利于开发维护等优点。Socket API 执行效率略低于另 2 种接口,需要在 RTOS 中构建多任务执行,其工作模式如图 4 所示。图 4 基于 RTOS 多任务执行的 Socket 通信本文使用 CubeMX 添加 LwIP 协议栈,其流程如图5 所示。CubeMX 配置时需要注意 ETH 引脚、MAC 地址、硬件校验、DHCP 关闭、RTOS 使能等。关于 TCP Server 最大连接客户端数量的设置最终会在 opt.h 中的 MEMP_NUM_NETBUF 和 MEMP_ NUM_NETCONN体现,本文设置为 4。图 5
17、LwIP 移植流程图3.3 多客户端连接的 TCP Server基于 STM32 的嵌入式 TCP 服务器在工业领域具有一定的研究基础和应用,但其目前仅实现了面向单个客户端 TCP-Echo 模式(点对点通信),未能充分发挥 TCP 通信能力,不能满足分布式网络化通信的应用需求9-10。针对以上问题,本文结合工业网络化通信需求,基于 FreeRTOS 和 Lwip,开发了一种可同时连接 4 个客户端的 TCP Server 系统软件。软件流程如图 6 所示,在完成网口和串口等硬件初始化后,通过 os-Threate 创建 3 个任务(TCP 服务、系统业务、任务监控),然后执行 osKerne
18、1Start 开启任务调度,使各个任务以 10 ms 周期循环执行。任务 1 基于 socket 实现 TCP Server 任务:创建socket;调用 bind()绑定 IP 和 Port;调用 listen()监听客户端的连接请求;调用 accept()建立新连接,并调用89 第 8 期范亚南等:基于 FreeRTOS 的多连接 TCP Server 设计 图 6 系统软件流程图和 TCP Server 任务流程图sys_thread_new()为新连接的客户端动态创建子线程并为客户端开辟内存空间 pvPortMalloc();动态子线程个数取决于所连接的客户端数量(最大 4 个),当检
19、测到有客户端断开连接后则调用 vTaskDelete()销毁线程并释放相应内存 vPortFree();在子任务中通过recv()、send()接收并发送数据,解析的指令传送到任务 2 中由业务线程进行执行。任务 2 作为业务线程,按照客户端指令循环执行嵌入式系统功能性任务。任务 3 作为任务监控线程,主要完成各线程状态监控和系统状态监控,并通过串口上报系统运行信息。4 系统测试及集成应用4.1 通信测试图 7 为对嵌入式 TCP Server 的网络测试实验图。其中 TCP Server 的 IP 为 192.168.1.31,端口:2000,PC机作为客户端,其物理网卡地址为 192.16
20、8.1.50。在PC 机的 Windows 控制台中使用“ping 192.168.1.31-t”命令测试网络是否连通。通过 Windows 控制台输出可以看到,PC 机发送的 32 bit 的数据均成功返回,耗时均小于 1 ms,整个过程的数据收发正确,丢包率为 0%。对于多客户端连接测试,可采用多个物理 PC 机同时打开网络调试助手作为客户端连接到 TCP Serv-图 7 TCP Server 通信测试实验图er。本文通过在一个物理 PC 机上创建多个虚拟机的方式,利用多个虚拟机的多个虚拟网卡进行多客户端连接测试。图 8 所示为 IP 92.168.1.51 的虚拟机中的客户端与 TCP
21、 Server 的数据通信测试图。4.2 分布式系统集成应用本文设计的 TCP Server 作为云台控制单元已应用于一款分布式网络架构的挂轨型巡检机器人,该系统的网络交联关系如图9 所示。其中 TCP Server 云台控制单元可同时连接并响应来自系统的主控模块、行走升降模块、远程监控后台,以及调试计算机的控制指令,并在其内部的系统业务线程(任务 2)中完成三轴云台方位、左臂俯仰、右臂俯仰的角度控制11。99 仪 表 技 术 与 传 感 器第 8 期图 8 TCP Server 与客户端数据通信测试图图 9 嵌入式 TCP Server 的多连接应用案例示意图5 结束语本文针对目前工业设备分
22、布式网络通信需求,设计了一种基于 STM32,可最大支持 4 个客户端同时连接访问的嵌入式 TCP Server 模块。目前,该 TCP Serv-er 模块已作为云台控制单元集成于一款分布式架构的光电检测机器人中,完成三轴云台控制功能。经测试,该 TCP Server 具有工作稳定、响应实时的特点,在嵌入式控制系统中应用该 TCP Server 的软硬件方案,可有效提升系统的通信能力、拓展性和可维护性。参考文献:1 刘培刚,杜靖中.基于 uC/OS-和 LwIP 嵌入式设备以太网通信研究与实现J.电子设计工程,2017(8):129-133.2贺春艳,庹先国,刘勇,等.一种低成本高速以太网-
23、R5485 网关设计J.自动化与仪表,2014(8):24-28.3 王卫兵,白小玲,徐倩.基于 STM32 的远程 OTDR 监测模块设计J.电子设计工程,2020,28(14):122-126.4 张健,王明昌,白仕文,等.基于嵌入式系统的低功耗服务器设计J.电子器件,2019,42(5):1205-1210.5 李少杰,马晓辉.基于 FreeRTOS 和 LwIP 的 SNTP 设计J.单片机与嵌入式系统应用,2013(9):29-31.6 候海霞.FreeRTOS 和 LwIP 的移植与系统内存分配策略的比较D.北京:华北电力大学,2017.7 蔡雄飞.嵌入式 TCP/IP 协议 Lw
24、IP 的内存管理机制研究J.杭州电子科技大学学报,2012(8):118-121.8 王祖云,杨思国,王建伟,等.嵌入式 LwIP 协议栈的移植与测试研究J.计算机与数字工程,2014(2):272-275;318.9 李玉泽,刘鹏.一种基于 STM32 的 CAN _Ethernet 网关设计J.长春理工大学学报(自然科学版),2016,39(2):120-124.10 张从鹏,赵康康.基于 STM32 的串口服务器系统开发J.仪表技术与传感器,2016(1):73-75.11 范亚南,陈国强,王增光,等.挂轨型机器人云台视觉伺服控制J.仪表技术与传感器,2022(10):46-51.作者简
25、介:范亚南(1987),工程师,硕士研究生,主要研究智能系统研发,光电探测技术。E-mail: 高军科(1983),研究员级高级工程师,硕士研究生,主要研究光电探测技术,控制系统。E-mail:gjkhit (上接第 74 页)9 程楚皓,林伟国.便携式水体重金属离子浓度快速检测仪设计J.电子测量技术,2019,42(2):112-116.10 廖平,鲁晓亮.基于 STM32 的重金属电化学传感器设计J.仪表技术与传感器,2019(9):17-22.11 郑宗南,周亚男,李爱学,等.便携式植物葡萄糖监测装置的开发 J.传感器与微系统,2021,40(8):79-81;84.12 BARD A J.电化学方法原理和应用M.北京:化学工业出版社,1986.13 张恒琦,汪旭东,孙彦,等.基于 Cat.1 的光伏发电监控系统J.仪表技术与传感器,2022(11):60-64.作者简介:李萌(1996),硕士研究生,主要研究方向为电化学腐蚀监测。E-mail:1103987544 通信作者:程嘉瑞(1988),博士,副教授,硕士生导师,主要研究井下环境智能监测、多相流计量。E-mail:352595699 001