Skip to main content
Associate
March 23, 2026
Question

STM32H723 (lwIP) – Ping not working, ARP reply generated but not visible on PC

  • March 23, 2026
  • 4 replies
  • 531 views

Hello!

I have been using the STM32H723ZG Nucleo board and am now trying to ping the STM32 device from a PC through an Ethernet connection, but the ping is not working.

For ex:

ping 192.168.10.XX (STM32 Static IP)

No response is received.

My board setup and module details are given below.
Board / Setup

  • MCU: STM32H723ZG (Nucleo)
  • Interface: Ethernet (RMII)
  • PHY: (e.g., LAN8742 – please confirm)
  • Stack: lwIP (CubeMX generated)
  • RTOS: FreeRTOS
  • Connection: Ethernet cable through splitter (PC ↔ STM32)
  • PC IP: 192.168.10.XX (static)
  • STM32 IP: 192.168.10.XX (static)
  • STM cube IDE version: 1.18.1

Observed Behavior (STM32 side logs):

  1. STM32 successfully receives ARP requests from PC.

          Who has 192.168.10.50? Tell 192.168.10.100 (Captured by wireshark).

     2. lwIP processes the request and generates an ARP reply.

     3. ARP reply frame content (from debug log):

          192.168.10.XX is at 00:80:XX:XX:XX:XX

     4. Transmission status:

           HAL_ETH_Transmit_IT status = HAL_OK

     5. TX complete callback is triggered:

           HAL_ETH_TxCpltCallback()

Expected Behavior:

  • PC should receive ARP reply
  • PC should update ARP table
  • ICMP Echo Request / Reply should occur
  • Ping should succeed

Actual Behavior (PC side)

Using Wireshark:

  • ARP request from PC is visible
  • No ARP reply from STM32 is visible
  • PC does not learn STM32 MAC
  • Ping fails

Memory Configuration (lwIP / DMA)

  • Ethernet DMA descriptors placed in D2 SRAM:
  • lwIP heap configuration (lwipopts.h:(

          #define MEM_SIZE 16360

          #define LWIP_RAM_HEAP_POINTER 0x30040000

  • D2 SRAM size: 32 KB
  • Heap size adjusted to fit within D2 SRAM

Additional Observations

  • STM32 receives Ethernet frames correctly (ARP and IPv4 traffic visible)
  • lwIP stack appears functional
  • ARP reply frame format is correct
  • Transmission completes at software level

For your reference I have given the STM log that I get while I sent the ping command.
STM log:

RX: ARP request (broadcast)
Sender MAC: XX:XX:XX:XX:XX:XX
Sender IP : 192.168.10.XX
Target IP : 192.168.10.XX

TX: ARP reply
Sender MAC: XX:XX:XX:XX:XX:XX
Sender IP : 192.168.10.XX
Target MAC: XX:XX:XX:XX:XX:XX
Target IP : 192.168.10.XX

HAL_ETH_Transmit_IT status = 0

Questions

  1. Can TX complete callback be triggered even if the frame is not physically transmitted on the cable?
  2. Are there known STM32H7 RMII TX issues where RX works but TX does not?
  3. Any recommended way to verify TX signal activity without oscilloscope?
  4. Any CubeMX configuration that is critical for TX but easy to miss?

Any guidance would be appreciated.

Regards,

Siva

 

4 replies

Graduate
March 23, 2026

It could likely be that some ethernet pins are not configured correctly. Could you please show the Ethernet pin configuration from CubeMX or attach the ioc file?

Graduate
March 23, 2026

Or ensure D-Cache is disabled, since it could tamper with the Ethernet DMA descriptors

SivaElteAuthor
Associate
March 24, 2026

Currently, both D-cache and I-cache are disabled.

Pavel A.
Super User
March 24, 2026

@SivaElte  On which machine runs the wireshark? Better run it on 3rd machine, not on the PC itself. Use a switch with a mirror port configured for packet capture (copies all other ports). Otherwise the wireshark log cannot be trusted.

SivaElteAuthor
Associate
March 25, 2026

@Pavel A.  

Thank you for your suggestion regarding the Wireshark setup.

Currently, I have been capturing packets directly on the PC connected to the STM32 board. Based on your recommendation, I understand that this may not provide fully reliable results.

I will try to set up a proper test environment using a network switch with port mirroring enabled and perform packet capture from a third machine to obtain more accurate results.

######
Senior II
March 25, 2026

Just a note on Ping (ICMP) with LWIP, ICMP can be enabled / disabled within the options opt.h or through the Cube configuration menu. The default is enabled #define LWIP_ICMP 1 , but you might want to check it hasn't been overwritten accidentally.

 

SivaElteAuthor
Associate
March 26, 2026

Thank you for your suggestion regarding the ICMP configuration.

I have verified the LWIP configuration, and LWIP_ICMP is enabled. It has not been overwritten in my current setup

Technical Moderator
April 1, 2026

Hello @SivaElte, and welcome to ST Community!

To ensure your board works flawlessly, could you please try running this example and let me know if it successfully pings? If it does you could compare configurations.

Best regards,

To improve visibility of answered topics, please click 'Accept as Solution' on the reply that resolved your issue or answered your question.