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

STM32H7开发LWIP时遇到的问题

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

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

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

举报

1个回答
攻城狮Melo 回答时间:2 小时前

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版