|
- #include "usart.h"
- #include "device.h"
- #include "spi2.h"
- #include "ult.h"
- #include "socket.h"
- #include "w5500.h"
- #include "24c16.h"
- #include "md5.h"
- #include "string.h"
- extern uint8 txsize[]; // 引用外部變量,聲明Socket發送緩存大小
- extern uint8 rxsize[]; // 引用外部變量,聲明Socket接收緩存大小
- uint8 buffer[2048]; // 定義一個2KB的數組,用來存放Socket的通信數據
- int main(void)
- {
- uint8 server_ip[4]={192,168,1,151}; // 配置遠程服務器IP地址
- uint16 server_port=5000; // 配置遠程服務器端口
- uint16 local_port=6000; // 初始化一個本地端口
- uint16 len=0;
-
- /***** MCU時鐘初始化 *****/
- Systick_Init(72);
-
- /***** 中斷控制器配置 *****/
- NVIC_Configuration();
-
- /***** GPIO、SPI初始化 *****/
- GPIO_Configuration();
- WIZ_SPI_Init();
-
- /***** 串口初始化 *****/
- USART1_Init();
-
- /***** 初始化eeprom *****/
- at24c16_init();
-
- /***** 硬重啟W5500 *****/
- Reset_W5500();
-
- /***** W5500的IP信息初始化 *****/
- set_default(); // 設置默認MAC、IP、GW、SUB、DNS
- set_network(); // 配置初始化IP信息并打印,初始化8個Socket
-
- /***** 打開W5500的Keepalive功能 *****/
- setkeepalive(0);
-
- printf("TCP Server IP: %d.%d.%d.%d \r\n",server_ip[0],server_ip[1],server_ip[2],server_ip[3]);
- printf("TCP Server Port: %d \r\n",server_port);
- printf("W5500 Init Complete!\r\n");
- printf("Start TCP Client Test!\r\n");
-
- /*Socket狀態機,MCU通過讀Sn_SR(0)的值進行判斷Socket應該處于何種狀態
- Sn_SR狀態描述:
- 0x00 SOCK_CLOSED
- 0x13 SOCK_INIT
- 0x14 SOCK_LISTEN
- 0x17 SOCK_ESTABLISHED
- 0x1C SOCK_CLOSE_WAIT
- 0x22 SOCK_UDP
- */
- while(1) // Socket狀態機
- {
- switch(getSn_SR(0)) // 獲取socket0的狀態
- {
- case SOCK_INIT: // Socket處于初始化完成(打開)狀態
- connect(0, server_ip,server_port); // 配置Sn_CR為CONNECT,并向TCP服務器發出連接請求
- break;
- case SOCK_ESTABLISHED: // Socket處于連接建立狀態
- if(getSn_IR(0) & Sn_IR_CON)
- {
- setSn_IR(0, Sn_IR_CON); // Sn_IR的CON位置1,通知W5500連接已建立
- }
- // 數據回環測試程序:數據從上位機服務器發給W5500,W5500接收到數據后再回給服務器
- len=getSn_RX_RSR(0); // len=Socket0接收緩存中已接收和保存的數據大小
- if(len>0)
- {
- recv(0,buffer,len); // W5500接收來自服務器的數據,并通過SPI發送給MCU
- printf("%s\r\n",buffer); // 串口打印接收到的數據
- send(0,buffer,len); // 接收到數據后再回給服務器,完成數據回環
- }
- // W5500從串口發數據給客戶端程序,數據需以回車結束
- if(USART_RX_STA & 0x8000) // 判斷串口數據是否接收完成
- {
- len=USART_RX_STA & 0x3fff; // 獲取串口接收到數據的長度
- send(0,USART_RX_BUF,len); // W5500向客戶端發送數據
- USART_RX_STA=0; // 串口接收狀態標志位清0
- memset(USART_RX_BUF,0,len+1); // 串口接收緩存清0
- }
- break;
- case SOCK_CLOSE_WAIT: // Socket處于等待關閉狀態
- close(0); // 關閉Socket0
- break;
- case SOCK_CLOSED: // Socket處于關閉狀態
- socket(0,Sn_MR_TCP,local_port,Sn_MR_ND); // 打開Socket0,并配置為TCP無延時模式,打開一個本地端口
- break;
- }
- }
- }
復制代碼
|
-
0.png
(5.69 KB, 下載次數: 54)
下載附件
2019-2-13 00:33 上傳
-
-
TCPC.zip
2019-2-12 14:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
337.23 KB, 下載次數: 185, 下載積分: 黑幣 -5
w5500,TCP建立程序
評分
-
查看全部評分
|