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

0 工具准备

c 复制代码
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描述符标志位查看是否接收到了数据,如果接收到了则将数据大小及内容打印出来,相关语句如下:

c 复制代码
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是否内接收到该报文。相关语句如下:

c 复制代码
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报文内容一致,测试成功。

相关推荐
简知圈4 小时前
【04-自己画P封装,并添加已有3D封装】
笔记·stm32·单片机·学习·pcb工艺
linhhanpy8 小时前
自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)
c语言·汇编·c++·python·stm32·操作系统
stm32发烧友12 小时前
基于 STM32 的智能电梯控制系统
stm32·单片机·嵌入式硬件
2401_8437852320 小时前
STM32 TIM定时器配置
stm32·单片机·嵌入式硬件
简知圈1 天前
06-AD向导自动创建P封装(以STM32-LQFP48格式为例)
stm32·单片机·嵌入式硬件·pcb工艺
周盛欢1 天前
STM32外设应用
stm32
2401_843785231 天前
STM32 TIM编码器接口测速
stm32·单片机·嵌入式硬件
charlie1145141912 天前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础组件实现)
c语言·驱动开发·stm32·单片机·oled·面对对象
shichen5012 天前
MacOS 如何映射快捷键
macos·mac·策略模式
end_SJ2 天前
初学stm32 --- FreeRTOS移植
stm32·单片机·嵌入式硬件