Skip to main content
Visitor II
May 1, 2026
Question

stm32h723 lwip rtos,The client stops sending data after running for a period of time. It will only resume operation if an external device pings

  • May 1, 2026
  • 0 replies
  • 108 views

I created an independent task to run the TCP client and send.

[424] local 192.168.10.188 port 5001 connected with 192.168.3.100 port 57804
[ ID] Interval Transfer Bandwidth
[424] 0.0- 1.0 sec 5660 KBytes 46368 Kbits/sec
[424] 1.0- 2.0 sec 5500 KBytes 45055 Kbits/sec
[424] 2.0- 3.0 sec 5389 KBytes 44149 Kbits/sec
[424] 3.0- 4.0 sec 5191 KBytes 42526 Kbits/sec
[424] 4.0- 5.0 sec 5088 KBytes 41681 Kbits/sec
[424] 5.0- 6.0 sec 4936 KBytes 40436 Kbits/sec
[424] 6.0- 7.0 sec 4832 KBytes 39583 Kbits/sec
[424] 7.0- 8.0 sec 3816 KBytes 31258 Kbits/sec

The above is the data volume and status received by my iperf server. After that, my client task no longer sends any messages. I use my computer to ping the IP address of my STM32, and then the client will resume sending.

I observed that the gState of my heth variable is HAL_ETH_STATE_STARTED, and the ErrorCode is HAL_ETH_ERROR_BUSY. The DMAErrorCode and MACErrorCode do not have any flags.

I think it is the osSemaphoreAcquire(TxPktSemaphore, ETHIF_TX_TIMEOUT); function in the ethernetif.c file that needs to be checked. However, I don't know why this situation occurred.

I have uploaded two configuration files and one main file to the attachment. The rest of the configurations are based on the default settings provided by STM32CubeMX.

Addition: This issue occurred in another of my STM32H7 devices, which was developed using the socket interface of LWIP. At first, I thought it was caused by the configuration of LWIP's PBUF and the priorities of various tasks. So, I created a base project for testing and found that this problem also existed.

 

really appreciate