第065例:以太网-W5500
时间:10-02
整理:3721RD
点击:
【HAL库每天一例】系列例程从今天开始持续更新。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:http://pan.baidu.com/s/1i574oPv
密码:r3s3
(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-064. 以太网-W5500)
/**
******************************************************************************
* 硬石YS-F1Pro开发板例程功能说明
*
* 例程名称: 1. Network install
*
******************************************************************************
* 说明:
* 本例程配套硬石stm32开发板YS-F1Pro使用。
*
* 淘宝:
* 论坛:http://www.ing10bbs.com
* 版权归硬石嵌入式开发团队所有,请勿商用。
******************************************************************************
*/
【1】例程简介
W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接
方案.使用硬件逻辑门电路实现 TCP/IP 协议栈的传输层及网络层(如: TCP, UDP, ICMP, IPv4,
ARP, IGMP, PPPoE 等协议),并集成了数据链路层,物理层,以及 32K 字节片上 RAM 作为数据
收发缓存。使得上位机主控芯片,只需承担TCP/IP 应用层控制信息的处理任务。从而大大节省了上
位机对于数据复制、协议处理和中断处理等方面的工作量,提升了系统利用率及可靠性。
YS-F1Pro开发板上集成了W5500芯片,可以实现网络通信。
本例程实现W5500网络环境搭建,最后通过ping通验证网络通路。
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号 IO端口 目标功能引脚 出厂默认设置
JP1 PA10 TXD(CH340G) 已接入
JP2 PA9 RXD(CH340G) 已接入
JP8 PF9 INTn(W5500) 已接入
JP9 PF11 SCSn(W5500) 已接入
【3】操作及现象
使用网线接入YS-F1Pro开发板右上方网口,连接至路由器;使用开发板配套的MINI USB线连接到开发
板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置
参数为115200 8-N-1。根据自己网络环境设置w5500_conf.c文件中相关参数,编译程序并下载,等下
载完程序之后,在串口调试助手窗口可接收到信息。
在Windows下的具体操作是,开始—运行--(键入)cmd,在弹出的dos窗口中输入
ping+空格+ 要ping的网址,回车。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
w5500_conf.h文件内容
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:http://pan.baidu.com/s/1i574oPv
密码:r3s3
(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-064. 以太网-W5500)
/**
******************************************************************************
* 硬石YS-F1Pro开发板例程功能说明
*
* 例程名称: 1. Network install
*
******************************************************************************
* 说明:
* 本例程配套硬石stm32开发板YS-F1Pro使用。
*
* 淘宝:
* 论坛:http://www.ing10bbs.com
* 版权归硬石嵌入式开发团队所有,请勿商用。
******************************************************************************
*/
【1】例程简介
W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接
方案.使用硬件逻辑门电路实现 TCP/IP 协议栈的传输层及网络层(如: TCP, UDP, ICMP, IPv4,
ARP, IGMP, PPPoE 等协议),并集成了数据链路层,物理层,以及 32K 字节片上 RAM 作为数据
收发缓存。使得上位机主控芯片,只需承担TCP/IP 应用层控制信息的处理任务。从而大大节省了上
位机对于数据复制、协议处理和中断处理等方面的工作量,提升了系统利用率及可靠性。
YS-F1Pro开发板上集成了W5500芯片,可以实现网络通信。
本例程实现W5500网络环境搭建,最后通过ping通验证网络通路。
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号 IO端口 目标功能引脚 出厂默认设置
JP1 PA10 TXD(CH340G) 已接入
JP2 PA9 RXD(CH340G) 已接入
JP8 PF9 INTn(W5500) 已接入
JP9 PF11 SCSn(W5500) 已接入
【3】操作及现象
使用网线接入YS-F1Pro开发板右上方网口,连接至路由器;使用开发板配套的MINI USB线连接到开发
板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置
参数为115200 8-N-1。根据自己网络环境设置w5500_conf.c文件中相关参数,编译程序并下载,等下
载完程序之后,在串口调试助手窗口可接收到信息。
在Windows下的具体操作是,开始—运行--(键入)cmd,在弹出的dos窗口中输入
ping+空格+ 要ping的网址,回车。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
w5500_conf.h文件内容
- #ifndef _W5500_CONF_H_
- #define _W5500_CONF_H_
- #include "stm32f1xx_hal.h"
- #include "stdio.h"
- #include "Ethernet/W5500/types.h"
- #define __GNUC__
- typedef void (*pFunction)(void);
- //typedef void (*pFunction)(void);
- extern uint8 remote_ip[4]; /* 远端IP地址 */
- extern uint16 remote_port; /* 远端端口号 */
- extern uint16 local_port; /* 定义本地端口 */
- extern uint8 use_dhcp; /* 是否使用DHCP获取IP */
- extern uint8 use_eeprom; /* 是否使用EEPROM中的IP配置信息 */
- /*定义SPI作为W5500的硬件接口*/
- #define WIZ_SPIx SPI3 /* 定义W5500所用的SPI接口 */
- #define WIZ_SPIx_RCC_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() /* 定义W5500所用的SPI接口时钟 */
- #define WIZ_SPI_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() /* GPIO端口时钟 */
- #define WIZ_SPIx_GPIO_PORT GPIOB /* GPIO端口 */
- #define WIZ_SPIx_SCLK_PIN GPIO_PIN_3 /* 定义W5500的时钟管脚 */
- #define WIZ_SPIx_MISO_PIN GPIO_PIN_4 /* 定义W5500的MISO管脚 */
- #define WIZ_SPIx_MOSI_PIN GPIO_PIN_5 /* 定义W5500的MOSI管脚 */
- #define WIZ_SPIx_SCS_PIN GPIO_PIN_11 /* 定义W5500的片选管脚 */
- #define WIZ_SPIx_SCS_PORT GPIOF /* GPIO端口 */
- #define WIZ_SPIx_SCS_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() /* GPIO端口时钟 */
- #define WIZ_INT_PIN GPIO_PIN_9 /* 定义W5500的INT管脚 */
- #define WIZ_INT_PORT GPIOF /* GPIO端口 */
- #define WIZ_INT_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() /* GPIO端口时钟 */
- #define WIZ_RESET_PIN GPIO_PIN_8 /* 定义W5500的INT管脚 */
- #define WIZ_RESET_PORT GPIOF /* GPIO端口 */
- #define WIZ_RESET_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() /* GPIO端口时钟 */
- #define FW_VER_HIGH 1
- #define FW_VER_LOW 0
- #define ON 1
- #define OFF 0
- #define HIGH 1
- #define LOW 0
- #define MAX_BUF_SIZE 1460 /*定义每个数据包的大小*/
- #define KEEP_ALIVE_TIME 30 // 30sec
- #define TX_RX_MAX_BUF_SIZE 2048
- #define EEPROM_MSG_LEN sizeof(EEPROM_MSG)
- #define IP_FROM_DEFINE 0 /*使用初始定义的IP信息*/
- #define IP_FROM_DHCP 1 /*使用DHCP获取IP信息*/
- #define IP_FROM_EEPROM 2 /*使用EEPROM定义的IP信息*/
- extern uint8 ip_from; /*选择IP信息配置源*/
- #pragma pack(1)
- /*此结构体定义了W5500可供配置的主要参数*/
- typedef struct _CONFIG_MSG
- {
- uint8 mac[6]; /*MAC地址*/
- uint8 lip[4]; /*local IP本地IP地址*/
- uint8 sub[4]; /*子网掩码*/
- uint8 gw[4]; /*网关*/
- uint8 dns[4]; /*DNS服务器地址*/
- uint8 rip[4]; /*remote IP远程IP地址*/
- uint8 sw_ver[2]; /*软件版本号*/
- }CONFIG_MSG;
- #pragma pack()
- #pragma pack(1)
- /*此结构体定义了eeprom写入的几个变量,可按需修改*/
- typedef struct _EEPROM_MSG
- {
- uint8 mac[6]; /*MAC地址*/
- uint8 lip[4]; /*local IP本地IP地址*/
- uint8 sub[4]; /*子网掩码*/
- uint8 gw[4]; /*网关*/
- }EEPROM_MSG_STR;
- #pragma pack()
- extern EEPROM_MSG_STR EEPROM_MSG;
- extern CONFIG_MSG ConfigMsg;
- extern uint8 dhcp_ok; /*DHCP获取成功*/
- extern uint32 dhcp_time; /*DHCP运行计数*/
- extern __IO uint8_t ntptimer; /*NPT秒计数*/
- /*MCU配置相关函数*/
- void gpio_for_w5500_config(void); /*SPI接口reset 及中断引脚*/
- void timer2_init(void); /*STM32定时器2初始化*/
- void timer2_isr(void); /*定时器中断执行的函数*/
- void reboot(void); /*STM32软复位*/
- void write_config_to_eeprom(void); /*写配置信息到EEPROM中*/
- void read_config_from_eeprom(void); /*从EEPROM中读出信息*/
- /*W5500SPI相关函数*/
- void IINCHIP_WRITE( uint32 addrbsb, uint8 data); /*写入一个8位数据到W5500*/
- uint8 IINCHIP_READ(uint32 addrbsb); /*从W5500读出一个8位数据*/
- uint16 wiz_write_buf(uint32 addrbsb,uint8* buf,uint16 len); /*向W5500写入len字节数据*/
- uint16 wiz_read_buf(uint32 addrbsb, uint8* buf,uint16 len); /*从W5500读出len字节数据*/
- /*W5500基本配置相关函数*/
- void reset_w5500(void); /*硬复位W5500*/
- void set_w5500_mac(void); /*配置W5500的MAC地址*/
- void set_w5500_ip(void); /*配置W5500的IP地址*/
- /*需要用定时的的应用函数*/
- void dhcp_timer_init(void); /*dhcp用到的定时器初始化*/
- void ntp_timer_init(void); /*npt用到的定时器初始化*/
- #endif