主页 > 游戏开发  > 

STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试

STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试
0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册 4.Wireshark 1 以太网数据接收测试 1.1 以太网数据接收测试(轮询)

我们在主循环内轮询RX DMA描述符标志位查看是否接收到了数据,如果接收到了则将数据大小及内容打印出来,相关语句如下:

if (ETH_CheckFrameReceived()) { frame = low_level_input(); printf("Len : %d\r\n", frame.length); for (i = 0; i < frame.length; i++) { printf("%02X ", ((u8 *)frame.buffer)[i]); } printf("\r\n"); }

给开发板上电后,将开发板接入到和PC相连的局域网内,然后随便ping一个局域网的ip,例如192.168.101.123: 开发板接收到的数据如下: 长度为60,数据内容如上。 使用Wireshark抓取到的报文如下: 可以看到开发板接收到的报文和PC发出的报文内容一致,测试成功。

1.2 以太网数据接收测试(中断)

我们在ETH接收中断内检查RX DMA描述符标志位查看是否接收到了数据,如果接收到了则将数据大小及内容打印出来,相关语句如下:

void ETH_IRQHandler(void) { int i; FrameTypeDef frame; while(ETH_CheckFrameReceived() != 0) // 检测是否收到数据包 { frame = low_level_input(); printf("Len : %d\r\n", frame.length); for (i = 0; i < frame.length; i++) { printf("%02X ", ((u8 *)frame.buffer)[i]); } printf("\r\n"); } ETH_DMAClearITPendingBit(ETH_DMA_IT_R); ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS); }

给开发板上电后,将开发板接入到和PC相连的局域网内,然后随便ping一个局域网的ip,例如192.168.101.123:

开发板接收到的数据如下:

长度为60,数据内容如上。 使用Wireshark抓取到的报文如下:

可以看到开发板接收到的报文和PC发出的报文内容一致,测试成功。

2 以太网数据发送测试

我们构造一个ARP报文,然后发送到局域网内,查看PC是否内接收到该报文。相关语句如下:

uint8_t arpBuff[60] = { 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x14, 0x99,0x30,0x08,0x06,0x00,0x01,0x08,0x00,0x06,0x04, 0x00,0x01,0x00,0x00,0x00,0x14,0x99,0x30,0xc0,0xa8, 0x65,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xa8, 0x65,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; int sendarp(int argc, char *argv[]) { low_level_output(arpBuff, 60); return 0; }

Wireshark捕获到的报文如下: 和我们发送的ARP报文内容一致,测试成功。

标签:

STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试