久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6956|回復: 2
打印 上一主題 下一主題
收起左側

stm32+w5500建立TCP連接 源碼

[復制鏈接]
跳轉到指定樓層
樓主
  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(void)
  14. {
  15.   uint8 server_ip[4]={192,168,1,151};                        // 配置遠程服務器IP地址
  16.         uint16 server_port=5000;                                                                // 配置遠程服務器端口
  17.   uint16 local_port=6000;                                                                        // 初始化一個本地端口
  18.   uint16 len=0;
  19.         
  20.   /***** MCU時鐘初始化 *****/                                                         
  21.         Systick_Init(72);        
  22.         
  23.         /***** 中斷控制器配置 *****/
  24.         NVIC_Configuration();
  25.         
  26.         /***** GPIO、SPI初始化 *****/
  27.         GPIO_Configuration();                        
  28.         WIZ_SPI_Init();
  29.         
  30.         /***** 串口初始化 *****/
  31.         USART1_Init();                 
  32.         
  33.         /***** 初始化eeprom *****/
  34.   at24c16_init();
  35.         
  36.         /***** 硬重啟W5500 *****/
  37.         Reset_W5500();
  38.         
  39.         /***** W5500的IP信息初始化 *****/
  40.         set_default();                                                                                                                 // 設置默認MAC、IP、GW、SUB、DNS
  41.         set_network();                                                                                                                // 配置初始化IP信息并打印,初始化8個Socket
  42.         
  43.         /***** 打開W5500的Keepalive功能 *****/
  44.         setkeepalive(0);
  45.         
  46.         printf("TCP Server IP: %d.%d.%d.%d \r\n",server_ip[0],server_ip[1],server_ip[2],server_ip[3]);
  47.   printf("TCP Server Port: %d \r\n",server_port);        
  48.         printf("W5500 Init Complete!\r\n");
  49.   printf("Start TCP Client Test!\r\n");
  50.   
  51.         /*Socket狀態機,MCU通過讀Sn_SR(0)的值進行判斷Socket應該處于何種狀態
  52.                 Sn_SR狀態描述:
  53.                 0x00                SOCK_CLOSED
  54.                 0x13                SOCK_INIT
  55.                 0x14                SOCK_LISTEN
  56.                 0x17                SOCK_ESTABLISHED
  57.                 0x1C                SOCK_CLOSE_WAIT
  58.                 0x22                SOCK_UDP
  59.         */
  60.         while(1)                                                                                                                                                                // Socket狀態機
  61.         {        
  62.                 switch(getSn_SR(0))                                                                                                                // 獲取socket0的狀態
  63.                 {
  64.                         case SOCK_INIT:                                                                                                                        // Socket處于初始化完成(打開)狀態
  65.                                         connect(0, server_ip,server_port);                        // 配置Sn_CR為CONNECT,并向TCP服務器發出連接請求
  66.                         break;
  67.                         case SOCK_ESTABLISHED:                                                                                        // Socket處于連接建立狀態
  68.                                         if(getSn_IR(0) & Sn_IR_CON)                                          
  69.                                         {
  70.                                                 setSn_IR(0, Sn_IR_CON);                                                                // Sn_IR的CON位置1,通知W5500連接已建立
  71.                                         }
  72.                                         // 數據回環測試程序:數據從上位機服務器發給W5500,W5500接收到數據后再回給服務器
  73.                                         len=getSn_RX_RSR(0);                                                                                // len=Socket0接收緩存中已接收和保存的數據大小
  74.                                         if(len>0)
  75.                                         {
  76.                                                 recv(0,buffer,len);                                                                                // W5500接收來自服務器的數據,并通過SPI發送給MCU
  77.                                                 printf("%s\r\n",buffer);                                                        // 串口打印接收到的數據
  78.                                                 send(0,buffer,len);                                                                                // 接收到數據后再回給服務器,完成數據回環
  79.                                         }
  80.                                         // W5500從串口發數據給客戶端程序,數據需以回車結束
  81.                                         if(USART_RX_STA & 0x8000)                                                                // 判斷串口數據是否接收完成
  82.                                         {                                          
  83.                                                 len=USART_RX_STA & 0x3fff;                                                // 獲取串口接收到數據的長度
  84.                                                 send(0,USART_RX_BUF,len);                                                        // W5500向客戶端發送數據
  85.                                                 USART_RX_STA=0;                                                                                                // 串口接收狀態標志位清0
  86.                                                 memset(USART_RX_BUF,0,len+1);                                        // 串口接收緩存清0
  87.                                         }
  88.                         break;
  89.                         case SOCK_CLOSE_WAIT:                                                                                                // Socket處于等待關閉狀態
  90.                                         close(0);                                                                                                                                // 關閉Socket0
  91.                         break;
  92.                         case SOCK_CLOSED:                                                                                                                // Socket處于關閉狀態
  93.                                         socket(0,Sn_MR_TCP,local_port,Sn_MR_ND);                // 打開Socket0,并配置為TCP無延時模式,打開一個本地端口
  94.                         break;
  95.                 }
  96.         }
  97. }
復制代碼


0.png (5.69 KB, 下載次數: 54)

0.png

TCPC.zip

337.23 KB, 下載次數: 185, 下載積分: 黑幣 -5

w5500,TCP建立程序

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:689565 發表于 2020-5-2 16:01 | 只看該作者
學習了,在此基礎上來實現UDP通信
回復

使用道具 舉報

板凳
ID:432004 發表于 2020-8-1 13:46 | 只看該作者
和32的接線 不說下嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 古装三级在线播放 | 日韩精品999| 欧美日韩1区2区 | 91精品久久久久久久久 | 午夜精品一区二区三区在线观看 | 黄色小视频大全 | 亚洲一区二区三区高清 | 日韩一区二区av | 欧美久久国产精品 | 精区3d动漫一品二品精区 | 日韩欧美三级电影 | av一二三四 | 亚洲视屏| 精品久久久久久久久久久 | 91九色在线观看 | 成人久久网 | 国产亚洲黄色片 | 国产你懂的在线观看 | 国产日韩欧美电影 | 欧区一欧区二欧区三免费 | 亚洲欧美一区二区三区国产精品 | 国产高清精品一区 | 欧美日韩国产综合在线 | 羞羞网站在线观看 | 成人欧美一区二区 | 亚洲视频欧美视频 | 久久av一区二区三区 | www.久久艹| 欧美综合精品 | 日韩久久久久久久久久久 | 日韩欧美中文在线 | 91精品久久久久久久久中文字幕 | 欧美日韩一区二区三区四区 | 日韩亚洲一区二区 | 在线视频91 | 精品久久国产 | 国产精品99久久免费观看 | 欧美h视频 | 天天插天天干 | 欧美在线a| 国产精品欧美一区二区三区 |