当前位置: 首页 > news >正文

稳如磐石:STM32F4 与 DP83848 打造的以太网驱动工程

stm32f4 +dp83848 以太网驱动程序稳定版工程 用的armfly例程里的tcpnet 改进加了网线断线重连 端口断开重连打包发送 可跑慢百兆速度 连续实测24小时以上无错误 dp83848 phy芯片是汽车级 工业场合要比dm9161 lan8720…更稳定可靠

最近在搞一个基于 STM32F4 和 DP83848 的以太网驱动项目,折腾了好一阵子,现在终于得到了一个稳定版工程,和大家分享分享。

选型原因

先说说为啥选 DP83848 这个 PHY 芯片。在工业场合或者汽车领域,稳定性那是重中之重。对比 DM9161、LAN8720 这些常见的芯片,DP83848 作为汽车级的 PHY 芯片,可靠性明显更胜一筹。在实际应用中,它能让整个以太网通信更加稳定,减少莫名其妙的通信故障。

工程基础与改进

我这个工程是基于 armfly 例程里的 tcpnet 进行改进的。原例程其实已经挺不错,但在实际使用场景中,网线断开或者端口异常断开的情况还是时有发生。所以我就针对性地加了两个很实用的功能:网线断线重连和端口断开重连打包发送。

网线断线重连代码片段及分析

// 检测网线连接状态函数 uint8_t CheckEthLinkStatus(void) { // 通过读取 DP83848 的寄存器来判断连接状态 uint16_t regValue = PHY_Read(DP83848_REG_BSR); if (regValue & (1 << 1)) { return 1; // 网线已连接 } return 0; // 网线断开 } // 网线重连逻辑 void ReconnectEth(void) { while (!CheckEthLinkStatus()) { // 这里可以加一些提示信息,比如通过串口打印 “网线未连接,尝试重连...” HAL_Delay(2000); } // 网线连接上后,可能需要重新初始化一些网络相关配置 // 比如重新设置 MAC 地址、IP 地址等 ETH_Init(); }

CheckEthLinkStatus函数里,通过读取 DP83848 的特定寄存器(DP83848REGBSR)来判断网线连接状态。如果寄存器的第 1 位为 1,那就说明网线已连接。而ReconnectEth函数则是不断检测网线状态,没连接上就每隔 2 秒检测一次,直到连接上后重新初始化以太网相关配置。

端口断开重连打包发送代码片段及分析

// 模拟端口断开检测(这里假设通过某个标志位判断) extern volatile uint8_t PortDisconnectFlag; // 打包发送数据结构体 typedef struct { uint8_t data[1024]; uint16_t length; } Packet; Packet buffer; // 端口断开重连及打包发送逻辑 void ReconnectAndSend(void) { if (PortDisconnectFlag) { // 尝试重连端口 while (!ReconnectPort()) { HAL_Delay(1000); } // 端口重连成功,发送打包数据 SendPacket(buffer.data, buffer.length); PortDisconnectFlag = 0; } } // 假设的端口重连函数 uint8_t ReconnectPort(void) { // 这里写实际的端口重连代码,比如重新初始化套接字等 // 假设重连成功返回 1,失败返回 0 return 1; } // 假设的发送数据包函数 void SendPacket(uint8_t *data, uint16_t length) { // 实际的发送代码,比如通过以太网发送数据 }

这里通过一个PortDisconnectFlag标志位来模拟端口断开检测。一旦检测到端口断开,就调用ReconnectPort函数尝试重连,重连成功后发送之前打包好的数据。打包数据用了一个自定义的结构体Packet,里面包含数据和数据长度。

性能测试

这个工程经过连续实测 24 小时以上,没有出现任何错误,而且速度能稳定跑到慢百兆。对于很多工业应用场景来说,这样的稳定性和速度已经完全能够满足需求了。无论是数据采集、设备监控还是远程控制等场景,都能妥妥应对。

stm32f4 +dp83848 以太网驱动程序稳定版工程 用的armfly例程里的tcpnet 改进加了网线断线重连 端口断开重连打包发送 可跑慢百兆速度 连续实测24小时以上无错误 dp83848 phy芯片是汽车级 工业场合要比dm9161 lan8720…更稳定可靠

总之,这个基于 STM32F4 和 DP83848 的以太网驱动工程,经过改进后在稳定性和实用性上都有了很大提升,希望能给有类似需求的小伙伴一些参考和帮助。

http://www.jsqmd.com/news/523231/

相关文章:

  • 2025-2026年中国精益生产咨询公司推荐:工厂现场改善口碑机构与长期合作价值分析 - 品牌推荐
  • 2025-2026年麻将机品牌前十名推荐:高端会所智能多功能热门款式与真实评价对比 - 品牌推荐
  • 什么是渗透测试工程师?(非常详细),零基础入门渗透测试,看这一篇就够了
  • 2026年京津冀地区推荐工程瓷砖批发厂家,这些品牌口碑超棒 - 工业推荐榜
  • 十二分装饰在重庆的口碑好吗,擅长设计且有本地实景案例吗 - 工业推荐榜
  • MySQL连接SSL协议版本不匹配:javax.net.ssl.SSLException解决方案大全
  • 2025-2026年充电桩厂家推荐:社区与目的地充电场景口碑品牌及服务能力盘点 - 品牌推荐
  • Openclaw接入微信(一条命令安装微信插件连接龙虾)
  • 探讨数码纸箱打印机费用,深圳安德生靠谱不,好用吗? - myqiye
  • 探索LTC2255:高性能14位A/D转换器的奇妙世界
  • HY-MT1.5翻译模型优化技巧:提升翻译速度,降低显存占用
  • 运维系列虚拟化系列OpenStack系列【仅供参考】:连接第二个 insance 到 first_local_net - 每5玩 OpenS-83创建第二个 local network - 每
  • 2026年深圳推荐纸箱数码印刷机厂家排名,哪家性价比高 - myqiye
  • Ansys Fluent 换热效率计算,核心供应商推荐 - 品牌2026
  • 从机械臂到无人机:三次多项式轨迹规划在ROS和PX4中的实战配置指南
  • DuckLake vs Apache Iceberg:轻量级数据湖方案对比与选型指南
  • 2026年全国知名的财务审计专业公司排名,这些口碑好的企业值得关注 - 工业设备
  • 探索基于局部网络等值模型的配电网静态电压稳定指标计算程序
  • 应对优先级反转:时序数据库TDengine事务调度中的锁机制与并发控制
  • 单片机/C/C++八股:(二十二)数组名,以及和指针的区别(一/二维数组)
  • 传输矩阵法仿真:解决偏振态反射谱、镜片镀膜设计与光纤传输矩阵的广泛应用
  • 2023最新图像隐写实战:5个GitHub热门项目代码实测与性能对比
  • 2026年林欣电子有限公司氖灯:中小制造企业的稳定光源解决方案 - 博客湾
  • Mujoco 物体pickup总失败?摩擦力有哪些(切向、扭转、滚动)
  • MiniCPM-o-4.5-nvidia-FlagOS实战:为Claude等AI助手构建本地知识库增强系统
  • 关于类和对象的基本区别
  • sql盲注 sqli-lab8
  • 整理2026年广州无版纸箱印刷机排名,无版纸箱印刷机精品定制推荐 - 工业设备
  • cv_resnet50_face-reconstruction多场景落地:支持千万级证件库的批量人脸标准化重建调度系统设计
  • K8S 高级调度-叩丁狼