/**********************************************************************************
* 文件名 :W5500.c
* 描述 :W5500 驱动函数库
* 库版本 :ST_v3.5
**********************************************************************************/
#include "W5500.h"
/***************----- 网络参数变量定义 -----***************/
unsigned char Gateway_IP[4];//网关IP地址
unsigned char Sub_Mask[4]; //子网掩码
unsigned char Phy_Addr[6]; //物理地址(MAC)
unsigned char IP_Addr[4]; //本机IP地址
unsigned char S0_Port[2]; //端口0的端口号
unsigned char S0_DIP[4]; //端口0目的IP地址
unsigned char S0_DPort[2]; //端口0目的端口号
unsigned char UDP_DIPR[4]; //UDP(广播)模式,目的主机IP地址
unsigned char UDP_DPORT[2]; //UDP(广播)模式,目的主机端口号
/***************----- 端口的运行模式 -----***************/
unsigned char S0_Mode =3; //端口0的运行模式,0:TCP服务器模式,1:TCP客户端模式,2:UDP(广播)模式
#define TCP_SERVER 0x00 //TCP服务器模式
#define TCP_CLIENT 0x01 //TCP客户端模式
#define UDP_MODE 0x02 //UDP(广播)模式
/***************----- 端口的运行状态 -----***************/
unsigned char S0_State =0; //端口0状态记录,1:端口完成初始化,2端口完成连接(可以正常传输数据)
#define S_INIT 0x01 //端口完成初始化
#define S_CONN 0x02 //端口完成连接,可以正常传输数据
/***************----- 端口收发数据的状态 -----***************/
unsigned char S0_Data; //端口0接收和发送数据的状态,1:端口接收到数据,2:端口发送数据完成
#define S_RECEIVE 0x01 //端口接收到一个数据包
#define S_TRANSMITOK 0x02 //端口发送一个数据包完成
/***************----- 端口数据缓冲区 -----***************/
unsigned char Rx_Buffer[30]; //端口接收数据缓冲区
unsigned char Tx_Buffer[30]; //端口发送数据缓冲区
unsigned char W5500_Interrupt; //W5500中断标志(0:无中断,1:有中断)
/*******************************************************************************
* 函数名 : SPI_ReadByte
* 描述 : 读取一个字节SPI返回的数据
* 输入 : 无
* 输出 : 无
* 返回值 : 读取到的寄存器数据
* 说明 : 无
*******************************************************************************/
unsigned char SPI_Read_Byte(void)
{
unsigned char i,rByte=0;
W5500_SCLK=0;
for(i=0;i<8;i++)
{
W5500_SCLK=1;
rByte<<=1;
rByte|=W5500_MISO;
W5500_SCLK=0;
}
return rByte;
}
/*******************************************************************************
* 函数名 : SPI_SendByte
* 描述 : SPI发送一个字节数据
* 输入 : dt:待发送的数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void SPI_Send_Byte(unsigned char dt)
{
unsigned char i;
for(i=0;i<8;i++)
{
W5500_SCLK=0;
if((dt<<i)&0x80)
W5500_MOSI=1;
else
W5500_MOSI=0;
W5500_SCLK=1;
}
W5500_SCLK=0;
}
/*******************************************************************************
* 函数名 : SPI_Send_Short
* 描述 : SPI发送2个字节数据(16位)
* 输入 : dat:待发送的16位数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void SPI_Send_Short(unsigned short dt)
{
SPI_Send_Byte((unsigned char)(dt/256)); //写数据高位
SPI_Send_Byte(dt); //写数据低位
}
/*******************************************************************************
* 函数名 : Write_W5500_1Byte
* 描述 : 通过SPI向指定地址寄存器写1个字节数据
* 输入 : reg:16位寄存器地址,dat:待写入的数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void Write_W5500_1Byte(unsigned short reg, unsigned char dat)
{
W5500_SCS=0;//置W5500的SCS为低电平
SPI_Send_Short(reg);//通过SPI写16位寄存器地址
SPI_Send_Byte(FDM1|RWB_WRITE|COMMON_R);//通过SPI写控制字节,1个字节数据长度,写数据,选择通用寄存器
SPI_Send_Byte(dat);//写1个字节数据
W5500_SCS=1; //置W5500的SCS为高电平
}
/*******************************************************************************
* 函数名 : Write_W5500_2Byte
* 描述 : 通过SPI向指定地址寄存器写2个字节数据
* 输入 : reg:16位寄存器地址,dat:16位待写入的数据(2个字节)
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void Write_W5500_2Byte(unsigned short reg, unsigned short dat)
{
W5500_SCS=0;//置W5500的SCS为低电平
SPI_Send_Short(reg);//通过SPI写16位寄存器地址
SPI_Send_Byte(FDM2|RWB_WRITE|COMMON_R);//通过SPI写控制字节,2个字节数据长度,写数据,选择通用寄存器
SPI_Send_Short(dat);//写16位数据
W5500_SCS=1; //置W5500的SCS为高电平
}
/*******************************************************************************
* 函数名 : Write_W5500_nByte
* 描述 : 通过SPI向指定地址寄存器写n个字节数据
* 输入 : reg:16位寄存器地址,*dat_ptr:待写入数据缓冲区指针,size:待写入的数据长度
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void Write_W5500_nByte(unsigned short reg, unsigned char *dat_ptr, unsigned short size)
{
unsigned short i;
W5500_SCS=0;//置W5500的SCS为低电平
SPI_Send_Short(reg);//通过SPI写16位寄存器地址
SPI_Send_Byte(VDM|RWB_WRITE|COMMON_R);//通过SPI写控制字节,N个字节数据长度,写数据,选择通用寄存器
for(i=0;i<size;i++)//循环将缓冲区的size个字节数据写入W5500
{
SPI_Send_Byte(*dat_ptr++);//写一个字节数据
}
W5500_SCS=1; //置W5500的SCS为高电平
}
/*******************************************************************************
* 函数名 : Write_W5500_SOCK_1Byte
* 描述 : 通过SPI向指定端口寄存器写1个字节数据
* 输入 : s:端口号,reg:16位寄存器地址,dat:待写入的数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void Write_W5500_SOCK_1Byte(SOCKET s, unsigned short reg, unsigned char dat)
{
W5500_SCS=0;//置W5500的SCS为低电平
SPI_Send_Short(reg);//通过SPI写16位寄存器地址
SPI_Send_Byte(FDM1|RWB_WRITE|(s*0x20+0x08));//通过SPI写控制字节,1个字节数据长度,写数据,选择端口s的寄存器
SPI_Send_Byte(dat);//写1个字节数据
W5500_SCS=1; //置W5500的SCS为高电平
}
/*******************************************************************************
* 函数名 : Write_W5500_SOCK_2Byte
* 描述 : 通过SPI向指定端口寄存器写2个字节数据
* 输入 : s:端口号,reg:16位寄存器地址,dat:16位待写入的数据(2个字节)
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void Write_W5500_SOCK_2Byte(SOCKET s, unsigned short reg, unsigned short dat)
{
W5500_SCS=0;//置W5500的SCS为低电平
SPI_Send_Short(reg);//通过SPI写16位寄存器地址
SPI_Send_Byte(FDM2|RWB_WRITE|(s*0x20+0x08));//通过SPI写控制字节,2个字节数据长度,写数据,选择端口s的寄存器
SPI_Send_Short(dat);//写16位数据
W5500_SCS=1; //置W5500的SCS为高电平
}
/*******************************************************************************
* 函数名 : Write_W5500_SOCK_4Byte
* 描述 : 通过SPI向指定端口寄存器写4个字节数据
* 输入 : s:端口号,reg:16位寄存器地址,*dat_ptr:待写入的4个字节缓冲区指针
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void Write_W5500_SOCK_4Byte(SOCKET s, unsigned short reg, unsigned char *dat_ptr)
{
W5500_SCS=0;//置W5500的SCS为低电平
SPI_Send_Short(reg);//通过SPI写16位寄存器地址
SPI_Send_Byte(FDM4|RWB_WRITE|(s*0x20+0x08));//通过SPI写控制字节,4个字节数据长度,写数据,选择端口s的寄存器
SPI_Send_Byte(*dat_ptr++);//写第1个字节数据
SPI_Send_Byte(*dat_ptr++);//写第2个字节数据
SPI_Send_Byte(*dat_ptr++);//写第3个字节数据
SPI_Send_Byte(*dat_ptr++);//写第4个字节数据
W5500_SCS=1; //置W5500的SCS为高电平
}
/*******************************************************************************
* 函数名 : Read_W5500_1Byte
* 描述 : 读W5500指定地址寄存器的1个字节数据
* 输入 : reg:16位寄存�
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机控制w5500实现tcp客户端通信
共23个文件
c:2个
lst:2个
bak:2个
需积分: 44 6 下载量 137 浏览量
2022-09-23
17:11:22
上传
评论 1
收藏 95KB ZIP 举报
温馨提示
51单片机控制w5500实现tcp客户端通信
资源详情
资源评论
资源推荐
收起资源包目录
tcp客户端.zip (23个子文件)
tcp客户端
main.OBJ 18KB
Project.uvgui.Administrator 84KB
W5500.__i 41B
main.c 6KB
W5500.LST 40KB
Project.uvproj 14KB
main.LST 11KB
Project_uvopt.bak 141KB
Project.uvopt 6KB
ExtDll.iex 19B
Project.uvgui.admin 90KB
Project.lnp 57B
Project_uvproj.bak 13KB
W5500.h 7KB
Project.plg 452B
Project 50KB
Project.hex 9KB
W5500.c 23KB
Project.M51 37KB
W5500.OBJ 38KB
.vscode
uv4.log.lock 0B
c_cpp_properties.json 1009B
keil-assistant.log 77B
共 23 条
- 1
m晴朗
- 粉丝: 7053
- 资源: 110
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0