【STM32&LWIP】记录一次诡异的ping不通的解决方法

博客讲述了在移植旧项目中lwip到新平台时遇到的一个诡异网络bug。尽管设置的MAC地址正常,但设备无法通过交换机或直连PC进行ping通。问题在于移植过程中,芯片MAC地址在STM32的MAC控制器中未正确录入,而 lwip 中却使用了正常地址。只有当两者都设为全F时,网络才能正常工作。这个经验教训提醒我们在移植和调试过程中要仔细检查底层硬件配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同事移植旧项目的lwip到新的项目上
并做了一些调整,加了些新功能
但是网络一直都有个奇怪的bug
板卡正常设置了mac地址,无论是走交换机还是直接连PC都ping不通,但是只要把mac地址设置成全F就可以ping的通了

好家伙,把他的工程里三层外三层查了个遍
IP地址,子网掩码,网关,端口号,电脑,交换机的设置。。

LWIP的设置与配置,初始化等等查了个底朝天都没有找出来,到底为啥ping不通。。。

结果,最后发现
他居然移植的时候初始化芯片mac的时候遗漏

没有把正确的mac地址录入到stm32的mac控制器里,但是lwip的mac地址却录入了正常的地址,导致mac控制器那里的mac地址应该是全F,所以当协议栈的mac地址和lwip的mac地址都设置为全F的时候,就能够对应上正常工作了

真是够折腾了
所以把这个记录下来,方便后人能够吸取教训

### 解决STM32CubeMX配置LwIP时无法Ping通的问题 当遇到STM32CubeMX配置LwIP协议栈后设备无法通过PING命令进行网络通信的情况,可以从以下几个方面着手解决问题。 #### 1. 检查硬件连接 确保物理层的连接无误是首要任务。确认网线质量良好且正确插入路由器开发板之间;对于无线模块,则需验证天线安装稳固以及周围环境是否存在干扰源[^3]。 #### 2. 核实软件设置 利用STM32CubeMX工具重新审视项目中的参数设定是否恰当。特别关注如下选项: - **MAC地址**: 应保证唯一性; - **IP地址分配方式**(静态/DHCP): 若采用DHCP模式,请检查服务器工作状态及其可提供给客户端的有效地址池范围; - **MTU大小**: 默认值通常为1500字节,在某些特殊应用场景下可能需要调整至更小数值以适应特定需求; - **TCP/IP堆栈版本选择**(IPv4/v6双栈支持否)[^1] ```c // Example of setting IP address statically in lwipopts.h file. #define LWIP_DHCP 0 #define USE_STATIC_IP 1 #if USE_STATIC_IP #define IP_ADDR0 192 #define IP_ADDR1 168 #define IP_ADDR2 1 #define IP_ADDR3 100 #define NETMASK_ADDR0 255 #define NETMASK_ADDR1 255 #define NETMASK_ADDR2 255 #define NETMASK_ADDR3 0 #define GW_ADDR0 192 #define GW_ADDR1 168 #define GW_ADDR2 1 #define GW_ADDR3 1 #endif ``` #### 3. 测试连通性和稳定性 一旦上述准备工作就绪,便可以通过执行多次`ping`操作来检验链路状况。如果初次尝试失败也不要轻易放弃,因为有时短暂延迟也可能造成响应超时现象发生。另外值得注意的是,部分防火墙策略可能会阻止ICMP请求报文到达目标主机,因此建议暂时关闭此类安全防护措施再做进一步观察[^2]。 #### 4. 审阅日志记录 启用调试接口输出运行期间产生的各类事件信息,有助于捕捉潜在异常点所在位置。比如查看是否有ARP解析错误提示或者发送的数据包被丢弃等问题存在。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值