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

发布者:technology78最新更新时间: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_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  移植说明  以太网 引用地址:【STM32+W5500】 21,移植说明,以太网关键函数,

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

推荐阅读最新更新时间:2024-11-02 16:30

STM32 TIM1 PWM 输出
GPIO_InitTypeDef GPIO_InitStructure2; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //第一步:配置时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1,ENABLE); //第二步,配置goio口
[单片机]
MC9S12NE64型单片机的以太网连接应用介绍
1 引言 随着互联网的出现和以太网的迅速发展,基于以太网的设备控制越来越多,发展也越来越快。目前,以太网(EtImmet)已经广泛地应用于各种计算机网络,通过以太网及TCP/IP协议栈可以使不同的网络设备实现互连、交换数据。 用以太网实现嵌入式系统的网络连接有多种方案。传统的多器件以太网连接方案是通过MCU扩展以太网控制器来实现的,必要时还需要扩展外部RAM和 ROM。虽然这种方案应用起来不是很困难,但所用外部元件数量较多,系统开销较大。稳定性不高。为了解决传统方案的不足,本文讨论以集成以太网MAC层和物理层的16位单片机MC9S12NE64来实现单器件以太网连接。与多器件方案相比.单器件连接方案具有所用外部元件少、系统开
[单片机]
MC9S12NE64型单片机的<font color='red'>以太网</font>连接应用介绍
学习STM32笔记3 GPIO设置
/******************************************************************************* 设置GPIO基本参数 *******************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 GPIO_InitStructure.GPIO_Pin = GPIO_P
[单片机]
基于OpenVera构建以太网MAC芯片验证平台
引言 当芯片的设计规模越来越大,朝向SoC发展时,RTL级功能仿真时间还可以忍受,但门级仿真己经成为不可能继续广泛使用的技术了。对设计进行完备性验证要求有足够的测试向量,随着设计规模的增大,需要的仿真向量也急剧增加。近十年来,芯片的设计规模增大了100倍,仿真向量增加了近10000倍。二者的共同作用使门级仿真所需的时间飞速增长。要找到如此庞大的能够保证验证完备性的仿真向量集也变得不太可能。 另一方面,芯片设计又面临着上市时间的巨大压力,验证的不足直接导致芯片不能通过测试,由此可能造成更大的损失。验证,尤其是功能验证必将影响集成电路的设计和开发进程。因此,缩短验证时间、建立高效的验证平台已成为现代集成电路设计的关键。 基
[应用]
STM32应用案例 基于STM32F103ZE开发的数码相册
1.硬件平台 CPU:STM32F103ZE 屏幕:3.5寸TFTLCD屏 触控:电阻式触摸屏xpt2046 SD卡、外扩Sram 2.示例效果 SD卡检测和图片搜索 图片加载与显示 3.软件设计 3.1 遍历目录   遍历目录,搜索所有的bmp格式图片,以链表方式保存图片名,方便接下来图片切换。 typedef struct FILE_info { char file_name ; u16 number;//保存第几张图片 struct FILE_info *next; struct FILE_info *pre; }FILE_INFO; FILE_INFO *bmp_head=NULL; /*创
[单片机]
<font color='red'>STM32</font>应用案例 基于STM32F103ZE开发的数码相册
STM32利用定时器1控制LED闪烁
配置LED灯 //PC13 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); }
[单片机]
STM32使用串口中断发送和接受数据
这里用到的芯片为STM32F103,使用中断进行串口的接受和发送数据。 这里使用直接操作寄存器的方式,使用库函数和这个类似,只是改为调用响应的库函数即可。 配置串口和复用的IO口 void uart_init(u32 pclk2,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);//分频 mantissa=temp; //分频得到的整数部分 fraction=(temp-mantissa)*16; //小数部分 mantissa =4;
[单片机]
stm32+uln2003驱动步进电机程序(28BYJ-48)
今天,接到一个任务,采用stm32驱动步进电机,已经有了驱动模块了。所以不再采用PWM方式,直接用软件编写。 我也是初学,仅供参考。 1、管脚接线 // IN4: PC9 d // IN3: PC8 c // IN2: PC7 b // IN1: PC6 a 电源接开发板电源。地接地(简直是废话)。 2、定义正转反转数组 uint16_t phasecw ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A uint16_t phaseccw ={0x0040,0x0080,0x0100,0x0200};// A-B-C-D 说明一下,数组里面的值,就是对应的GPIO口的地址。根据自己
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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