你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H7开发LWIP时遇到的问题

[复制链接]
攻城狮Melo 提问时间:2025-12-8 14:27 / 未解决

STM32H7开发LWIP时遇到的问题,这里网卡的显示灯可以正常闪速,自己在网卡接收函数入口打印也发现有接收到数据。这里ping的结果就是显示超时,这里使用抓包软件Wireshark发现ping目标板的时候有数据返回。

赞 收藏 评论1 发布时间:2025-12-8 14:27

举报

1个回答
攻城狮Melo 回答时间:2025-12-8 14:27:59

STM32H7 + LWIP 能收包却 ping 超时一站式排查表

症状:网口灯闪、MCU 能进接收中断、Wireshark 能看到 ICMP Echo-reply,但主机依旧“Request timeout”。


1. 校验和(Checksum)→ 90 % 踩坑点

表格复制

现象 Wireshark 展开 ICMP 协议树,Checksum = 0x0000 或非法值
根因 MAC 硬件自动清零 + lwIP 未同步使能 HW checksum offload
验证 抓包看 ICMP Checksum 字段
修复 1. 使能 MAC 发送硬件校验和<br/>2. 让 lwIP 把校验工作交给硬件

c复制

/* 1. 在 ETH 初始化处 */
heth.Init.TxConfig = ETH_TXCONFIG_CHECKSUMOFFLOAD;   // H7 寄存器位

/* 2. 在 lwipopts.h */
#define CHECKSUM_BY_HARDWARE  1
#define CHECKSUM_GEN_ICMP     1
#define CHECKSUM_CHECK_ICMP   1

老版本 icmp.c 需手动把 iecho->chksum = 0; 保留,防止软件提前填充。


2. ARP / IP 冲突

表格复制

现象 第一次 1-2 个包能通,之后全部超时
验证 arp -a 看目标 IP 对应的 MAC 是否等于板子 MAC
解决 arp -d <IP> 清缓存;给板子分配唯一 IP;必要时发 Gratuitous ARP

3. Cache 污染(D-Cache 与 DMA 不一致)

表格复制

现象 大包 1500 B 必现超时;开-O2 优化后必现
验证 把待发缓冲区打印出来与 Wireshark 对比,内容不一致即命中
解决 方法 A:MPU 把描述符 & pbuf 区设为 Device/Strongly-ordered<br/>方法 B:在发送/接收处手动 Clean / Invalidate

c复制

/* 发送前 */
SCB_CleanDCache_by_Addr((uint32_t *)p->payload, p->len);

/* 接收后 */
SCB_InvalidateDCache_by_Addr((uint32_t *)p->payload, p->len);

4. pbuf 泄漏(PBUF_POOL 耗尽)

表格复制

现象 连续 ping 前 N 次 100 % 通,N == PBUF_POOL_SIZE 后永远超时
验证 memp_get_stats() 观察 PBUF_POOL 可用数每 ping 减 1
解决 恢复 icmp.c / etharp.c 中所有pbuf_free(p) 调用

5. 一键自检清单(复制打钩)

  • [ ] Wireshark 回包 ICMP Checksum ≠ 0 且主机无 “Bad Checksum” 提示
  • [ ] arp -a 目标 IP ↔ MAC 正确,无 IP 冲突
  • [ ] 1500 B 大包连续 ping 稳定,不掉包
  • [ ] 连续 ping > PBUF_POOL_SIZE 次仍正常

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版