找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5945|回復(fù): 9
收起左側(cè)

W5500資料與單片機(jī)源碼(UDP,服務(wù)端,客戶端模式)

  [復(fù)制鏈接]
ID:332794 發(fā)表于 2018-5-18 10:57 | 顯示全部樓層 |閱讀模式
W5500網(wǎng)絡(luò)模塊相關(guān)資料及51單片機(jī)和STM32應(yīng)用程序的資料,STM32的程序資料太大無(wú)法添加到附件,如有需要可聯(lián)系題主。
0.jpg

UDP模式例程:

* 描述    :W5500的端口0工作在客戶端模式,主動(dòng)與《TCP&UDP測(cè)試工具》上創(chuàng)建的服務(wù)端連接,
*             并且定時(shí)給服務(wù)端發(fā)送字符串"\r\nWelcome To YiXinElec!\r\n",同時(shí)將接
*             收到服務(wù)端發(fā)來(lái)的數(shù)據(jù)回發(fā)給服務(wù)端。
* 實(shí)驗(yàn)平臺(tái):用戶51單片機(jī)開(kāi)發(fā)板 + YIXIN_W5500以太網(wǎng)(TCP/IP)模塊
* 硬件連接:  P3^2 -> W5500_RST   
*             P3^3 -> W5500_INT(本例程沒(méi)有用到中斷,此引腳可以不接)     
*             P3^6 -> W5500_SCS      
*             P3^7 -> W5500_SCK   
*             P3^4 -> W5500_MISO   
*             P3^5 -> W5500_MOSI  

---------------------------------------------------------------------

* 描述    :W5500的端口0工作在UDP模式,端口通信不需要建立連接即可接收其它UDP模式端口發(fā)來(lái)的數(shù)據(jù),
*             數(shù)據(jù)的前4個(gè)字節(jié)為對(duì)方端口IP地址,第5、6個(gè)字節(jié)為端口號(hào),獲得對(duì)方IP和端口號(hào)后W5500端口0
*             將定時(shí)給對(duì)應(yīng)端口發(fā)送字符串"\r\nWelcome To YiXinElec!\r\n",同時(shí)將接收
*             到的數(shù)據(jù)回發(fā)給對(duì)應(yīng)端口。
* 實(shí)驗(yàn)平臺(tái):用戶51單片機(jī)開(kāi)發(fā)板 + YIXIN_W5500以太網(wǎng)(TCP/IP)模塊
* 硬件連接:  P3^2 -> W5500_RST   
*             P3^3 -> W5500_INT(本例程沒(méi)有用到中斷,此引腳可以不接)     
*             P3^6 -> W5500_SCS      
*             P3^7 -> W5500_SCK   
*             P3^4 -> W5500_MISO   
*             P3^5 -> W5500_MOSI  


