大家好,最近一直在搞以太网通信,移植了Lwip,物理连接成功了,读写PHY寄存器也是对的,但就是接受不到数据,也发不出数据。愁了我几天,没有啥进展,想来咨询下大家,硬件如下连接如下(PHY是KSZ8041NLI,MII连接): KSZ8041NLI (物理连接:ETH_MDIO:PA2 ETH_MDC : PC1 ETH_MII_RXD2 : PB0 ETH_MII_RXD3: PB1 ETH_MII_TX_CLK: PC3 ETH_MII_TXD2: PC2 ETH_MII_TXD3 : PB8 ETH_MII_RX_CLK: PA1 ETH_MII_RX_DV : PA7 ETH_MII_RXD0 : PC4 ETH_MII_RXD1 : PC5 ETH_MII_TX_EN :PB11 ETH_MII_TXD0 :PB12 ETH_MII_TXD1 : PB13 ) PHY的地址映射如下(其中0x00和0x01控制和状态寄存器的定义和STM32Cube_FW_F7_V1.4.0例程中的PHY地址相同,其他的中断地址不一样,我在软件中删除掉了中断的配置部分。): 主要软件代码如下: 以太网配置: void HAL_ETH_MspInit(ETH_HandleTypeDef *heth) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clocks */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOI_CLK_ENABLE(); /* Ethernet pins configuration ************************************************/ /* ETH_MDIO -------------------------> PA2 ETH_MDC --------------------------> PC1 ETH_MII_RXD2 ---------------------> PB0 ETH_MII_RXD3 ---------------------> PB1 ETH_MII_TX_CLK -------------------> PC3 ETH_MII_TXD2 ---------------------> PC2 ETH_MII_TXD3 ---------------------> PB8 ETH_MII_RX_CLK -------------------> PA1 ETH_MII_RX_DV --------------------> PA7 ETH_MII_RXD0 ---------------------> PC4 ETH_MII_RXD1 ---------------------> PC5 ETH_MII_TX_EN --------------------> PB11 ETH_MII_TXD0 ---------------------> PB12 ETH_MII_TXD1 ---------------------> PB13 */ /* Configure PA1, PA2 and PA7 */ GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; GPIO_InitStructure.Pull = GPIO_NOPULL; GPIO_InitStructure.Alternate = GPIO_AF11_ETH; GPIO_InitStructure.Pin = (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7); HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); /* Note : ETH_MDIO is connected to PA2 which is shared with other signals like SAI2_SCKB. By default on STM32756G-EVAL board, PA2 is connected to SAI2_SCKB, so to connect PA2 to ETH_MDIO : - unsolder bridge SB24 (SAI2_CKB) - solder bridge SB5 (ETH_MDIO) */ /* Configure PB0, PB1, PB8, PB11, PB12, PB13 */ GPIO_InitStructure.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13);//GPIO_PIN_5; HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); /* Enable ETHERNET clock */ __HAL_RCC_ETH_CLK_ENABLE(); } main函数配置如下: void main() { MPU_Config(); Cache_Enable(); HAL_Init(); SystemClock_Config(); delay_init(200); lwip_init(); Netif_Config(); udp_echoclient_connect(); User_notification(&gnetif); while(1) { ethernetif_input(&gnetif); sys_check_timeouts(); } } 但是接收不到电脑发送给本板子的数据。发现收到了电脑给本板子的ARP数据时,板子调用了HAL_ETH_TransmitFrame()回送数据,但会进入下面代码中/* 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; } |
最下面那段,是我在电脑上用TCP&UDP助手给STM32F756发送UDP数据的时候,板子回复ARP数据报文时候的状态。大家有没有遇到过这种问题,求指点????????? |
确定是MAC发送问题。在low_level_output()中打印出了lwip组的报文,报文没有错误,但是调用HAL_ETH_TransmitFrame()之后,就发送不出去了,示波器测量外围TX【0-4】只能收到类似于MAC帧报头,还不确定是什么导致以太网发送不出数据的,希望遇到类似情况的朋友,能指点一二 |
你好,我也遇到这个问题,arp包发送的时候,TBUS这一位总是1,数据发不出去,楼主是否已解决?如解决,麻烦告知问题原因,谢谢! |
你好,麻烦问下,发送一帧MAC数据,在buff中的格式是怎样的?需要拷贝到buff中的数据包括哪些 |
ST的hal库有问题手头有STM32L4或STM32F7的帮忙测试DMA SD卡
STM32F756 DCMI +GC0308 Camera图片不正常
STM32F722RET6无法被JLINK/STLIN和IAR/KEIL识别
STM32F767以太网换PIN脚无数据
STM32F7 DSP库使用
没有人分享一下STM32F767 硬JPEG 编码解码吗
求STM32F777与FPGA通过FMC通信的参考设计
求STM32F7 1.15版本 固件库
STM32F746使用HAL库串口无法中断收数据
STM32F7xx AXIM & ITCM