news 2026/4/18 18:05:44

简单理解:以太网代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单理解:以太网代码

用的是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()

  • 配置网口硬件
  • 接通 LAN8720

2. 网络参数设置

  • 单片机 IP:192.168.1.10
  • 电脑必须设成:192.168.1.100

3. UDP 初始化

相当于打开网络通信的门

4. 接收数据

电脑发什么,单片机立刻返回什么(回声测试)。

5. 发送数据

单片机每隔 1 秒主动发:我是单片机,以太网连接成功!

四、这个代码能实现什么?

✅ 单片机插上网线✅ 电脑网络调试助手打开 UDP✅ 电脑收到单片机发来的消息✅ 电脑发消息 → 单片机立刻返回✅ 最简单的以太网通信完成

五、硬件怎么接?(超简单)

  • STM32 RMII 接口 → LAN8720
  • 网口模块 TXD0/TXD1/REF_CLK 等按默认接法
  • 3.3V 供电
  • 插上网线即可
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:22:11

OpenClaw Windows一键部署教程

OpenClaw 一键安装包|可视化部署教程,简化环境配置流程 适配信息 适配系统:Windows10/11 64 位 当前版本:v2.6.2核心优势 :全程可视化操作,无需命令行、无需手动配置 Python/Node.js,内置全部…

作者头像 李华
网站建设 2026/4/16 15:20:42

用Cisco Packet Tracer模拟真实校园网:从VLAN划分到OSPF路由的保姆级实验

用Cisco Packet Tracer构建高可用校园网:从规划设计到动态路由实战 当你第一次走进大学校园时,是否曾好奇过支撑数千人同时上网、保障教学系统稳定运行的网络架构?作为网络工程师的摇篮,校园网络往往集成了企业级网络的核心技术要…

作者头像 李华
网站建设 2026/4/16 15:19:51

Kubernetes Node 污点与调度权重

Kubernetes作为容器编排领域的核心平台,其调度机制直接影响集群资源利用率与稳定性。其中,Node污点(Taint)与调度权重(Weight)是精细化控制Pod部署的两大关键工具,它们既能隔离敏感节点&#xf…

作者头像 李华
网站建设 2026/4/18 17:52:33

通过IP地址查询判断网络风险,有哪些具体指标和判断方法?

在风控系统中,IP地址是最基础的判断特征之一。攻击者通过代理池、秒拨IP、云主机等方式绕过规则,如果只依赖简单的地理位置或黑名单,很容易被绕过。本文将结合实际工程经验,梳理IP风险判断的核心指标与可落地的判断方法&#xff0…

作者头像 李华
网站建设 2026/4/16 15:17:56

3步快速上手暗黑2存档编辑器:免费打造你的终极单机角色

3步快速上手暗黑2存档编辑器:免费打造你的终极单机角色 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备?是否想体验不同职业的完美build却苦于时间有限&#xff1f…

作者头像 李华