TCP Server 测试

📅 2026/8/9 6:36:43
TCP Server 测试
我完成了STM32F103C8T6 W5500的基础以太网通信验证包括SPI 读取 W5500 版本号 配置 W5500 静态 IP 电脑 ping 通 W5500 STM32 作为 TCP Server NetAssist 作为 TCP Client 完成 TCP 连接和数据回显最终结果是电脑通过192.168.1.50:5000成功连接 STM32NetAssist 发送字符串后STM32 能接收并回传。问题 1OLED 显示 SPI ERROR一开始 OLED 显示SPI ERROR说明 STM32 没有稳定读到 W5500 的版本寄存器0x04。排查思路先确认 W5500 的 SPI 接线确认PA5/PA6/PA7分别接SCK/MISO/MOSI确认PA4作为 CS确认 W5500 的RST接到PB0复用原来 W25Q64 工程里的硬件 SPI 函数MySPI_SwapByte()将 W5500 的 SPI 读写函数注册给 WIZnet 官方库调整 RST 复位时序复位释放后增加等待时间。解决后 OLED 能稳定显示VER:04 SPI OK这说明 STM32 和 W5500 的 SPI 通信已经正常。问题 2电脑显示“网络电缆被拔出”或 ping 超时刚开始 Windows 以太网显示网络电缆被拔出或者 ping请求超时这说明不是 TCP 程序问题而是网口物理链路还没有建立。排查思路确认电脑连接的是 USB 有线网卡而不是 Wi-Fi 或虚拟网卡检查网线是否真正连接到 W5500 的 RJ45 网口观察 W5500 网口灯是否亮排除 TAP 虚拟网卡、WLAN、热点网段干扰在程序中读取 W5500 PHY 链路状态在 OLED 上显示LINK ON / LINK OFF。一开始 OLED 显示LINK OFF说明 W5500 自己也判断网线链路没有建立。后来调整连接后显示LINK ON这说明物理网络链路已经正常。问题 3ping 不通 W5500物理链路正常后继续测试ping 192.168.1.50如果 ping 不通就继续检查电脑有线网卡 IP 是否设置为192.168.1.100W5500 是否设置为192.168.1.50子网掩码是否都是255.255.255.0是否调用了W5500_Network_Init()W5500 静态 IP、MAC、网关是否写入。最终配置为电脑 IP: 192.168.1.100 W5500 IP: 192.168.1.50 子网掩码: 255.255.255.0 端口: 5000之后电脑成功 ping 通 W5500说明 IP 层通信正常。问题 4NetAssist 连接不上 TCP Serverping 成功后用 NetAssist 连接TCP Client - 192.168.1.50:5000一开始提示服务器无法访问或连接超时。这时我判断ping 能通说明 IP 层没问题TCP 连接失败说明 STM32 端可能没有真正监听端口。于是我在 OLED 上显示 W5500 socket 状态SOCK CLOSED SOCK INIT LISTENING CONNECTED当 OLED 显示LISTENING说明 STM32 已经作为 TCP Server 在5000端口监听。后面继续排查 NetAssist 的本地绑定地址发现它可能自动选择了错误网卡例如 Wi-Fi 或热点网段172.20.x.x。解决方法是手动选择和 W5500 同网段的电脑本地 IP192.168.1.100之后 NetAssist 成功连接OLED 显示CONNECTED问题 5TCP 数据收发验证连接成功后NetAssist 发送Welcome to NetAssistSTM32 收到数据后通过 W5500 原样回发。NetAssist 显示SEND: Welcome to NetAssist RECV: Welcome to NetAssist说明TCP 连接建立成功 STM32 接收数据成功 STM32 发送数据成功 W5500 TCP Server 回显功能正常我今天主要完成了 STM32F103C8T6 通过 SPI 驱动 W5500 以太网模块的通信验证。首先通过读取 W5500 版本寄存器确认 SPI 通信正常解决了 SPI ERROR 和复位时序问题。然后配置 W5500 的静态 IP并通过读取 PHY 状态判断网口链路是否建立解决了 LINK OFF 和 ping 超时的问题。最后我用 W5500 的 socket API 实现了一个 TCP Server在电脑端用 NetAssist 作为 TCP Client 连接 STM32实现了字符串收发和回显。这个过程让我熟悉了从硬件链路、IP 层到 TCP 层的完整排查流程。我不是直接写应用层协议而是按网络分层逐步验证。第一步验证 SPI 层确认getVERSIONR()返回0x04第二步验证物理链路通过CW_GET_PHYLINK判断LINK ON第三步配置静态 IP 并用 ping 验证网络层第四步使用 W5500 socket API 建立 TCP Server通过 socket 状态从SOCK_CLOSED、SOCK_INIT到SOCK_LISTEN、SOCK_ESTABLISHED定位连接问题最后完成 NetAssist 与 STM32 的 TCP 数据回显。大致的框架STM32 应用程序 | SPI | W5500 | Ethernet | TCP/IP | 电脑调试助手这为后续继续做自定义设备状态协议 Modbus TCP PLC 数据交互 工业设备状态采集打下了基础。