全部例程

Network Install

W5500

2025/02/12 更新

W5500是一款高性价比的以太网芯片,其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用,安全稳定,是物联网设备的首选解决方案。WIZnet提供完善的配套资料以及实时周到的技术支持服务,极大地缩短产品开发周期,全方位保障客户项目按时落地。

本篇文章,我们来讲解下如何使用STM32F103驱动W5500进行网络初始化。在开始之前,我们先了解下网络地址信息。

网络地址信息简介

网络地址信息是计算机网络中用于标识和定位设备、主机、网络等资源的数字标识符,在网络通信中起着至关重要的作用,它能帮助数据包在不同的网络节点间传递并到达目标设备。网络地址通常由IP地址、子网掩码、网关地址及DNS地址等组成,在不同层级上起着不同的作用。

请注意:

本文及后续文章提到的IP地址皆为IPv4版本。

  • 地址:IP地址是计算机网络中用于唯一标识设备的地址。每台连接到网络上的设备都有一个IP地址,用于在网络上进行通信。通常以四个点分十进制数表示,每个数值的范围为0-255,例如:192.168.1.1。
  • 子网掩码:子网掩码用于将一个IP地址划分为网络部分和主机部分。子网掩码的1对应的IP地址部分为网络地址,0对应的IP地址为主机地址,例如一个设备的IP地址为192.168.1.100,子网掩码为255.255.255.0,使用IP地址和子网掩码做与运算(AND运算)得出192.168.1.0,则说明该设备属于192.168.1.0网段设备,如果他想与192.168.2.0网段的设备进行通讯,则需要将数据交给网关进行处理。
  • 网关地址:网关地址是当设备需要访问不同网络时,数据包首先经过的设备的IP地址。这个设备通常是网络边缘的路由器或防火墙,帮助本地设备与外部网络(如互联网)通信。
  • DNS地址:DNS地址是域名系统的IP地址,DNS是用于将易于记忆的域名转换为计算机能够理解的IP地址。例如,当您在浏览器中键入wiznet.io时,DNS服务器将把wiznet.io这个域名解析为相应的IP地址(可能是183.111.138.249或其他)。一般我们的DNS地址设置为公共DNS服务器地址(例如中国电信提供的114.114.114.114),也可以设置为私有DNS服务器地址(例如在您自己的网络中运行的服务器)。

除此之外,还有MAC地址,即硬件地址,也叫物理地址。

  • MAC地址:MAC地址是网络接口卡在数据链路层(OSI模型第二层)使用的唯一标识符。每个网络设备都应该被分配有一个唯一的MAC地址,用于在局域网中表示设备。它的长度为6字节,通常以16进制格式表示。前三个字节标识了设备制造商,例如WIZnet的设备的MAC地址前三个字节为00 08 DC,后三个字节表示该厂商的不同设备。需要注意的是,MAC地址的首字节必须为偶数,奇数则为组播地址。

请注意:

当IP地址冲突和MAC地址冲突时,都会导致网络无法通信。

实现过程

接下来,我们在STM32F103上实现W5500网络初始化的功能。

首先我们需要按照如下方式进行接线。


/*wizchip->STM32 Hardware Pin define*/
//	wizchip_SCS    --->     STM32_GPIOD7
//	wizchip_SCLK	 --->     STM32_GPIOB13
//  wizchip_MISO	 --->     STM32_GPIOB14
//	wizchip_MOSI	 --->     STM32_GPIOB15
//	wizchip_RESET	 --->     STM32_GPIOD8
//	wizchip_INT    --->     STM32_GPIOD9

步骤1:定义网络地址信息


/* network information */
wiz_NetInfo default_net_info = {
    .mac  = {0x00, 0x08, 0xdc, 0x12, 0x22, 0x12},
    .ip   = {192, 168, 1, 30},
    .gw   = {192, 168, 1, 1},
    .sn   = {255, 255, 255, 0},
    .dns  = {8, 8, 8, 8},
    .dhcp = NETINFO_STATIC
};

这里我们将地址设置为和电脑或者路由器同一网段即可,dhcp模式选择静态地址模式。

步骤2:初始化硬件


delay_init();
debug_usart_init();
wiz_timer_init();
wiz_spi_init();
wiz_rst_int_init();

步骤3:初始化W5500并检测PHY状态


void wizchip_initialize(void)
{
    /* reg wizchip spi */
    wizchip_spi_cb_reg();

    /* Reset the wizchip */
    wizchip_reset();

    /* Read version register */
    wizchip_version_check();

    /* Check PHY link status, causes PHY to start normally */
    wiz_phy_link_check();
}

在这一步,我们先把操作W5500的函数注册到ioLibrary库中,例如片选、取消片选、SPI读写1字节和SPI读写多字节。 然后进行了一次硬件复位,复位完成后读取版本号和PHY链路状态来校验W5500是否工作正常。

步骤4:设置网络地址信息

network_init()函数的作用则是将步骤1定义的网络地址信息设置到W5500中。 如果DHCP模式为NETINFO_DHCP,则执行DHCP进程去更新网络地址信息为DHCP获取的网络地址信息。如果是NETINFO_STATIC模式则直接设置静态网络地址信息,最后打印出设置的网络地址信息。 函数定义如下:


/**
* @brief   set network information
*
* First determine whether to use DHCP. If DHCP is used, first obtain the Internet Protocol Address through DHCP.
* When DHCP fails, use static IP to configure network information. If static IP is used, configure network information directly
*
* @param   sn: socketid
* @param   ethernet_buff:
* @param   net_info: network information struct
* @return  none
*/
void network_init(uint8_t *ethernet_buff, wiz_NetInfo *conf_info)
{
    int ret;
    wizchip_setnetinfo(conf_info); // Configuring Network Information
    if (conf_info->dhcp == NETINFO_DHCP)
    {
        ret = wiz_dhcp_process(0, ethernet_buff);
        if (ret == 0)
        {
            conf_info->dhcp = NETINFO_STATIC;
            wizchip_setnetinfo(conf_info);
        }
    }
    print_network_information();
}

步骤5:回读IP地址并打印PING提示信息


wizchip_getnetinfo(&net_info);

printf("please try ping %d.%d.%d.%d\r\n", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);

运行结果

请注意:

测试实例需要PC端和W5500处于同一网段。

烧录例程运行后,首先可以看到进行了PHY链路检测,然后打印了设置的网络地址信息以及PING提示信息。

使用PC端PING W5500的IP地址(192.168.1.30),可以PING通。

如果无法PING通,可以按照以下步骤进行排查。

  1. 检查设置的地址是否能与PC端地址进行通信,一般建议设置为同一网段的地址
  2. 确认PC端与W5500网线连接正确,如果连接在交换机或路由器上,可以改成PC直连W5500的方式。
  3. 回读IP,子网掩码,默认网关,这几个寄存器的值是否与设置一致。
  4. 关闭PC端防火墙。

总结

本文阐述网络地址信息组成与作用,同时通过实战展示STM32F103驱动W5500进行网络初始化过程,含定义地址信息、初始化硬件和W5500、设置地址及回读 IP 等步骤。烧录例程可完成相关检测与信息打印,PC 能 PING 通设备,若失败有排查方法。 下一篇文章将详细讲解DHCP协议,解析 DHCP 协议的核心原理及在获取 IP 信息中的应用,同时通过实战例程讲解在W5500 芯片上实现DHCP获取网络信息的具体实现步骤与要点,敬请期待!

下载本章例程

我们提供完整的工程文件以及配套开发板,方便你随时测试,快速完成产品开发:

开发环境: Keil MDK5 配套开发板