datasheet

【STM32+W5500】 21,移植说明,以太网关键函数,

2019-08-14来源: eefocus关键字:STM32  W5500  移植说明  以太网

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_seco

[1] [2]

关键字:STM32  W5500  移植说明  以太网

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic471058.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:【STM32+W5500】20,W5500作为Client客户端
下一篇:【STM32+W5500】22,W5500连接外部服务器失败,如ONENET

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于stm32f103的矩阵键盘

我现在的任务是做一个8*8的矩阵键盘,制PCB版之前,我用电路板搭了一个3*3的矩阵键盘来模拟一下,设置PA0、PA1、PA2为PP输出,设置P3、P4、P5下拉输入。大多数的芯片内部上拉或下拉电阻都是弱上拉或弱下拉,stm32f103的内部也一样,内部上拉或下拉的电阻阻值约为40K,这样可以方便外部调整,但是,在作为一些通讯引脚时,可能会出现上电时数据不稳定的问题,如I2C通讯,解决的办法是在外部在加上一个较强的上拉或下拉即可。具体程序如下:#include <stm32f10x.h>#include "usart.h"void KeyBoard_Init(void)//按键初始化
发表于 2019-08-16

基于 STM32F407 使用 4*4 矩阵键盘

写在前面:这是我第一次开始写博客,可能写的不是很好,也请大家谅解。本人现在大三,以前在学习过程中遇到过各种各样的问题,关于51单片机,STM32单片机,最近在学习ARM11的Tiny6410以后还会更新一些C/C++/Qt等等方面的东西关于写博客这件事,其实 一直想写博客记录下来,但是因为某些原因(懒),so , 没有写。现在开始,以后遇到单片机上或者编程上遇到的问题,并且自己很好地解决了,我就会在这里记录下来。希望通过博客记录我的学习历程并希望我所解决问题的过程能够帮到需要的人,一起加油吧!!!我是在STM32F407开发板上使用的4*4 矩阵键盘下面是我所使用的开发板1、首先介绍一下4*4矩阵键盘扫描原理 
发表于 2019-08-16
基于 STM32F407 使用 4*4 矩阵键盘

基于STM32F407最小系统板三种矩阵键盘实现方法

0xe0:return 0xe7; case 0xd0:return 0xd7; case 0xb0:return 0xb7; case 0x70:return 0x77; } } if(mode) key =1; if((GPIO_ReadInputData(GPIOA)&0xF0)==0xF0) key =1; return 0;}比较:三种方案其实,第二种方案比较通用,第一种比较简单易懂,前两种都比较好,因为按键按下不松开,并不会影响CPU一直停留在while()循环里啥都不干。最后的实验效果:之前用的板子是STM32F107,数据手册中的GPIO口一些输出输入方式的配置与STM32
发表于 2019-08-16
基于STM32F407最小系统板三种矩阵键盘实现方法

STM32笔记(二)(寄存器)——矩阵键盘

      矩阵键盘是我第一个需要动手焊接东西的实验,是3*3的键盘,焊了一个下午。因为是第一次焊东西,有多处不足,但最后也勉强能用。键盘的电路是组长设计的,希望下一次我能自己独立设计电路。键盘外观正面背面  外观略显粗糙。。。。主要代码       矩阵键盘最主要的一部分代码就是按键扫描部分,通过一个扫描函数对高低电平进行判断,从而确定按键的位置。用过串口输出案件编号1~9。key.c代码void KEY_Init1(void){ RCC->APB2ENR|=1<<3;      JTAG_S
发表于 2019-08-16
STM32笔记(二)(寄存器)——矩阵键盘

STM32 学习笔记 一.矩阵键盘

刚刚接触STM32,感觉和arduino完全是两个难度,如果说arduino是乐高积木,那我感觉STM32就跟盖楼一样,哈哈,是真的难,真的极具挑战性,可能是我刚开始学觉得难,到后面熟练了应该会好一些,言归正传,就讲一讲我们学长给我们下的任务矩阵键盘。学长学姐们做的是九键的矩阵键盘,我们做的是四键的,难度其实相差不大,换汤不换药的类型,原理就是一二号线通高电平,三四号线低电平,然后交换,让一二号低电平,三四号高电平这样就可以确定是哪个按键被按下。OK上代码key.c函数#include "key.h"#include "delay.h"#include "usart.h"
发表于 2019-08-16
STM32 学习笔记 一.矩阵键盘

STM32 矩阵键盘通过串口输出

STM32F103C8T6 4*4矩阵键盘 通过串口输出,可以用来写密码锁程序的思路如下:1、首先需要配置的是矩阵键盘:配置两个函数:  KEY44_Init(矩阵键盘初始化)和key44_Scan(扫描并获取值)   。2、其次,设置串口(本文设置为STM32F103C8T6的串口三): 我们需要对USART进行初始化设置,详细请见下文。3、然后就开始写我们的主函数:主函数比较简单。因为程序已经分装了。4、最后我们要实现按下一个键,串口打出一个字符(按下1键,打出1)——————————————————————————————————————————————————-下边为程序:所用芯片
发表于 2019-08-16

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved