w5500跨网段_基于STM32F1的局域网通信模块W5500驱动

本文档详细介绍了如何配置STM32F1微控制器上的W5500网络通信模块进行跨网段通信,包括设置IP地址、端口号、子网掩码、网关参数,以及初始化和中断处理流程。通过SPI接口和STM32的SPI1进行通信,并提供了相关驱动函数库。
摘要由CSDN通过智能技术生成

说明

需要调整的内容为W5500.h中关于IP地址、端口号、子网掩码、网关等参数

W5500

#ifndef_W5500_H_

#define_W5500_H_

/****************** Parameter **********************/

//网关地址

#define GATEWAY_IP_0 125

#define GATEWAY_IP_1 217

#define GATEWAY_IP_2 54

#define GATEWAY_IP_3 254

#define SUB_MASK_0 255

#define SUB_MASK_1 255

#define SUB_MASK_2 255

#define SUB_MASK_3 0

#define PHY_ADDR_0 0x80

#define PHY_ADDR_1 0x9E

#define PHY_ADDR_2 0x01

#define PHY_ADDR_3 0x56

#define PHY_ADDR_4 0x37

#define PHY_ADDR_5 0xC6

//本机IP地址

#define IP_ADDR_0 125

#define IP_ADDR_1 217

#define IP_ADDR_2 54

#define IP_ADDR_3 55

//本机端口号

#define S0_PORT_0 0x13

#define S0_PORT_1 0x88

//UDP(广播)模式,目的主机IP地址

#define UDP_DIR_0 125

#define UDP_DIR_1 217

#define UDP_DIR_2 54

#define UDP_DIR_3 242

//UDP(广播)模式,目的主机端口号

#define UDP_DPORT_0 0x17

#define UDP_DPORT_1 0x75

//模式配置

#define S0_MODE UDP_MODE

/***************** Common Register *****************/

#define MR0x0000

#define RST0x80

#define WOL0x20

#define PB0x10

#define PPP0x08

#define FARP0x02

#define GAR0x0001

#define SUBR0x0005

#define SHAR0x0009

#define SIPR0x000f

#define INTLEVEL0x0013

#define IR0x0015

#define CONFLICT0x80

#define UNREACH0x40

#define PPPOE0x20

#define MP0x10

#define IMR0x0016

#define IM_IR70x80

#define IM_IR60x40

#define IM_IR50x20

#define IM_IR40x10

#define SIR0x0017

#define S7_INT0x80

#define S6_INT0x40

#define S5_INT0x20

#define S4_INT0x10

#define S3_INT0x08

#define S2_INT0x04

#define S1_INT0x02

#define S0_INT0x01

#define SIMR0x0018

#define S7_IMR0x80

#define S6_IMR0x40

#define S5_IMR0x20

#define S4_IMR0x10

#define S3_IMR0x08

#define S2_IMR0x04

#define S1_IMR0x02

#define S0_IMR0x01

#define RTR0x0019

#define RCR0x001b

#define PTIMER0x001c

#define PMAGIC0x001d

#define PHA0x001e

#define PSID0x0024

#define PMRU0x0026

#define UIPR0x0028

#define UPORT0x002c

#define PHYCFGR0x002e

#define RST_PHY0x80

#define OPMODE0x40

#define DPX0x04

#define SPD0x02

#define LINK0x01

#define VERR0x0039

/********************* Socket Register *******************/

#define Sn_MR0x0000

#define MULTI_MFEN0x80

#define BCASTB0x40

#defineND_MC_MMB0x20

#define UCASTB_MIP6B0x10

#define MR_CLOSE0x00

#define MR_TCP0x01

#define MR_UDP0x02

#define MR_MACRAW0x04

#define Sn_CR0x0001

#define OPEN0x01

#define LISTEN0x02

#define CONNECT0x04

#define DISCON0x08

#define CLOSE0x10

#define SEND0x20

#define SEND_MAC0x21

#define SEND_KEEP0x22

#define RECV0x40

#define Sn_IR0x0002

#define IR_SEND_OK0x10

#define IR_TIMEOUT0x08

#define IR_RECV0x04

#define IR_DISCON0x02

#define IR_CON0x01

#define Sn_SR0x0003

#define SOCK_CLOSED0x00

#define SOCK_INIT0x13

#define SOCK_LISTEN0x14

#define SOCK_ESTABLISHED0x17

#define SOCK_CLOSE_WAIT0x1c

#define SOCK_UDP0x22

#define SOCK_MACRAW0x02

#define SOCK_SYNSEND0x15

#define SOCK_SYNRECV0x16

#define SOCK_FIN_WAI0x18

#define SOCK_CLOSING0x1a

#define SOCK_TIME_WAIT0x1b

#define SOCK_LAST_ACK0x1d

#define Sn_PORT0x0004

#define Sn_DHAR 0x0006

#define Sn_DIPR0x000c

#define Sn_DPORTR0x0010

#define Sn_MSSR0x0012

#define Sn_TOS0x0015

#define Sn_TTL0x0016

#define Sn_RXBUF_SIZE0x001e

#define Sn_TXBUF_SIZE0x001f

#define Sn_TX_FSR0x0020

#define Sn_TX_RD0x0022

#define Sn_TX_WR0x0024

#define Sn_RX_RSR0x0026

#define Sn_RX_RD0x0028

#define Sn_RX_WR0x002a

#define Sn_IMR0x002c

#define IMR_SENDOK0x10

#define IMR_TIMEOUT0x08

#define IMR_RECV0x04

#define IMR_DISCON0x02

#define IMR_CON0x01

#define Sn_FRAG0x002d

#define Sn_KPALVTR0x002f

/*******************************************************************/

/************************ SPI Control Byte *************************/

/*******************************************************************/

/* Operation mode bits */

#define VDM0x00

#define FDM10x01

#defineFDM20x02

#define FDM40x03

/* Read_Write control bit */

#define RWB_READ0x00

#define RWB_WRITE0x04

/* Block select bits */

#define COMMON_R0x00

/* Socket 0 */

#define S0_REG0x08

#define S0_TX_BUF0x10

#define S0_RX_BUF0x18

/* Socket 1 */

#define S1_REG0x28

#define S1_TX_BUF0x30

#define S1_RX_BUF0x38

/* Socket 2 */

#define S2_REG0x48

#define S2_TX_BUF0x50

#define S2_RX_BUF0x58

/* Socket 3 */

#define S3_REG0x68

#define S3_TX_BUF0x70

#define S3_RX_BUF0x78

/* Socket 4 */

#define S4_REG0x88

#define S4_TX_BUF0x90

#define S4_RX_BUF0x98

/* Socket 5 */

#define S5_REG0xa8

#define S5_TX_BUF0xb0

#define S5_RX_BUF0xb8

/* Socket 6 */

#define S6_REG0xc8

#define S6_TX_BUF0xd0

#define S6_RX_BUF0xd8

/* Socket 7 */

#define S7_REG0xe8

#define S7_TX_BUF0xf0

#define S7_RX_BUF0xf8

#define TRUE0xff

#define FALSE0x00

#define S_RX_SIZE2048/*定义Socket接收缓冲区的大小,可以根据W5500_RMSR的设置修改 */

#define S_TX_SIZE2048 /*定义Socket发送缓冲区的大小,可以根据W5500_TMSR的设置修改 */

/***************----- W5500 GPIO定义 -----***************/

#define W5500_SCSGPIO_Pin_4//定义W5500的CS引脚

#define W5500_SCS_PORTGPIOA

#define W5500_RSTGPIO_Pin_0//定义W5500的RST引脚

#define W5500_RST_PORTGPIOB

#define W5500_INTGPIO_Pin_1//定义W5500的INT引脚

#define W5500_INT_PORTGPIOB

/***************----- 网络参数变量定义 -----***************/

extern unsigned char Gateway_IP[4];//网关IP地址

extern unsigned char Sub_Mask[4];//子网掩码

extern unsigned char Phy_Addr[6];//物理地址(MAC)

extern unsigned char IP_Addr[4];//本机IP地址

extern unsigned char S0_Port[2];//端口0的端口号(5000)

extern unsigned char S0_DIP[4];//端口0目的IP地址

extern unsigned char S0_DPort[2];//端口0目的端口号(6000)

extern unsigned char UDP_DIPR[4];//UDP(广播)模式,目的主机IP地址

extern unsigned char UDP_DPORT[2];//UDP(广播)模式,目的主机端口号

/***************----- 端口的运行模式 -----***************/

extern unsigned char S0_Mode;//端口0的运行模式,0:TCP服务器模式,1:TCP客户端模式,2:UDP(广播)模式

#define TCP_SERVER0x00//TCP服务器模式

#define TCP_CLIENT0x01//TCP客户端模式

#define UDP_MODE0x02//UDP(广播)模式

/***************----- 端口的运行状态 -----***************/

extern unsigned char S0_State;//端口0状态记录,1:端口完成初始化,2端口完成连接(可以正常传输数据)

#define S_INIT0x01//端口完成初始化

#define S_CONN0x02//端口完成连接,可以正常传输数据

/***************----- 端口收发数据的状态 -----***************/

extern unsigned char S0_Data;//端口0接收和发送数据的状态,1:端口接收到数据,2:端口发送数据完成

#define S_RECEIVE0x01//端口接收到一个数据包

#define S_TRANSMITOK0x02//端口发送一个数据包完成

/***************----- 端口数据缓冲区 -----***************/

extern unsigned char Rx_Buffer[2048];//端口接收数据缓冲区

extern unsigned char Tx_Buffer[2048];//端口发送数据缓冲区

extern unsigned char W5500_Interrupt;//W5500中断标志(0:无中断,1:有中断)

typedef unsigned char SOCKET;//自定义端口号数据类型

extern void Delay(unsigned int d);//延时函数(ms)

extern void W5500_GPIO_Configuration(void);//W5500 GPIO初始化配置

extern void W5500_NVIC_Configuration(void);//W5500 接收引脚中断优先级设置

extern void SPI_Configuration(void);//W5500 SPI初始化配置(STM32 SPI1)

extern void W5500_Hardware_Reset(void);//硬件复位W5500

extern void W5500_Init(void);//初始化W5500寄存器函数

extern unsigned char Detect_Gateway(void);//检查网关服务器

extern void Socket_Init(SOCKET s);//指定Socket(0~7)初始化

extern unsigned char Socket_Connect(SOCKET s);//设置指定Socket(0~7)为客户端与远程服务器连接

extern unsigned char Socket_Listen(SOCKET s);//设置指定Socket(0~7)作为服务器等待远程主机的连接

extern unsigned char Socket_UDP(SOCKET s);//设置指定Socket(0~7)为UDP模式

extern unsigned short Read_SOCK_Data_Buffer(SOCKET s, unsigned char *dat_ptr);//指定Socket(0~7)接收数据处理

extern void Write_SOCK_Data_Buffer(SOCKET s, unsigned char *dat_ptr, unsigned short size); //指定Socket(0~7)发送数据处理

extern void W5500_Interrupt_Process(void);//W5500中断处理程序框架

void NVIC_Configuration(void);

void RCC_Configuration(void);

void Timer2_Init_Config(void);

void SendData(unsigned char* data,int length);

void My_W5500_Init(void);

void W5500_Socket_Set(void);

void Process_Socket_Data(SOCKET s);

#endif

W5500.c

/***********************************************************

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值