1. 课程导入与工程全景
在工业现场,设备之间“能不能通”往往比“算得快不快”更先决定项目成败。STM32 以太网外设(ETH)把 MAC 层集成进 MCU,配合外部 PHY 与网络变压器,就能让一颗通用微控制器直接接入 10/100 Mbit/s 以太网。它既不像专用交换芯片那样复杂,也不像串口那样只能点对点短距离传输,因此在 PLC 远程 I/O、边缘网关、伺服驱动器、智能仪表、能源监控终端中被大量采用。本课程的目标,是让你从“点亮一颗 LED”式的裸机思维,走到能独立完成“STM32 + PHY + 协议栈 + 工业协议”的完整通信链路设计与调试。
一、STM32 以太网在工业通信中的定位
工业通信通常分为现场层、控制层与管理层。现场层强调实时性与确定性,常见 Modbus RTU、CANopen、EtherCAT;控制层与管理层则大量使用以太网,承载 Modbus TCP、EtherNet/IP、PROFINET、OPC UA 等协议。STM32 的 ETH 外设工作在数据链路层,负责帧的收发、CRC 校验、DMA 搬运与地址过滤;它不直接理解 IP 或 TCP,需要软件协议栈(如 LwIP)在其上构建网络层与传输层。理解这条分层边界,是后续所有调试的起点:PHY 不通,协议栈再正确也无济于事;MAC 配置错误,抓包工具只能看到畸形帧。
从工程选型看,STM32F4/F7/H7 系列多带内置 10/100 MAC,通过 RMII 或 MII 接口连接外部 PHY(如 LAN8720A、DP83848、YT8512)。RMII 只需 2 根数据线、1 根参考时钟和 1 根 CRS_DV,引脚占用少,是当前主流选择;MII 则提供独立收发时钟与更完整的信号,适合对时序余量要求更高的场合。工业环境还要求考虑隔离:网络变压器或电容隔离、TVS 防护、共模电感,这些不是“可选项”,而是决定设备能否在变频器、继电器旁稳定运行的关键。
二、典型工业拓扑与数据流向
最常见的入门拓扑是“STM32 节点—工业交换机—上位机”。STM32 通过 RJ45 接入交换机,上位机运行 Modbus Poll 或自研 SCADA,周期性读取保持寄存器。数据流方向为:上位机发出 Modbus TCP 请求 → 交换机转发 → PHY 接收差分信号并还原为 RMII 帧 → ETH MAC 校验后 DMA 写入内存 → LwIP 解析 IP/TCP → 应用层解析功能码并读取寄存器 → 原路返回响应。若把这条链路画成信号链,任何一环的指示灯、计数器或抓包记录都能成为定位依据。
更复杂的现场会引入网关:STM32 作为 Modbus TCP 从站,同时通过 UART/CAN 连接下位仪表,实现协议转换。此时 STM32 既是网络节点又是数据汇聚点,对内存与实时性要求更高,通常需要把 LwIP 配置为 NO_SYS=0 并使用 RTOS 任务划分收发与业务处理。拓扑选择没有绝对优劣,关键是明确“谁发起、谁响应、周期多长、允许丢包多少”。
三、学习路线:从链路到协议再到工程化
建议按四段推进。第一段打基础:理解 MAC/PHY/RMII 分层、时钟树与引脚复用,能独立完成 CubeMX 配置并让 Link 灯点亮。第二段通协议:移植 LwIP,跑通 ping、ARP、UDP 回环,再用 TCP 建立稳定连接。第三段上工业协议:实现 Modbus TCP 从站,掌握功能码 03/06/16 的报文结构与异常响应。第四段做工程化:加入看门狗、断线重连、寄存器映射表、抓包分析与长时间稳定性测试。每一段都要有可观测的验收点,而不是“感觉通了”。
四、开发环境搭建与最小验证
工具链建议:STM32CubeMX 生成初始化代码,STM32CubeIDE 或 Keil MDK 编译调试,STM32CubeProgrammer 烧录,Wireshark 抓包,Modbus Poll 做上位机测试。硬件上准备一块带 RMII PHY 的开发板、一根标准网线、一个交换机或直连电脑。CubeMX 中关键配置包括:ETH 选择 RMII,PHY 地址按原理图填写(LAN8720A 常为 0 或 1),REF_CLK 来源确认,LwIP 使能 DHCP 或静态 IP。下面是一段静态 IP 配置示例,仅作教学参考,实际地址需按现场网段调整:
/* 静态 IP 配置示例(教学用,非实测结果) */
IP4_ADDR(&ipaddr, 192, 168, 10, 50);
IP4_ADDR(&netmask, 255, 255, 255, 0);
IP4_ADDR(&gw, 192, 168, 10, 1);
netif_set_addr(&gnetif, &ipaddr, &netmask, &gw);
netif_set_up(&gnetif);
烧录后按顺序验证:先看 PHY Link/Act 灯是否常亮或闪烁;再在电脑端执行 ping 192.168.10.50,若超时则检查网段、防火墙与 ARP;ping 通后打开 Wireshark 过滤 ip.addr==192.168.10.50,确认请求与应答成对出现;最后用 Modbus Poll 读取保持寄存器,观察功能码与数据是否匹配。若 ping 不通但 Link 灯正常,优先怀疑 IP 冲突或协议栈未启动;若 Link 灯不亮,回到 PHY 供电、复位与 50 MHz 时钟检查。这套“灯—ping—抓包—协议”的排查顺序,会在后续每一章反复用到。