diff --git a/bsp/stm32f107/drivers/stm32_eth.c b/bsp/stm32f107/drivers/stm32_eth.c index d9d1ef9e537365f82461c7c4e08d057d31cc8b40..13ddb8deb75e757cbf61b4e84f22b5353fa4ebc9 100644 --- a/bsp/stm32f107/drivers/stm32_eth.c +++ b/bsp/stm32f107/drivers/stm32_eth.c @@ -3206,7 +3206,12 @@ rt_err_t rt_stm32_eth_tx( rt_device_t dev, struct pbuf* p) { rt_err_t result; result = rt_sem_take(&tx_buf_free, 2); - if (result != RT_EOK) return -RT_ERROR; + if (result != RT_EOK) + { + ETH_FlushTransmitFIFO(); // clear fifo + ETH_ResumeDMATransmission(); // resume dma + return -RT_ERROR; + } } offset = 0;