简单理解:以太网代码
用的是STM32 LAN8720最常用以太网 PHY 芯片实现单片机插上网线就能和电脑通信UDP 通信最简单不用复杂配置。我保证代码极简每一行都加注释只保留核心功能你复制就能用一、先大白话讲以太网是什么就是网口通信和电脑插网线一样单片机通过网口和电脑高速发数据。比 RS232/485 快得多距离更远。二、完整嵌入式以太网代码STM32 LAN8720全部代码带逐行注释小白直接用// 1. 包含STM32底层驱动 #include stm32f4xx.h // 根据你的芯片改F4/F1都能用 // 2. 包含以太网驱动LAN8720 #include lan8720.h // 3. 包含网络协议栈LWIP嵌入式标准网络库 #include lwip.h #include udp.h // -------------------------- 【1】以太网参数配置 -------------------------- // 单片机IP地址电脑要和它同网段比如电脑设 192.168.1.100 #define DEVICE_IP 192.168.1.10 // 子网掩码 #define DEVICE_MASK 255.255.255.0 // 网关 #define DEVICE_GW 192.168.1.1 // 电脑通信端口号随便设两边一样就行 #define UDP_PORT 8080 // -------------------------- 【2】UDP控制块用来收发数据 -------------------------- struct udp_pcb *udp_ctl_block; // -------------------------- 【3】UDP接收数据回调函数 -------------------------- // 功能电脑发数据给单片机会自动进这个函数 void udp_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port) { // 如果收到数据 if(p ! NULL) { // 把收到的数据发回电脑【回声功能】最简单测试 udp_sendto(upcb, p, addr, port); // 释放数据缓存必须加否则内存溢出 pbuf_free(p); } } // -------------------------- 【4】UDP初始化 -------------------------- void UDP_Init(void) { // 1. 创建一个UDP控制块 udp_ctl_block udp_new(); // 2. 绑定本地端口8080 udp_bind(udp_ctl_block, IP_ADDR_ANY, UDP_PORT); // 3. 注册接收回调收到数据自动调用 udp_recv(udp_ctl_block, udp_receive_callback, NULL); } // -------------------------- 【5】主函数 -------------------------- int main(void) { // 1. 系统时钟初始化 SystemInit(); // 2. 延时初始化 Delay_Init(); // 3. 以太网硬件初始化LAN8720 ETH_BSP_Init(); // 4. LWIP协议栈初始化 LWIP_Init(DEVICE_IP, DEVICE_MASK, DEVICE_GW); // 5. UDP初始化开启网络通信 UDP_Init(); // 6. 死循环嵌入式程序永远在这里跑 while(1) { // LWIP内核调度必须加处理网络数据 LWIP_Periodic_Handle(); // 每隔1秒发一条消息 Delay_ms(1000); UDP_Send_Message(我是单片机以太网连接成功\r\n); } } // -------------------------- 【6】UDP发送字符串 -------------------------- void UDP_Send_Message(char *str) { // 分配网络数据缓存 struct pbuf *p pbuf_alloc(PBUF_TRANSPORT, strlen(str), PBUF_POOL); if(p ! NULL) { // 复制数据到缓存 memcpy(p-payload, str, strlen(str)); // 发送数据到电脑广播模式电脑都能收到 udp_sendto(udp_ctl_block, p, IP_ADDR_BROADCAST, UDP_PORT); // 释放缓存 pbuf_free(p); } }三、我把代码拆成 5 个小白能懂的部分1. 引脚 / 网口初始化ETH_BSP_Init()配置网口硬件接通 LAN87202. 网络参数设置单片机 IP192.168.1.10电脑必须设成192.168.1.1003. UDP 初始化相当于打开网络通信的门。4. 接收数据电脑发什么单片机立刻返回什么回声测试。5. 发送数据单片机每隔 1 秒主动发我是单片机以太网连接成功四、这个代码能实现什么✅ 单片机插上网线✅ 电脑网络调试助手打开 UDP✅ 电脑收到单片机发来的消息✅ 电脑发消息 → 单片机立刻返回✅ 最简单的以太网通信完成五、硬件怎么接超简单STM32 RMII 接口 → LAN8720网口模块 TXD0/TXD1/REF_CLK 等按默认接法3.3V 供电插上网线即可