打印
[STM32F1]

【HAL库每天一例】第065例:以太网-W5500

[复制链接]
2277|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
亼亽|  楼主 | 2016-7-9 08:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 亼亽 于 2016-7-9 08:55 编辑

【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文件内容
#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


沙发
mmuuss586| | 2016-7-9 10:41 | 只看该作者
谢谢分享;

使用特权

评论回复
板凳
亼亽|  楼主 | 2016-10-11 08:49 | 只看该作者
资料包括程序、相关说明资料以及软件使用截图
百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1
360云盘:https://yunpan.cn/OcPiRp3wEcA92u密码 cfb6

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

216

帖子

48

粉丝