2026-05-01 10:55 AM
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/secThe 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