稳如磐石: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.coloradmin.cn/o/2440855.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!