|
W5500這個(gè)芯片不用多說,大家都知道的,神一樣的存在,下面貼出W5500的UDP通信方式代碼例程,供大家參考,希望大家批評(píng)指正,謝謝
0.png (8.59 KB, 下載次數(shù): 45)
下載附件
2018-9-20 16:29 上傳
單片機(jī)源程序如下:
- #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發(fā)送緩存大小
- extern uint8 rxsize[]; // 引用外部變量,聲明Socket接收緩存大小
- uint8 buffer[2048]; // 定義一個(gè)2KB的數(shù)組,用來存放Socket的通信數(shù)據(jù)
- int main()
- {
- uint8 remote_ip[4]={192,168,1,151}; // 配置遠(yuǎn)程IP地址
- uint16 remote_port=6000; // 配置遠(yuǎn)程端口
- uint16 local_port=5000; // 初始化一個(gè)本地端口
- uint16 len=0;
- /***** MCU時(shí)鐘初始化 *****/
- Systick_Init(72);
-
- /***** GPIO、SPI初始化 *****/
- GPIO_Configuration();
- WIZ_SPI_Init();
-
- /***** 串口初始化 *****/
- USART1_Init();
-
- /***** 初始化eeprom *****/
- at24c16_init();
-
- /***** 硬重啟W5500 *****/
- Reset_W5500();
-
- /***** W5500的IP信息初始化 *****/
- set_default(); // 設(shè)置默認(rèn)MAC、IP、GW、SUB、DNS
- set_network(); // 配置初始化IP信息并打印,初始化8個(gè)Socket
- printf("UDP Local Port: %d \r\n",local_port);
- printf("UDP Remote IP: %d.%d.%d.%d \r\n",remote_ip[0],remote_ip[1],remote_ip[2],remote_ip[3]);
- printf("UDP Remote Port: %d \r\n",remote_port);
- printf("W5500 Init Complete!\r\n");
- printf("Start UDP Test!\r\n");
- /*Socket狀態(tài)機(jī),MCU通過讀Sn_SR(0)的值進(jìn)行判斷Socket應(yīng)該處于何種狀態(tài)
- Sn_SR狀態(tài)描述:
- 0x00 SOCK_CLOSED
- 0x13 SOCK_INIT
- 0x14 SOCK_LISTEN
- 0x17 SOCK_ESTABLISHED
- 0x1C SOCK_CLOSE_WAIT
- 0x22 SOCK_UDP
- */
- while(1) // Socket狀態(tài)機(jī)
- {
- switch(getSn_SR(0)) // 獲取socket0的狀態(tài)
- {
- case SOCK_UDP: // Socket處于初始化完成(打開)狀態(tài)
- Delay_ms(100);
- if(getSn_IR(0) & Sn_IR_RECV)
- {
- setSn_IR(0, Sn_IR_RECV); // Sn_IR的RECV位置1
- }
- // 數(shù)據(jù)回環(huán)測(cè)試程序:數(shù)據(jù)從遠(yuǎn)程上位機(jī)發(fā)給W5500,W5500接收到數(shù)據(jù)后再回給遠(yuǎn)程上位機(jī)
- if((len=getSn_RX_RSR(0))>0)
- {
- memset(buffer,0,len+1);
- recvfrom(0,buffer, len, remote_ip,&remote_port); // W5500接收來自遠(yuǎn)程上位機(jī)的數(shù)據(jù),并通過SPI發(fā)送給MCU
- printf("%s\r\n",buffer); // 串口打印接收到的數(shù)據(jù)
- sendto(0,buffer,len, remote_ip, remote_port); // 接收到數(shù)據(jù)后再回給遠(yuǎn)程上位機(jī),完成數(shù)據(jù)回環(huán)
- }
- break;
- case SOCK_CLOSED: // Socket處于關(guān)閉狀態(tài)
- socket(0,Sn_MR_UDP,local_port,0); // 打開Socket0,并配置為UDP模式,打開一個(gè)本地端口
- break;
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
4.UDP.rar
(313.89 KB, 下載次數(shù): 151)
2018-9-20 10:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|