标题:
stm32f4单片机W5500客户端模式例程(TCP/IP)Keil源程序
[打印本页]
作者:
筑梦守心
时间:
2022-9-13 14:27
标题:
stm32f4单片机W5500客户端模式例程(TCP/IP)Keil源程序
stm32f4例程如下
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "delay.h"
#include "spi.h"
#include "socket.h" // Just include one header for WIZCHIP
#include "string.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define SOCK_TCPS 0
#define DATA_BUF_SIZE 2048
/* Private macro -------------------------------------------------------------*/
uint8_t gDATABUF[DATA_BUF_SIZE];
uint8_t testDATABUF[52] = {0x78,0x75,0x6e,0x6a,0x69,0x00,0x34,0x84,0xef,0x40,0x82,0x01,0x76,0x0f,0x7d,0x04
,0x01,0x1c,0x63,0xc2,0xe0,0x00,0x84,0xff,0xbd,0x05,0x17,0x21,0x10,0x50,0x32,0x00
,0xfc,0x17,0x01,0x64,0x01,0x02,0x64,0x05,0x2b,0xc8,0xba,0x64,0x05,0x2b,0xcd,0xa8,0x4d,0xff,0xda,0xbf};
// Default Network Configuration
wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11},
.ip = {192, 168, 1, 07},
.sn = {255,255,255,0},
.gw = {192, 168, 0, 1},
.dns = {8,8,8,8},
.dhcp = NETINFO_STATIC };
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
void platform_init(void); // initialize the dependent host peripheral
void network_init(void); // Initialize Network information and display it
/****************************************************
函数名: main
形参: 无
返回值: 无
函数功能: 主函数
****************************************************/
int main(void)
{
uint8_t tmp;
uint16_t len=0;
uint8_t memsize[2][8] = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}};
uint8_t DstIP[4]={192,168,1,100};
uint16_t DstPort=6000;
//Host dependent peripheral initialized
platform_init();
// First of all, Should register SPI callback functions implemented by user for accessing WIZCHIP
/* Critical section callback */
reg_wizchip_cris_cbfunc(SPI_CrisEnter, SPI_CrisExit); //注册临界区函数
/* Chip selection call back */
#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_
reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);//注册SPI片选信号函数
#elif _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_
reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect); // CS must be tried with LOW.
#else
#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SIP_) != _WIZCHIP_IO_MODE_SIP_
#error "Unknown _WIZCHIP_IO_MODE_"
#else
reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
#endif
#endif
/* SPI Read & Write callback function */
reg_wizchip_spi_cbfunc(SPI_ReadByte, SPI_WriteByte); //注册读写函数
/* WIZCHIP SOCKET Buffer initialize */
if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1){
printf("WIZCHIP Initialized fail.\r\n");
while(1);
}
/* PHY link status check */
do{
if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
printf("Unknown PHY Link stauts.\r\n");
}
}while(tmp == PHY_LINK_OFF);
/* Network initialization */
network_init();
while(1)
{
switch(getSn_SR(SOCK_TCPS)) // 获取socket0的状态
{
case SOCK_INIT: // Socket处于初始化完成(打开)状态
connect(SOCK_TCPS,DstIP,DstPort);
break;
case SOCK_ESTABLISHED: // Socket处于连接建立状态
if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
{
setSn_IR(SOCK_TCPS, Sn_IR_CON); // Sn_IR的CON位置1,通知W5500连接已建立
}
//send datapack
send(SOCK_TCPS,testDATABUF,52);
delay_ms(1000);
/*
// 数据回环测试程序:数据从上位机服务器发给W5500,W5500接收到数据后再回给服务器
len=getSn_RX_RSR(SOCK_TCPS); // len=Socket0接收缓存中已接收和保存的数据大小
if(len)
{
recv(SOCK_TCPS,gDATABUF,len);
printf("%s\r\n",gDATABUF);
send(SOCK_TCPS,gDATABUF,len);
} */
break;
case SOCK_CLOSE_WAIT: // Socket处于等待关闭状态
disconnect(SOCK_TCPS);
break;
case SOCK_CLOSED: // Socket处于关闭状态
socket(SOCK_TCPS,Sn_MR_TCP,5000,0x00); // 打开Socket0,打开一个本地端口
break;
}
}
}
/**
* @brief Intialize the network information to be used in WIZCHIP
* @retval None
*/
void network_init(void)
{
uint8_t tmpstr[6];
ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO);
ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);
// Display Network Information
ctlwizchip(CW_GET_ID,(void*)tmpstr);
printf("\r\n=== %s NET CONF ===\r\n",(char*)tmpstr);
printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],
gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
printf("SIP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
printf("GAR: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
printf("SUB: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
printf("DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
printf("======================\r\n");
}
/**
* @brief Loopback Test Example Code using ioLibrary_BSD
* @retval None
*/
void platform_init(void)
{
SystemInit();//系统时钟初始化
USART_Configuration();//串口1初始化
//Config SPI
SPI_Configuration();
//延时初始化
delay_init(168);
}
复制代码
Keil代码下载:
W5500_TCPClient.7z
(457.4 KB, 下载次数: 29)
2022-9-13 23:47 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1