服務(wù)端模式單片機(jī)源程序如下:
  1. /***************************************************************************************
  2. * 描述    :W5500的端口0工作在服務(wù)端模式:等待《TCP&UDP測(cè)試工具》上創(chuàng)建的客戶端主動(dòng)與服務(wù)端連接,
  3. *                         連接成功后,服務(wù)端定時(shí)給客戶端發(fā)送字符串"\r\nWelcome To YiXinElec!\r\n",
  4. *                         同時(shí)將接收到客戶端發(fā)來(lái)的數(shù)據(jù)回發(fā)給客戶端。
  5. * 實(shí)驗(yàn)平臺(tái):用戶51單片機(jī)開(kāi)發(fā)板 + YIXIN_W5500以太網(wǎng)(TCP/IP)模塊
  6. * 硬件連接:  P3^2 -> W5500_RST   
  7. *             P3^3 -> W5500_INT(本例程沒(méi)有用到中斷,此引腳可以不接)     
  8. *             P3^6 -> W5500_SCS      
  9. *             P3^7 -> W5500_SCK   
  10. *             P3^4 -> W5500_MISO   
  11. *             P3^5 -> W5500_MOSI   

  12. * 淘寶    :http://yixindianzikeji.taobao.com/
  13. ***************************************************************************************/

  14. /*例程網(wǎng)絡(luò)參數(shù)*/
  15. //網(wǎng)關(guān):192.168.1.1
  16. //掩碼:        255.255.255.0
  17. //物理地址:0C 29 AB 7C 00 01
  18. //本機(jī)IP地址:192.168.1.199
  19. //端口0的端口號(hào):5000
  20. //端口0的目的IP地址:192.168.1.190
  21. //端口0的目的端口號(hào):6000

  22. #include <reg51.h>
  23. #include "W5500.h"                               
  24. #include <string.h>

  25. void Delay(unsigned int d);                        //延時(shí)函數(shù)(ms)

  26. /*******************************************************************************
  27. * 函數(shù)名  : W5500_Initialization
  28. * 描述    : W5500初始貨配置
  29. * 輸入    : 無(wú)
  30. * 輸出    : 無(wú)
  31. * 返回值  : 無(wú)
  32. * 說(shuō)明    : 無(wú)
  33. *******************************************************************************/
  34. void W5500_Initialization(void)
  35. {
  36.         W5500_Init();                //初始化W5500寄存器函數(shù)
  37.         Detect_Gateway();        //檢查網(wǎng)關(guān)服務(wù)器
  38.         Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0
  39. }

  40. /*******************************************************************************
  41. * 函數(shù)名  : Load_Net_Parameters
  42. * 描述    : 裝載網(wǎng)絡(luò)參數(shù)
  43. * 輸入    : 無(wú)
  44. * 輸出    : 無(wú)
  45. * 返回值  : 無(wú)
  46. * 說(shuō)明    : 網(wǎng)關(guān)、掩碼、物理地址、本機(jī)IP地址、端口號(hào)、目的IP地址、目的端口號(hào)、端口工作模式
  47. *******************************************************************************/
  48. void Load_Net_Parameters(void)
  49. {
  50.         Gateway_IP[0] = 192;//加載網(wǎng)關(guān)參數(shù)
  51.         Gateway_IP[1] = 168;
  52.         Gateway_IP[2] = 1;
  53.         Gateway_IP[3] = 1;

  54.         Sub_Mask[0]=255;//加載子網(wǎng)掩碼
  55.         Sub_Mask[1]=255;
  56.         Sub_Mask[2]=255;
  57.         Sub_Mask[3]=0;

  58.         Phy_Addr[0]=0x0c;//加載物理地址
  59.         Phy_Addr[1]=0x29;
  60.         Phy_Addr[2]=0xab;
  61.         Phy_Addr[3]=0x7c;
  62.         Phy_Addr[4]=0x00;
  63.         Phy_Addr[5]=0x01;

  64.         IP_Addr[0]=192;//加載本機(jī)IP地址
  65.         IP_Addr[1]=168;
  66.         IP_Addr[2]=1;
  67.         IP_Addr[3]=199;

  68.         S0_Port[0] = 0x13;//加載端口0的端口號(hào)5000
  69.         S0_Port[1] = 0x88;

  70. //        S0_DIP[0]=192;//加載端口0的目的IP地址
  71. //        S0_DIP[1]=168;
  72. //        S0_DIP[2]=1;
  73. //        S0_DIP[3]=190;
  74. //       
  75. //        S0_DPort[0] = 0x17;//加載端口0的目的端口號(hào)6000
  76. //        S0_DPort[1] = 0x70;

  77.         S0_Mode=TCP_SERVER;//加載端口0的工作模式,TCP服務(wù)端模式
  78. }

  79. /*******************************************************************************
  80. * 函數(shù)名  : W5500_Socket_Set
  81. * 描述    : W5500端口初始化配置
  82. * 輸入    : 無(wú)
  83. * 輸出    : 無(wú)
  84. * 返回值  : 無(wú)
  85. * 說(shuō)明    : 分別設(shè)置4個(gè)端口,根據(jù)端口工作模式,將端口置于TCP服務(wù)器、TCP客戶端或UDP模式.
  86. *                        從端口狀態(tài)字節(jié)Socket_State可以判斷端口的工作情況
  87. *******************************************************************************/
  88. void W5500_Socket_Set(void)
  89. {
  90.         if(S0_State==0)//端口0初始化配置
  91.         {
  92.                 if(S0_Mode==TCP_SERVER)//TCP服務(wù)器模式
  93.                 {
  94.                         if(Socket_Listen(0)==TRUE)
  95.                                 S0_State=S_INIT;
  96.                         else
  97.                                 S0_State=0;
  98.                 }
  99.                 else if(S0_Mode==TCP_CLIENT)//TCP客戶端模式
  100.                 {
  101.                         if(Socket_Connect(0)==TRUE)
  102.                                 S0_State=S_INIT;
  103.                         else
  104.                                 S0_State=0;
  105.                 }
  106.                 else//UDP模式
  107.                 {
  108.                         if(Socket_UDP(0)==TRUE)
  109.                                 S0_State=S_INIT|S_CONN;
  110.                         else
  111.                                 S0_State=0;
  112.                 }
  113.         }
  114. }

  115. /*******************************************************************************
  116. * 函數(shù)名  : Process_Socket_Data
  117. * 描述    : W5500接收并發(fā)送接收到的數(shù)據(jù)
  118. * 輸入    : s:端口號(hào)
  119. * 輸出    : 無(wú)
  120. * 返回值  : 無(wú)
  121. * 說(shuō)明    : 本過(guò)程先調(diào)用S_rx_process()從W5500的端口接收數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù),
  122. *                        然后將讀取的數(shù)據(jù)從Rx_Buffer拷貝到Temp_Buffer緩沖區(qū)進(jìn)行處理。
  123. *                        處理完畢,將數(shù)據(jù)從Temp_Buffer拷貝到Tx_Buffer緩沖區(qū)。調(diào)用S_tx_process()
  124. *                        發(fā)送數(shù)據(jù)。
  125. *******************************************************************************/
  126. void Process_Socket_Data(SOCKET s)
  127. {
  128.         unsigned short size;
  129.         size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
  130.         memcpy(Tx_Buffer, Rx_Buffer, size);                       
  131.         Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
  132. }

  133. /*******************************************************************************
  134. * 函數(shù)名  : main
  135. * 描述    : 主函數(shù),用戶程序從main函數(shù)開(kāi)始運(yùn)行
  136. * 輸入    : 無(wú)
  137. * 輸出    : 無(wú)
  138. * 返回值  : int:返回值為一個(gè)16位整形數(shù)
  139. * 說(shuō)明    : 無(wú)
  140. *******************************************************************************/
  141. int main(void)
  142. {
  143.         unsigned int W5500_Send_Delay_Counter =0;

  144.         Load_Net_Parameters();                //裝載網(wǎng)絡(luò)參數(shù)       
  145.         W5500_Hardware_Reset();                //硬件復(fù)位W5500
  146.         W5500_Initialization();                //W5500初始貨配置
  147.         while (1)
  148.         {
  149.                 W5500_Socket_Set();//W5500端口初始化配置
  150.                
  151.                 W5500_Interrupt_Process();//W5500中斷處理程序框架

  152.                 if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到數(shù)據(jù)
  153.                 {
  154.                         S0_Data&=~S_RECEIVE;
  155.                         Process_Socket_Data(0);//W5500接收并發(fā)送接收到的數(shù)據(jù)
  156.                 }
  157.                 else if(W5500_Send_Delay_Counter >= 3000)//定時(shí)發(fā)送字符串
  158.                 {
  159.                         if(S0_State == (S_INIT|S_CONN))
  160.                         {
  161.                                 S0_Data&=~S_TRANSMITOK;
  162.                                 memcpy(Tx_Buffer, "\r\nWelcome To YiXinElec!\r\n", 23);       
  163.                                 Write_SOCK_Data_Buffer(0, Tx_Buffer, 23);//指定Socket(0~7)發(fā)送數(shù)據(jù)處理,端口0發(fā)送23字節(jié)數(shù)據(jù)
  164. ……………………

  165. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
0.jpg
0.jpg

51單片機(jī)程序例程.rar

237.25 KB, 下載次數(shù): 115, 下載積分: 黑幣 -5

W5500封裝庫(kù).rar

6.63 KB, 下載次數(shù): 44, 下載積分: 黑幣 -5

W5500開(kāi)發(fā)官網(wǎng)資料.rar

13.02 MB, 下載次數(shù): 98, 下載積分: 黑幣 -5

芯片資料.rar

2.22 MB, 下載次數(shù): 55, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:316613 發(fā)表于 2019-7-25 15:45 | 顯示全部樓層
不錯(cuò) 代碼好閱讀 簡(jiǎn)介,好用 頂一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:20672 發(fā)表于 2019-9-27 08:32 | 顯示全部樓層
謝謝分享~~
回復(fù)

使用道具 舉報(bào)

ID:101832 發(fā)表于 2020-6-6 16:22 | 顯示全部樓層
下載,試試咋樣,學(xué)習(xí)了。謝謝樓主資料
回復(fù)

使用道具 舉報(bào)

ID:101832 發(fā)表于 2020-6-6 16:34 | 顯示全部樓層
好東西,下載試試
回復(fù)

使用道具 舉報(bào)

ID:101832 發(fā)表于 2020-6-6 16:35 | 顯示全部樓層
不錯(cuò) 代碼好閱讀 簡(jiǎn)介,好用 頂一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:900223 發(fā)表于 2021-4-3 10:43 | 顯示全部樓層
stc89c52+w5500模塊 單獨(dú)RST置0 硬件復(fù)位,但是網(wǎng)卡link燈不亮,是不是復(fù)位沒(méi)有成功,可能是什么問(wèn)題?
回復(fù)

使用道具 舉報(bào)

ID:508359 發(fā)表于 2022-2-16 10:19 | 顯示全部樓層
不錯(cuò)的代碼,謝謝了。
回復(fù)

使用道具 舉報(bào)

ID:995755 發(fā)表于 2022-3-8 15:30 | 顯示全部樓層
htiger189 發(fā)表于 2021-4-3 10:43
stc89c52+w5500模塊 單獨(dú)RST置0 硬件復(fù)位,但是網(wǎng)卡link燈不亮,是不是復(fù)位沒(méi)有成功,可能是什么問(wèn)題?

我也遇到相同情況,目前還沒(méi)查出原因
回復(fù)

使用道具 舉報(bào)

ID:932719 發(fā)表于 2023-6-13 11:14 | 顯示全部樓層
請(qǐng)問(wèn)有http的使用方法嘛?或者教程
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表