找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7367|回复: 3
收起左侧

关于W5500的UDP通信方式代码(基于stm32f103单片机)

[复制链接]
ID:400390 发表于 2018-9-20 10:19 | 显示全部楼层 |阅读模式
W5500这个芯片不用多说,大家都知道的,神一样的存在,下面贴出W5500的UDP通信方式代码例程,供大家参考,希望大家批评指正,谢谢
0.png

单片机源程序如下:
  1. #include "usart.h"
  2. #include "device.h"
  3. #include "spi2.h"
  4. #include "ult.h"
  5. #include "socket.h"
  6. #include "w5500.h"
  7. #include "24c16.h"
  8. #include "md5.h"
  9. #include <string.h>

  10. extern uint8 txsize[];                                                                                // 引用外部变量,声明Socket发送缓存大小
  11. extern uint8 rxsize[];                                                                                // 引用外部变量,声明Socket接收缓存大小

  12. uint8 buffer[2048];                                                                                                // 定义一个2KB的数组,用来存放Socket的通信数据

  13. int main()
  14. {
  15.   uint8 remote_ip[4]={192,168,1,151};                        // 配置远程IP地址
  16.         uint16 remote_port=6000;                                                                // 配置远程端口
  17.   uint16 local_port=5000;                                                                        // 初始化一个本地端口
  18.   uint16 len=0;

  19.   /***** MCU时钟初始化 *****/                                                          
  20.         Systick_Init(72);       
  21.        
  22.         /***** GPIO、SPI初始化 *****/
  23.         GPIO_Configuration();                       
  24.         WIZ_SPI_Init();
  25.        
  26.         /***** 串口初始化 *****/
  27.         USART1_Init();                
  28.        
  29.         /***** 初始化eeprom *****/
  30.   at24c16_init();
  31.        
  32.         /***** 硬重启W5500 *****/
  33.         Reset_W5500();
  34.        
  35.         /***** W5500的IP信息初始化 *****/
  36.         set_default();                                                                                                                 // 设置默认MAC、IP、GW、SUB、DNS
  37.         set_network();                                                                                                                // 配置初始化IP信息并打印,初始化8个Socket

  38.   printf("UDP Local Port: %d \r\n",local_port);
  39.         printf("UDP Remote IP: %d.%d.%d.%d \r\n",remote_ip[0],remote_ip[1],remote_ip[2],remote_ip[3]);
  40.   printf("UDP Remote Port: %d \r\n",remote_port);
  41.         printf("W5500 Init Complete!\r\n");
  42.   printf("Start UDP Test!\r\n");        

  43.         /*Socket状态机,MCU通过读Sn_SR(0)的值进行判断Socket应该处于何种状态
  44.                 Sn_SR状态描述:
  45.                 0x00                SOCK_CLOSED
  46.                 0x13                SOCK_INIT
  47.                 0x14                SOCK_LISTEN
  48.                 0x17                SOCK_ESTABLISHED
  49.                 0x1C                SOCK_CLOSE_WAIT
  50.                 0x22                SOCK_UDP
  51.         */
  52.         while(1)                                                                                                                                                                                                                                // Socket状态机
  53.         {
  54.                 switch(getSn_SR(0))                                                                                                                                                                                // 获取socket0的状态
  55.                 {
  56.                         case SOCK_UDP:                                                                                                                                                                                        // Socket处于初始化完成(打开)状态
  57.                                         Delay_ms(100);
  58.                                         if(getSn_IR(0) & Sn_IR_RECV)
  59.                                         {
  60.                                                 setSn_IR(0, Sn_IR_RECV);                                                                                                                        // Sn_IR的RECV位置1
  61.                                         }
  62.                                         // 数据回环测试程序:数据从远程上位机发给W5500,W5500接收到数据后再回给远程上位机
  63.                                         if((len=getSn_RX_RSR(0))>0)
  64.                                         {
  65.                                                 memset(buffer,0,len+1);
  66.                                                 recvfrom(0,buffer, len, remote_ip,&remote_port);                        // W5500接收来自远程上位机的数据,并通过SPI发送给MCU
  67.                                                 printf("%s\r\n",buffer);                                                                                                                        // 串口打印接收到的数据
  68.                                                 sendto(0,buffer,len, remote_ip, remote_port);                                  // 接收到数据后再回给远程上位机,完成数据回环
  69.                                         }
  70.                         break;
  71.                         case SOCK_CLOSED:                                                                                                                                                                                // Socket处于关闭状态
  72.                                         socket(0,Sn_MR_UDP,local_port,0);                                                                                                // 打开Socket0,并配置为UDP模式,打开一个本地端口
  73.                         break;
  74.                 }
  75.         }
  76. }
复制代码

所有资料51hei提供下载:
4.UDP.rar (313.89 KB, 下载次数: 148)
回复

使用道具 举报

ID:446826 发表于 2018-12-15 16:16 | 显示全部楼层
很好 可以学习一下
回复

使用道具 举报

ID:438877 发表于 2020-4-7 17:56 | 显示全部楼层
正好有需要,谢谢了
回复

使用道具 举报

ID:641221 发表于 2020-5-8 14:36 | 显示全部楼层
正好能用到   谢谢你
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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