Наткнулся на интересный баг в STM32F767. Эзернет работает, но иногда в Wireshark проскакивают пакеты TCP DUP ACK и Retransmission. Ложится передача на 0.3с, что для моего устройства с модбас критично.
Проблема устраняется редактированием файла stm32f7xx_hal_eth.c
В функции HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength)
перед
Код
/* When Tx Buffer unavailable flag is set: clear it and resume transmission */
if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
{
/* Clear TBUS ETHERNET DMA flag */
(heth->Instance)->DMASR = ETH_DMASR_TBUS;
/* Resume DMA transmission*/
(heth->Instance)->DMATPDR = 0;
}
вставляем инструкцию __DSB();
Подозрение, что не успевают обновляться данные в DMASR и получаем ложную ошибку