STM32F103驱动W5500网络程序word版本文档格式.docx

上传人:b****1 文档编号:5116592 上传时间:2023-05-04 格式:DOCX 页数:46 大小:28.71KB
下载 相关 举报
STM32F103驱动W5500网络程序word版本文档格式.docx_第1页
第1页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第2页
第2页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第3页
第3页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第4页
第4页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第5页
第5页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第6页
第6页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第7页
第7页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第8页
第8页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第9页
第9页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第10页
第10页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第11页
第11页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第12页
第12页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第13页
第13页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第14页
第14页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第15页
第15页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第16页
第16页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第17页
第17页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第18页
第18页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第19页
第19页 / 共46页
STM32F103驱动W5500网络程序word版本文档格式.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

STM32F103驱动W5500网络程序word版本文档格式.docx

《STM32F103驱动W5500网络程序word版本文档格式.docx》由会员分享,可在线阅读,更多相关《STM32F103驱动W5500网络程序word版本文档格式.docx(46页珍藏版)》请在冰点文库上搜索。

STM32F103驱动W5500网络程序word版本文档格式.docx

UDP(广播)模式

#defineTCP_SERVER0x00//TCP服务器模式

#defineTCP_CLIENT0x01//TCP客户端模式

#defineUDP_MODE0x02//UDP(广播)模式

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

unsignedcharS0_State=0;

//端口0状态记录,1:

端口完成初始化,2端口完成连接(可以正常传输数据)

#defineS_INIT0x01//端口完成初始化

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

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

unsignedcharS0_Data;

//端口0接收和发送数据的状态,1:

端口接收到数据,2:

端口发送数据完成

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

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

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

unsignedcharRx_Buffer[2048];

//端口接收数据缓冲区

unsignedcharTx_Buffer[2048];

//端口发送数据缓冲区

unsignedcharW5500_Interrupt;

//W5500中断标志(0:

无中断,1:

有中断)

/*外部中断4服务程序*/

voidEXTI4_IRQHandler(void)

{

if(W5500_INT==0)

{

W5500_Interrupt=1;

EXTI->

PR=1<

<

4;

//清除LINE4上的中断标志位

}

}

voidSPI1_Init(void)

{

RCC->

APB2ENR|=1<

2;

//PORTA时钟使能

12;

//SPI1时钟使能

0;

GPIOA->

CRL&

=0XFFF0FFFF;

CRL|=0X00030000;

//PA4通用挽推输出,输出速度50MHz

ODR|=1<

//PA4上拉,设置片选引脚

//这里只针对SPI口初始化

=0X000FFFFF;

CRL|=0XBBB00000;

//PA5.6.7复用功能挽推输出,输出速度50MHz

ODR|=0X7<

5;

//PA5.6.7上拉

SPI1->

CR1&

=~(1<

10);

//全双工模式

CR1=1<

9;

//外部管理NSS引脚

11);

//8bit数据格式

1);

//CPOL=0时空闲模式下SCK为0CPOL=0

0);

//数据采样从第一个时间边沿开始,CPHA=0

CR1|=1<

8;

//SPI主机

CR1|=0<

3;

//Fsck=Fcpu/2

7);

//MSBfirst先发送高位

CRCPR=0X07;

6;

//SPI设备使能

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

*函数名:

W5500_GPIO_Configuration

*描述:

W5500GPIO初始化配置

*输入:

*输出:

*返回值:

*说明:

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

voidW5500_GPIO_Configuration(void)

//PORTC时钟使能

GPIOC->

=0XFF00FFFF;

CRL|=0X00380000;

ODR|=3<

//PC4上拉,PC5输出高

SPI1_Init();

Ex_NVIC_Config(GPIO_C,4,FTIR);

//下降沿触发

MY_NVIC_Init(2,0,EXTI4_IRQChannel,2);

//抢占2,子优先级0,组2

Write_W5500_1Byte

通过SPI1向指定地址寄存器写1个字节数据

reg:

16位寄存器地址,dat:

待写入的数据

voidWrite_W5500_1Byte(u16reg,u8dat)

W5500_CS_Low();

//置W5500的SCS为低电平

SPI1_Send_Short(reg);

//通过SPI1写16位寄存器地址

SPI1_ReadWriteByte(FDM1|RWB_WRITE|COMMON_R);

//通过SPI1写控制字节,1个字节数据长度,写数据,选择通用寄存器

SPI1_ReadWriteByte(dat);

//写1个字节数据

W5500_CS_High();

//置W5500的SCS为高电平

Write_W5500_2Byte

通过SPI1向指定地址寄存器写2个字节数据

16位待写入的数据(2个字节)

voidWrite_W5500_2Byte(u16reg,u16dat)

SPI1_ReadWriteByte(FDM2|RWB_WRITE|COMMON_R);

//通过SPI1写控制字节,2个字节数据长度,写数据,选择通用寄存器

SPI1_Send_Short(dat);

//写16位数据

Write_W5500_nByte

通过SPI1向指定地址寄存器写n个字节数据

16位寄存器地址,*dat_ptr:

待写入数据缓冲区指针,size:

待写入的数据长度

voidWrite_W5500_nByte(u16reg,u8*dat_ptr,u16size)

