找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 938|回复: 0
打印 上一主题 下一主题
收起左侧

stm32f4单片机W5500客户端模式例程(TCP/IP)Keil源程序

[复制链接]
跳转到指定楼层
楼主
ID:501957 发表于 2022-9-13 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32f4例程如下
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "usart.h"
  4. #include "delay.h"
  5. #include "spi.h"
  6. #include "socket.h"        // Just include one header for WIZCHIP
  7. #include "string.h"
  8. /* Private typedef -----------------------------------------------------------*/
  9. /* Private define ------------------------------------------------------------*/
  10. #define SOCK_TCPS        0
  11. #define DATA_BUF_SIZE   2048
  12. /* Private macro -------------------------------------------------------------*/
  13. uint8_t gDATABUF[DATA_BUF_SIZE];
  14. uint8_t testDATABUF[52] = {0x78,0x75,0x6e,0x6a,0x69,0x00,0x34,0x84,0xef,0x40,0x82,0x01,0x76,0x0f,0x7d,0x04
  15.                                                                                                                 ,0x01,0x1c,0x63,0xc2,0xe0,0x00,0x84,0xff,0xbd,0x05,0x17,0x21,0x10,0x50,0x32,0x00
  16.                                                                                                                 ,0xfc,0x17,0x01,0x64,0x01,0x02,0x64,0x05,0x2b,0xc8,0xba,0x64,0x05,0x2b,0xcd,0xa8,0x4d,0xff,0xda,0xbf};
  17. // Default Network Configuration
  18. wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x08, 0xdc,0x11, 0x11, 0x11},
  19.                             .ip = {192, 168, 1, 07},
  20.                             .sn = {255,255,255,0},
  21.                             .gw = {192, 168, 0, 1},
  22.                             .dns = {8,8,8,8},
  23.                             .dhcp = NETINFO_STATIC };
  24. /* Private variables ---------------------------------------------------------*/
  25. /* Private function prototypes -----------------------------------------------*/
  26. /* Private functions ---------------------------------------------------------*/
  27. void platform_init(void);                                                                // initialize the dependent host peripheral
  28. void network_init(void);                                                                // Initialize Network information and display it

  29. /****************************************************
  30. 函数名:                main
  31. 形参:                        无
  32. 返回值:                无
  33. 函数功能:        主函数
  34. ****************************************************/
  35. int main(void)
  36. {
  37.         uint8_t tmp;

  38.         uint16_t len=0;
  39.         uint8_t memsize[2][8] = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}};
  40.         uint8_t DstIP[4]={192,168,1,100};
  41.         uint16_t        DstPort=6000;
  42.         //Host dependent peripheral initialized
  43.         platform_init();
  44.         // First of all, Should register SPI callback functions implemented by user for accessing WIZCHIP
  45.         /* Critical section callback */
  46.         reg_wizchip_cris_cbfunc(SPI_CrisEnter, SPI_CrisExit);        //注册临界区函数
  47.         /* Chip selection call back */
  48. #if   _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_
  49.         reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);//注册SPI片选信号函数
  50. #elif _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_
  51.         reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);  // CS must be tried with LOW.
  52. #else
  53.    #if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SIP_) != _WIZCHIP_IO_MODE_SIP_
  54.       #error "Unknown _WIZCHIP_IO_MODE_"
  55.    #else
  56.       reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
  57.    #endif
  58. #endif
  59.         /* SPI Read & Write callback function */
  60.         reg_wizchip_spi_cbfunc(SPI_ReadByte, SPI_WriteByte);        //注册读写函数

  61.         /* WIZCHIP SOCKET Buffer initialize */
  62.         if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1){
  63.                  printf("WIZCHIP Initialized fail.\r\n");
  64.                  while(1);
  65.         }

  66.         /* PHY link status check */
  67.         do{
  68.                  if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
  69.                                 printf("Unknown PHY Link stauts.\r\n");
  70.                  }
  71.         }while(tmp == PHY_LINK_OFF);

  72.         /* Network initialization */
  73.         network_init();
  74.         
  75. while(1)
  76.         {
  77.                 switch(getSn_SR(SOCK_TCPS))                                                                                                                // 获取socket0的状态
  78.                 {
  79.                         case SOCK_INIT:                                                                                                                        // Socket处于初始化完成(打开)状态        
  80.                                         connect(SOCK_TCPS,DstIP,DstPort);
  81.                         break;
  82.                         case SOCK_ESTABLISHED:                                                                                        // Socket处于连接建立状态
  83.                                         if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)                                          
  84.                                         {
  85.                                                 setSn_IR(SOCK_TCPS, Sn_IR_CON);                                                                // Sn_IR的CON位置1,通知W5500连接已建立
  86.                                         }
  87.                                         //send datapack
  88.                                         send(SOCK_TCPS,testDATABUF,52);
  89.                                         delay_ms(1000);
  90.                                         /*
  91.                                         // 数据回环测试程序:数据从上位机服务器发给W5500,W5500接收到数据后再回给服务器
  92.                                         len=getSn_RX_RSR(SOCK_TCPS);                                                                                // len=Socket0接收缓存中已接收和保存的数据大小                                       
  93.                                         if(len)
  94.                                         {
  95.                                                 recv(SOCK_TCPS,gDATABUF,len);               
  96.                                                 printf("%s\r\n",gDATABUF);
  97.                                                 send(SOCK_TCPS,gDATABUF,len);                                                        
  98.                                         }                                */                        
  99.                         break;
  100.                         case SOCK_CLOSE_WAIT:                                                                                                  // Socket处于等待关闭状态
  101.                                 disconnect(SOCK_TCPS);        
  102.                         break;
  103.                         case SOCK_CLOSED:                                                                                                                // Socket处于关闭状态
  104.                                         socket(SOCK_TCPS,Sn_MR_TCP,5000,0x00);                // 打开Socket0,打开一个本地端口
  105.                         break;
  106.           }
  107.   }
  108. }
  109. /**
  110.   * @brief  Intialize the network information to be used in WIZCHIP
  111.   * @retval None
  112.   */
  113. void network_init(void)
  114. {
  115.   uint8_t tmpstr[6];
  116.         ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO);
  117.         ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);

  118.         // Display Network Information
  119.         ctlwizchip(CW_GET_ID,(void*)tmpstr);
  120.         printf("\r\n=== %s NET CONF ===\r\n",(char*)tmpstr);
  121.         printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],
  122.                   gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
  123.         printf("SIP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
  124.         printf("GAR: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
  125.         printf("SUB: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
  126.         printf("DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
  127.         printf("======================\r\n");
  128. }

  129. /**
  130.   * @brief  Loopback Test Example Code using ioLibrary_BSD        
  131.   * @retval None
  132.   */
  133. void platform_init(void)
  134. {
  135.         SystemInit();//系统时钟初始化
  136.         USART_Configuration();//串口1初始化        
  137.         //Config SPI
  138.         SPI_Configuration();
  139.         //延时初始化
  140.         delay_init(168);
  141. }
复制代码

Keil代码下载: W5500_TCPClient.7z (457.4 KB, 下载次数: 25)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表