0.移植说明,w5500移植文件
Ethernet和Internet里面包含的文件就是以太网五层模型中的应用层
应用层协议:HTTP,FTP,SMTP,TFTP,Telent, MQTT 支撑协议:DNS,SNMP
HTTP使用TCP而不是UDP.
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
0-1,Ethernet可以认为是对W5500芯片硬件的配置,全部添加
0-2 ,Internet就是按照需求自由添加了,全部添加也可以。
比如我要通过域名www.baidu.com或者www.sina.com.cn直接访问广域网,
1,需要连接可以上网的路由器(不能是PC,PC没有DHCP功能),则应该添加DHCP.H
2,作为域名解析,需要添加DNS.H
3,如果是W5500作为服务器HTTP,需要添加httpServer.h
下面的重点就是W5500_conf.h,W5500.h和socket.h这三个头文件中的函数,其余的都是在这上面的封装
1,#include "W5500_conf.h",最基础的读写函数封装
/*W5500SPI相关函数*/
void IINCHIP_WRITE( uint32 addrbsb, uint8 data); /*写入一个8位数据到W5500*/
uint8 IINCHIP_READ(uint32 addrbsb); /*从W5500读出一个8位数据*/
uint16 wiz_write_buf(uint32 addrbsb,uint8* buf,uint16 len); /*向W5500写入len字节数据*/
uint16 wiz_read_buf(uint32 addrbsb, uint8* buf,uint16 len); /*从W5500读出len字节数据*/
/*W5500基本配置相关函数*/
void reset_w5500(void); /*硬复位W5500*/
void set_w5500_mac(void); /*配置W5500的MAC地址*/
void set_w5500_ip(void); /*配置W5500的IP地址*/
/*需要用定时的的应用函数*/
void dhcp_timer_init(void); /*dhcp用到的定时器初始化*/
void ntp_timer_init(void); /*npt用到的定时器初始化*/
send()->send_data_processing->IINCHIP_WRITE(),wiz_write_buf()
2,#include "W5500.h" ,各种状态的检查函数,本机IP配置函数
/*********************************************************
* iinchip access function
*********************************************************/
void iinchip_init(void); // reset iinchip
void socket_buf_init(uint8 * tx_size, uint8 * rx_size); // setting tx/rx buf size
uint8 getISR(uint8 s);
void putISR(uint8 s, uint8 val);
uint16 getIINCHIP_RxMAX(uint8 s); //获取socket接收最大值
uint16 getIINCHIP_TxMAX(uint8 s);
void setMR(uint8 val);
void setRTR(uint16 timeout); // set retry duration for data transmission, connection, closing ...
void setRCR(uint8 retry); // set retry count (above the value, assert timeout interrupt)
void clearIR(uint8 mask); // clear interrupt
uint8 getIR( void );
void setSn_MSS(SOCKET s, uint16 Sn_MSSR); // set maximum segment size
uint8 getSn_IR(SOCKET s); // get socket interrupt status 用的非常多
uint8 getSn_SR(SOCKET s); // get socket status
uint16 getSn_TX_FSR(SOCKET s); // get socket TX free buf size
uint16 getSn_RX_RSR(SOCKET s); // get socket RX recv buf size
//uint8 getSn_SR(SOCKET s);
void setSn_TTL(SOCKET s, uint8 ttl);
void send_data_processing(SOCKET s, uint8 *wizdata, uint16 len);//数据的发送
void recv_data_processing(SOCKET s, uint8 *wizdata, uint16 len);
void setGAR(uint8 * addr); // set gateway address
void setSUBR(uint8 * addr); // set subnet mask address
void setSHAR(uint8 * addr); // set local MAC address
void setSIPR(uint8 * addr); // set local IP address
void getGAR(uint8 * addr);
void getSUBR(uint8 * addr);
void getSHAR(uint8 * addr);
void getSIPR(uint8 * addr);
void setSn_IR(uint8 s, uint8 val);
void Reset_W5500(void);
void PHY_check(void); //网口连接检查
extern uint8 rxsize[];
3,#include extern uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag); // Opens a socket(TCP or UDP or IP_RAW mode) extern void close(SOCKET s); // Close socket extern uint8 connect(SOCKET s, uint8 * addr, uint16 port); // Establish TCP connection (Active connection) extern void disconnect(SOCKET s); // disconnect the connection extern uint8 listen(SOCKET s); // Establish TCP connection (Passive connection) extern uint16 send(SOCKET s, const uint8 * buf, uint16 len); // Send data (TCP) //send函数包含了send_data_processing()函数 extern uint16 recv(SOCKET s, uint8 * buf, uint16 len); // Receive data (TCP) extern uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port); // Send data (UDP/IP RAW) extern uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port); // Receive data (UDP/IP RAW) 4,#include uint8 check_DHCP_state(SOCKET s); // Check the DHCP state void do_dhcp(void); 5, #include "http_server.h" void unescape_http_url(char * url); /* convert escape character to ascii */ void parse_http_request(st_http_request *, uint8 *);/* parse request from peer */ void find_http_uri_type(uint8 *, char *); /* find MIME type of a file */ void make_http_response_head(unsigned char *, char, u_long); /* make response header */ unsigned char* get_http_param_value(char* uri, char* param_name); /* get the user-specific parameter value */ 6,#include "http_client.h" void do_http_client(void);//TCP Clinet回环演示函数 7,#include "httputil.h" void proc_http(SOCKET s, u_char * buf); void do_https(void); void cgi_ipconfig(st_http_request *http_request); //void trimp(uint8* src, uint8* dst, uint16 len); uint16 make_msg_response(uint8* buf,int8* msg); void make_cgi_response(uint16 a,int8* b,int8* c); void make_pwd_response(int8 isRight,uint16 delay,int8* cgi_response_content, int8 isTimeout); 8, #include "ntp.h" void get_seconds_from_ntp_server(uint8* buf,uint16 idx); void ntp_client_init(void); void do_ntp_client(void); tstamp change_datetime_to_seconds(void); void calc_date_time(tstamp seconds); 9,#include "dns.h" extern uint8 dns_get_ip[4]; extern uint8 domain_name[]; int dns_makequery(uint16 op, uint8 * name, uint8 * buf, uint16 len); int parse_name(uint8 * msg, uint8 * compressed, /*char * buf,*/ uint16 len); uint8 * dns_question(uint8 * msg, uint8 * cp); uint8 * dns_answer(uint8 * msg, uint8 * cp); uint8 parseMSG(struct dhdr * pdhdr, uint8 * pbuf); uint8 dns_query(uint8 s, uint8 * name); void do_dns(void); 10,#include "smtp.h" void send_mail(void); void mail_message(void); void base64encode(char *s, char *r); void str_insert(char *s1,char *s2,int pos); void do_smtp(void);
上一篇:【STM32+W5500】20,W5500作为Client客户端
下一篇:【STM32+W5500】22,W5500连接外部服务器失败,如ONENET
推荐阅读最新更新时间:2024-11-02 16:30
设计资源 培训 开发板 精华推荐
- UMFT311GP, FT311 GPIO Board 是配合FT311D开发模块使用的屏蔽板
- stlink_v2.1 (带swo接口)(已经测试)
- LTC4162EUFD-SST 32V 至 24V、3.2A 充电器的典型应用,具有 PowerPath 和 2A 输入限制
- IRU3034 Pentium Core 电源应用的典型应用(IRU3034 和 IRU3033 双布局)低成本 4 位 VID
- SESD1004Q4UG-0020-090,USB 3.1 Type C 使用 SESD1004Q4UG-0020-090 ESD 抑制二极管阵列的典型应用 20kV 汽车 10 引脚 DFN
- KeyBoard_V1
- 具有软启动功能的 LT3971-3.3、5V、2MHz 降压转换器的典型应用电路
- ADA2200-EVALZ、ADA2200 同步解调器的调制和演示评估板
- AD8548ARZ-RL 4 mA至20 mA电流环路变送器的典型应用电路
- LT3091MPT7 低噪声单电感正负转换器的典型应用