STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试
2023-12-23 06:25:54
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报文内容一致,测试成功。
文章来源:https://blog.csdn.net/kevin1499/article/details/135159955
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!