u16i;

//置W5500的SCS为低电平

SPI1_ReadWriteByte(VDM|RWB_WRITE|COMMON_R);

//通过SPI1写控制字节,N个字节数据长度,写数据,选择通用寄存器

for(i=0;

i<

size;

i++)//循环将缓冲区的size个字节数据写入W5500

SPI1_ReadWriteByte(*dat_ptr++);

//写一个字节数据

}

Write_W5500_SOCK_1Byte

通过SPI1向指定端口寄存器写1个字节数据

s:

端口号,reg:

voidWrite_W5500_SOCK_1Byte(SOCKETs,u16reg,u8dat)

SPI1_ReadWriteByte(FDM1|RWB_WRITE|(s*0x20+0x08));

//通过SPI1写控制字节,1个字节数据长度,写数据,选择端口s的寄存器

Write_W5500_SOCK_2Byte

通过SPI1向指定端口寄存器写2个字节数据

voidWrite_W5500_SOCK_2Byte(SOCKETs,u16reg,u16dat)

SPI1_ReadWriteByte(FDM2|RWB_WRITE|(s*0x20+0x08));

//通过SPI1写控制字节,2个字节数据长度,写数据,选择端口s的寄存器

Write_W5500_SOCK_4Byte

通过SPI1向指定端口寄存器写4个字节数据

待写入的4个字节缓冲区指针

voidWrite_W5500_SOCK_4Byte(SOCKETs,u16reg,u8*dat_ptr)

SPI1_ReadWriteByte(FDM4|RWB_WRITE|(s*0x20+0x08));

//通过SPI1写控制字节,4个字节数据长度,写数据,选择端口s的寄存器

SPI1_ReadWriteByte(*dat_ptr++);

//写第1个字节数据

//写第2个字节数据

//写第3个字节数据

//写第4个字节数据

Read_W5500_1Byte

读W5500指定地址寄存器的1个字节数据

16位寄存器地址

读取到寄存器的1个字节数据

u8Read_W5500_1Byte(u16reg)

u8i;

i=SPI1_ReadWriteByte(FDM1|RWB_READ|COMMON_R);

//通过SPI1写控制字节,1个字节数据长度,读数据,选择通用寄存器

//i=Read_W5500_1Byte(0x00);

//SPI1_Send_Byte(0x00);

//发送一个哑数据

i=SPI1_ReadWriteByte(0x00);

//读取1个字节数据

//置W5500的SCS为高电平

returni;

//返回读取到的寄存器数据

Read_W5500_SOCK_1Byte

读W5500指定端口寄存器的1个字节数据

u8Read_W5500_SOCK_1Byte(SOCKETs,u16reg)

i=SPI1_ReadWriteByte(FDM1|RWB_READ|(s*0x20+0x08));

//通过SPI1写控制字节,1个字节数据长度,读数据,选择端口s的寄存器

//i=SPI_I2S_ReceiveData(SPI1);

i=SPI1_ReadWriteByte(0X00);

Read_W5500_SOCK_2Byte

读W5500指定端口寄存器的2个字节数据

读取到寄存器的2个字节数据(16位)

u16Read_W5500_SOCK_2Byte(SOCKETs,u16reg)

i=SPI1_ReadWriteByte(FDM2|RWB_READ|(s*0x20+0x08));

//通过SPI1写控制字节,2个字节数据长度,读数据,选择端口s的寄存器

//读取高位数据

i*=256;

i+=SPI1_ReadWriteByte(0x00);

//读取低位数据

Read_SOCK_Data_Buffer

从W5500接收数据缓冲区中读取数据

端口号,*dat_ptr:

数据保存缓冲区指针

读取到的数据长度,rx_size个字节

u16Read_SOCK_Data_Buffer(SOCKETs,u8*dat_ptr)

u16rx_size;

u16offset,offset1;

u8j;

rx_size=Read_W5500_SOCK_2Byte(s,Sn_RX_RSR);

if(rx_size==0)return0;

//没接收到数据则返回

if(rx_size>

1460)rx_size=1460;

offset=Read_W5500_SOCK_2Byte(s,Sn_RX_RD);

offset1=offset;

offset&

=(S_RX_SIZE-1);

//计算实际的物理地址

SPI1_Send_Short(offset);

//写16位地址

j=SPI1_ReadWriteByte(VDM|RWB_READ|(s*0x20+0x18));

//写控制字节,N个字节数据长度,读数据,选择端口s的寄存器

//j=SPI_I2S_ReceiveData(SPI1);

if((offset+rx_size)<

S_RX_SIZE)//如果最大地址未超过W5500接收缓冲区寄存器的最大地址

for(i=0;

rx_size;

i++)//循环读取rx_size个字节数据

{

//SPI1_Send_Byte(0x00);

j=SPI1_ReadWriteByte(0X00);

*dat_ptr=j;

//将读取到的数据保存到数据保存缓冲区

dat_ptr++;

//数据保存缓冲区指针地址自增1

}

else//如果最大地址超过W5500接收缓冲区寄存器的最大地址

offset=S_RX_SIZE-offset;

offset;

i++)//循环读取出前offset个字节数据

W5500_CS_High();

W5500_CS_L

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2