精华内容
下载资源
问答
  • 初始IP地址是192.168.1.111,通过对PB7的操作来实现缺省值和flash之间的切换,设置好的参数写入flash,w5500接的是SPI2,单片机是stm32f103c8t6。 第一个网页没有任何修改权限,只有输入登录密码(初始密码:123456 ...
  • 通过EEPROM存储修改的IP,MAC,子网掩码,网页同步Windows时间,AJAX刷新网页修改的参数
  • WIZnet活动主题:嵌入式WEB服务器搭建及HTTP(S)协议讲解-W5500io原理图.pdf
  • 测试ip:192.168.1.41;名称:Test;密码:32123212 w5500 接stm32的SPI2,rst脚接PB9,中断引脚未使用。 代码没有任何问题,只要模块,开发板没有损坏。接线正确,保证可以做一次成功的实验
  • STM32 W5500 HTTP Server 微型web服务实现

    千次阅读 热门讨论 2020-04-22 00:09:27
    嵌入式Web服务很常见,比如电脑通过WIFI接入网络,在浏览器地址栏输入 "192.168.1.1",或者其他...STM32 W5500几乎也可以实现上述的功能,但是由于STM32的RAM和FLASH储存大小是有限的,实现一个简单的web服务是没...

    嵌入式Web服务很常见,比如电脑通过WIFI接入网络,在浏览器地址栏输入 "192.168.1.1",或者其他地址,跟自己电脑的IP在同一个网段内,一般IP最后一段是1即可,可以打开路由器的管理页面。就像这样:

    这个页面就是有嵌入式小型web服务提供的网页。

    STM32 W5500几乎也可以实现上述的功能,但是由于STM32的RAM和FLASH储存大小是有限的,实现一个简单的web服务是没有问题的。

    STM32 W5500实现一个简单的web服务需要具备的几个条件:

    1、STM32 W5500的基础入网配置,可以PING通,可以参考《STM32F103RC驱动W5500入网,并可ping通》

    2、STM32 W5500的TCP Server回环测试没有问题,可以参考 《STM32 W5500 TCP Server 回环测试》

    3、对HTTP协议有一定的认识。

    确定一下要实现的web服务的功能,STM32 W5500配置入网后,通过DHCP动态获取IP地址,在电脑浏览器地址栏输入这个IP地址,可以获取到一个简单form表单的页面,在表单中输入数据,提交到W5500web服务,返回一个结果。如图:

    功能比较简单,比较费事儿的是字符串的处理接收到的字符串的解析,以及返回信息的组装。

    直接贴出测试的代码:

    #ifndef __STM32F10X_H
    #define __STM32F10X_H
    #include "stm32f10x.h"
    #endif
    
    #ifndef __Z_UTIL_TIME_H
    #define __Z_UTIL_TIME_H
    #include "z_util_time.h"
    #endif
    
    #ifndef __Z_HARDWARE_LED_H
    #define __Z_HARDWARE_LED_H
    #include "z_hardware_led.h"
    #endif
    
    #ifndef __Z_HARDWARE_SPI_H
    #define __Z_HARDWARE_SPI_H
    #include "z_hardware_spi.h"
    #endif
    
    #ifndef __W5500_H
    #define __W5500_H
    #include "w5500.h"
    #endif
    
    #ifndef __SOCKET_H
    #define __SOCKET_H
    #include "socket.h"
    #endif
    
    #ifndef __W5500_CONF_H
    #define __W5500_CONF_H
    #include "w5500_conf.h"
    #endif
    
    #ifndef __DHCP_H
    #define __DHCP_H
    #include "dhcp.h"
    #endif
    
    #ifndef __Z_HARDWARE_USART2_H
    #define __Z_HARDWARE_USART2_H
    #include "z_hardware_usart2.h"
    #endif
    
    #include "MQTTPacket.h"
    
    #ifndef __IMPL_MQTT_H
    #define __IMPL_MQTT_H
    #include "impl_mqtt.h"
    #endif
    
    #define SOCK_TCPS 0
    #define BUFFER_SIZE 1536
    #define TEXT_TEMPLATE_OK "HTTP/1.1 200 OK\r\n"\
    "Content-Type: text/html\r\n"\
    "Content-Length: %d\r\n"\
    "Connection: keep_alive\r\n\r\n%s"
    
    #define TEXT_TEMPLATE_ERR "HTTP/1.1 404 Not Found\r\n"\
    "Content-Length: 0\r\n\r\n"\
    "Connection: keep_alive\r\n\r\n"
    
    #define HTML_CONTENT "<!DOCTYPE html>"\
    "<html>"\
    "<head>"\
    "<meta charset=\"utf-8\">"\
    "<title>SN Config</title>"\
    "<style>"\
    ".d-c{ position:absolute;left:40%;top:49%}"\
    ".b-c{ position:absolute;left:40%;top:90%}"\
    "</style>"\
    "</head>"\
    "<body>"\
    "<div class=\"d-c\">"\
    "<form name=\"input\" action=\"sn_config.action\" method=\"post\">"\
    "SN:<input type=\"text\" name=\"sn\">"\
    "<input type=\"submit\" value=\"submit\">"\
    "</form>"\
    "</div>	"\
    "<div class=\"b-c\">"\
    "<p>System SN Config</p>"\
    "</div>"\
    "</body>"\
    "</html>\r\n"
    
    #define HTML_RESULT_OK "<!DOCTYPE html>"\
    "<html>"\
    "<head>"\
    "<meta charset=\"utf-8\">"\
    "<title>SN Config</title>"\
    "<style>"\
    ".c-c{ position:absolute;left:40%;top:49%}"\
    "</style>"\
    "</head>"\
    "<body>"\
    "<div class=\"c-c\">"\
    "<p>System SN Config OK</p>"\
    "</div>"\
    "</body>"\
    "</html>\r\n"
    
    #define HTML_RESULT_ERR "<!DOCTYPE html>"\
    "<html>"\
    "<head>"\
    "<meta charset=\"utf-8\">"\
    "<title>SN Config</title>"\
    "<style>"\
    ".c-c{ position:absolute;left:40%;top:49%}"\
    "</style>"\
    "</head>"\
    "<body>"\
    "<div class=\"c-c\">"\
    "<p>System SN Config FAIL</p>"\
    "</div>"\
    "</body>"\
    "</html>\r\n"
    
    u8 func_analysis_http_request(u8* buffer, u16 len_recv, char* method, char* uri, char* data_body);
    u8 func_package_http_response(u8* buffer, u16 *len_ret, u16 len_buf, char* cont, u16 len_cont);
    
    int main(void)
    {
    	u32 dhcp_timestamp;
    	u8 mac[6]={0, };
    	DHCP_Get dhcp_get;
    	u16 len;
    	u8 buffer[BUFFER_SIZE];
    	char http_method[16];
    	char http_uri[64];
    	char http_body[256];
    	u8 res_code;
    	
    	systick_configuration();
    	init_led();
    	
    	init_system_spi();
    	func_w5500_reset();
    	
    	init_hardware_usart2_dma(9600);
    	
    	getMacByLockCode(mac);
    	setSHAR(mac);
    	
    	sysinit(txsize, rxsize);
    	setRTR(2000);
      setRCR(3);
    	
    	//DHCP
    	for(;func_dhcp_get_ip_sub_gw(1, mac, &dhcp_get, 500) != 0;);	
    	if(func_dhcp_get_ip_sub_gw(1, mac, &dhcp_get, 500) == 0)
    	{
    		setSUBR(dhcp_get.sub);
    		setGAR(dhcp_get.gw);
    		setSIPR(dhcp_get.lip);
    		close(1);
    	}
    	dhcp_timestamp = get_systick_timestamp();
    
    	for(;;)
    	{
    		if(get_systick_timestamp() - dhcp_timestamp > 59*1000)// 1 min dhcp
    		{
    			dhcp_timestamp = get_systick_timestamp();
    			if(func_dhcp_get_ip_sub_gw(1, mac, &dhcp_get, 500) == 0)
    			{
    				setSUBR(dhcp_get.sub);
    				setGAR(dhcp_get.gw);
    				setSIPR(dhcp_get.lip);
    				close(1);
    			}
    		}
    		
    		switch(getSn_SR(SOCK_TCPS))
    		{
    			case SOCK_CLOSED:
    				socket(SOCK_TCPS, Sn_MR_TCP, 80, Sn_MR_ND);
    				break;
    			case SOCK_INIT:
    				listen(SOCK_TCPS);
    				break;		
    			case SOCK_ESTABLISHED:		
    				if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
    				{
    					setSn_IR(SOCK_TCPS, Sn_IR_CON);
    				}
    				len = getSn_RX_RSR(SOCK_TCPS);
    				if(len>0)
    				{
    					memset(buffer, 0, BUFFER_SIZE);
    					len = recv(SOCK_TCPS, buffer, len);
    					//analysis tcp msg, and package the feedback msg
    					if(len > 0)
    					{
    						res_code = func_analysis_http_request(buffer, len, http_method, http_uri, http_body);
    						memset(buffer, 0, sizeof(buffer));
    						if(res_code == 0)
    						{
    							if(strcmp("GET", http_method) == 0 && strcmp("/", http_uri) == 0)
    							{
    								func_package_http_response(buffer, &len, sizeof(buffer), HTML_CONTENT, strlen(HTML_CONTENT));
    								send(SOCK_TCPS, buffer, len);					
    							}
    							else if(strcmp("POST", http_method) == 0 && strcmp("/sn_config.action", http_uri) == 0)
    							{
    								func_package_http_response(buffer, &len, BUFFER_SIZE, HTML_RESULT_OK, strlen(HTML_RESULT_OK));
    								send(SOCK_TCPS, buffer, len);
    							}
    							else
    							{
    								memcpy(buffer, TEXT_TEMPLATE_ERR, strlen(TEXT_TEMPLATE_ERR));
    								send(SOCK_TCPS, buffer, strlen(TEXT_TEMPLATE_ERR));
    							}
    							disconnect(SOCK_TCPS);
    						}
    						else
    						{
    							memcpy(buffer, TEXT_TEMPLATE_ERR, strlen(TEXT_TEMPLATE_ERR));
    							send(SOCK_TCPS, buffer, strlen(TEXT_TEMPLATE_ERR));
    							disconnect(SOCK_TCPS);
    						}
    					}
    					
    				}
    				break;
    			case SOCK_CLOSE_WAIT:
    				close(SOCK_TCPS);
    				break;
    		}
    		
    		func_led1_on();
    		delay_ms(500);
    		func_led1_off();
    		delay_ms(500);
    				
    	}
    }
    
    u8 func_analysis_http_request(u8* buffer, u16 len_recv, char* method, char* uri, char* data_body)
    {
    	char chs[BUFFER_SIZE] = {0, };
    	char *res, *end;
    	if(len_recv > 0)
    	{
    		memcpy(chs, buffer, 3);
    		res = strstr(chs, "GET");
    		if(strcmp("GET", res) == 0)
    		{
    			memcpy(method, "GET", strlen("GET"));
    			
    		}
    		else
    		{
    			memset(chs, 0, BUFFER_SIZE);
    			memcpy(chs, buffer, 4);
    			res = strstr(chs, "POST");
    			if(strcmp("POST", res) == 0)
    			{
    				memcpy(method, "POST", strlen("POST"));
    				
    			}
    			else
    			{
    				return 1;
    			}
    		}
    		
    		memset(chs, 0, BUFFER_SIZE);
    		memcpy(chs, buffer, len_recv + 1);
    		res = strchr(chs, '/');
    		if(res != NULL)
    		{
    			end = strchr(res, ' ');
    			if(end != NULL)
    			{
    				memcpy(uri, res, end - res);
    			}			
    		}
    		
    		memset(chs, 0, BUFFER_SIZE);
    		memcpy(chs, buffer, len_recv + 1);
    		res = strstr(chs, "\r\n\r\n");
    		if(res != NULL)
    		{
    			if(strlen(res) > 4)
    			{
    				memcpy(data_body, res + 4, strlen(res) - 4);
    			}			
    		}
    		
    	}
    	return 0;
    }
    
    u8 func_package_http_response(u8* buffer, u16 *len_ret, u16 len_buf, char* cont, u16 len_cont)
    {
    	memset(buffer, 0, BUFFER_SIZE);
    	*len_ret = sprintf((char*)buffer, TEXT_TEMPLATE_OK, len_cont, cont);
    	return 0;
    }
    

    相关的基础函数库可以参考我的其他文章。

    测试步骤,我的W5500的IP是动态获取到的,所以先登录到路由器管理页面查看他的IP地址。

    我的 STM32 W5500 IP地址是"192.168.1.100"。在浏览器地址栏输入"192.168.1.100",可以看到页面

    在SN后的input标签内输入任意内容,点击submit后,可以看到

    数据已提交到服务。

    通过Debug单步调试可以看到浏览器提交到的数据内容,或者通过串口打印出来。一般的操作都是收到这个数据后存储到EEPROM中。

    展开全文
  • WIZnet活动主题:嵌入式WEB服务器搭建及HTTP(S)协议讲解-ONENET_W5500_接入(HTTP).pdf
  • W5500参考例程.rar

    2020-09-16 16:00:19
    3.TCP_Server 4.TCP_Client 8.HTTP_Server 9.HTTP_Client
  • 基于W5500的嵌入式web设计

    千次阅读 2021-08-09 17:56:20
    1、硬件基础 1)GD32 2)W5500 2、web嵌入 嵌入式主机W5500做服务器端,浏览器端通过访问主机IP,向主机发送GET请求,主机端接收到请求,会立即回复相应的页面

    1、硬件基础
    1)GD32
    2)W5500

    2、web嵌入

    嵌入式主机W5500做服务器端,浏览器端通过访问主机IP,向主机发送GET请求,主机端接收到请求,会立即回复相应的页面。web嵌入其实就是通过网页端给主机端发送请求,主机接受到请求立即回复相应的网页,所有的操作都会相应到主机(类似POST\GET),网页端的制作都是在嵌入式主机端制作。

    3、web操作

    1)清空表单

    "function clearList()“\
    "{"\
    	"for(var i=(table.rows.length-1);i>0;i--){"\
    			"table.deleteRow(i);"\
    	"}"\
    "}"\
    

    2)正则表达式
    (1)限制只能输入数字

    	"var numCheck = /^[0-9]*$/;"\
    	"var obj = document.getElementById('txtDeviceId').value;"\
    	"var check = obj.match(numCheck);"\
    	"if(check == null){"\
    			"alert('不合法!');}"\
    	"else{"\
    			"var arr = new Array();"\
    			"arr[0] = window.table.rows.length;"\
    			"arr[1] = d
    展开全文
  • stm32+w5500web服务器页面需要引用js文件,js文件怎么放进去,相关实验例程中显示板子网关配置的静态页面,我看也引用了W5500.js,这个js文件完全没有找到,但是程序没有问题,我现在想在网页中显示图表,需要引用...
  • w5500TCP server解决有时连接断开问题,可以保持客户端和服务器端一直通信
  • WIZnet活动主题:嵌入式WEB服务器搭建及HTTP(S)协议讲解-W5500封装库.rar
  • 此工程MCU采用STM32F407芯片,网络芯片采用的是LAN8720A,主要功能为:通过页面浏览器客户端完成对STM32相关的运行参数进行读取和修改。网络部分加入AJAX技术,使读取设备参数时页面浏览器非整页刷新,而是部分...
  • 手把手教你如何实现自动固件更新,分为嵌入式篇,服务器篇。并提供详细说明和代码
  • w5500 datasheet

    2016-01-04 20:04:09
    w5500 英文文档 很正规的官方文档 适合智能家居方面
  • W5500做server,通讯一段时间Client会断开 问题描述:我用w5500作为server,用Client去连接,在通讯一段时间后会出现Client突然断开,继续进行连接一直连接不上,调试server端程序的时候发现出现这个情况的时候,SR...

    W5500做server,通讯一段时间Client会断开

    问题描述:我用w5500作为server,用Client去连接,在通讯一段时间后会出现Client突然断开,继续进行连接一直连接不上,调试server端程序的时候发现出现这个情况的时候,SR寄存器读出来的值是0×17,即还是处于SOCK_ESTABLISHED状态,现在出现这个情况的频率比较高,大概运行十多分钟就会出现,求教?

    答:这个是由于Client断开没有经过四次握手,非法断开连接,导致Socket被占用,无法恢复通信。

    可以让客户加入断线重连机制,有以下方式:

    (1) 检查PHY状态寄存器的Link位,如果Link down 则重新初始化Socket;

    主要针对网线插拔/断开;

    (2) 如果TCP通讯中断,尝试重新发起连接2-3次,若不能重新连接,则重新初始化Socket;

    主要针对运行在TCP Client。您这里是Server可以不予考虑;

    (3) 设置Keep a live心跳包,若link断开会在RTR和RCR规定时间之后,触发超时中断;

    TCP 模式下可以使用。Server 或者Client都可以通过这种方法检测。

    展开全文
  • 现在想让STM32 W5500通过HTTP Client POST...1、STM32 W5500的基础配置,使得PC和W5500在同一个局域网内,PC可以PING通W5500。 2、STM32 W5500的TCP Client可以成功发数据,HTTP协议是基于TCP协议之上封装的协议。 ...

    现在想让STM32 W5500通过HTTP Client POST的方式提交数据到远程服务器,并接收服务返回的JSON格式数据,解析和处理。

    实现以上功能,需要具备几个条件:

    1、STM32 W5500的基础配置,使得PC和W5500在同一个局域网内,PC可以PING通W5500

    2、STM32 W5500的TCP Client可以成功发数据,HTTP协议是基于TCP协议之上封装的协议。

    3、远程服务器接口可以访问,可以通过POSTMAN工具先测试。

    4、使用WireShark工具,追踪POSTMAN访问服务接口的报文数据,以及返回的报文数据。

    STM32 W5500的基础配置和TCP Client我已具备条件,下面看下远程服务器接口是否可以访问:

    Header部分:

    Request Body和Response Body

    接口返回了JSON 结构数据,说明接口是可以访问的。

    打开WireShark工具,追踪一下POSTMAN访问的流数据,以及服务器返回的响应报文数据。

    请求数据的追踪

    接口返回的报文数据追踪

    基础准备工作已经做好,那么STM32 W5500 Http Client POST请求的实现,由于一些信息比较敏感,对代码做了处理:

    httppost.c

    #ifndef __HTTPPOST_H
    #define __HTTPPOST_H
    #include "httppost.h"
    #endif
    
    u16 func_pack_httppost_body(char *buff_body, char *productId, char *deviceSn, char *deviceMac, char *devicePassword, char *hardwareVersion)
    {
    	u16 len;
    	len = sprintf(buff_body, "a=%s&b=%s&c=%s&d=%s&e=%s",\
    		productId, deviceSn, deviceMac, devicePassword, hardwareVersion);
    	return len;
    }
    
    u16 func_pack_httppost_head_body(char *buff_post, char *url_tail, u8 *host, u16 port, char *body, u16 body_len)
    {
    	u16 len;
    	len = sprintf(buff_post, "POST %s HTTP/1.1\r\n"
    		"Connection: close\r\n"
    		"User-Agent:W5500\r\n"
    		"Content-Type:application/x-www-form-urlencoded\r\n"
    		"Host: %d.%d.%d.%d:%d\r\n"
    		"Content-Length: %d\r\n\r\n"
    		"%s\r\n", url_tail, host[0], host[1], host[2], host[3], port, body_len, body
    	);
    	return len;
    }
    
    static u16 local_port = 50000;
    
    u8 func_http_post(u8 sock_no, u8 *rip, u16 port, char *buf_post, u16 len_post,char *buf_recv, u16 *len_recv, u16 timeout_ms)
    {
    	u16 cnt, len;	
    	char *body_cont;
    	cnt = 0;
    	
    	for(;;)
    	{
    		switch(getSn_SR(sock_no))
    		{
    			case SOCK_INIT:
    				connect(sock_no, rip, port);
    			break;
    			case SOCK_ESTABLISHED:
    				send(sock_no, (u8*)buf_post, len_post); 
    				if(getSn_IR(sock_no) & Sn_IR_CON)   					
    				{
    					setSn_IR(sock_no, Sn_IR_CON);
    				}
    				len = getSn_RX_RSR(sock_no);
    				if(len > 0)
    				{
    					memset(buf_recv, 0, len_post);
    					len = recv(sock_no, (u8*)buf_recv, len);
    					body_cont = strstr((char*)buf_recv, "HTTP/1.1 200");
    					if(body_cont == NULL)
    					{
    						return 2;
    					}
    					body_cont = strstr((char*)buf_recv, "\r\n\r\n");
    					if(body_cont != NULL)
    					{
    						len = strlen(body_cont) - 4;
    						memcpy(buf_recv, body_cont + 4, len);
    						buf_recv[len] = '\0';
    						*len_recv = len;
    						close(sock_no);
    						return 0;
    					}					
    				}				
    			break;
    			case SOCK_CLOSE_WAIT:
    				close(sock_no);
    			break;
    			case SOCK_CLOSED:
    				socket(sock_no, Sn_MR_TCP, local_port++, Sn_MR_ND);
    				if(local_port > 64000)
    				{
    					local_port = 50000;
    				}
    			break;
    		}
    		
    		cnt ++;
    		if(cnt >= timeout_ms)
    		{
    			close(sock_no);
    			return 1;
    		}
    		delay_ms(1);
    	}
    }
    

    测试的主函数代码:

    #ifndef __STM32F10X_H
    #define __STM32F10X_H
    #include "stm32f10x.h"
    #endif
    
    #ifndef __Z_UTIL_TIME_H
    #define __Z_UTIL_TIME_H
    #include "z_util_time.h"
    #endif
    
    #ifndef __Z_HARDWARE_LED_H
    #define __Z_HARDWARE_LED_H
    #include "z_hardware_led.h"
    #endif
    
    #ifndef __Z_HARDWARE_SPI_H
    #define __Z_HARDWARE_SPI_H
    #include "z_hardware_spi.h"
    #endif
    
    #ifndef __Z_HARDWARE_USART2_H
    #define __Z_HARDWARE_USART2_H
    #include "z_hardware_usart2.h"
    #endif
    
    #include "w5500.h"
    #include "socket.h"
    #include "w5500_conf.h"
    #include "dhcp.h"
    #include "dns.h"
    
    #ifndef __HTTPPOST_H
    #define __HTTPPOST_H
    #include "httppost.h"
    #endif
    
    char buf_send[2048];
    char buf_cont[256];
    	
    int main(void)
    {
    	DHCP_Get dhcp_get;
    //	u8 buf_recv[1536] = {0, };
    	
    	u16 len, recv_len;
    	u8 res;
    	
    	uint8 mac[6];
    	u8 remote_ip[4] = {192, 168, 1, 109};
    	u16 port = 8084;	
    	
    	init_led();
    	
    	init_system_spi();
    	func_w5500_reset();
    	
    	init_hardware_usart2_dma(115200);
    		
    	getMacByLockCode(mac);
    	setSHAR(mac);
    	
    	sysinit(txsize, rxsize);
    	setRTR(2000);
      setRCR(3);
    	
    	//USART DMA problem 2byte missing
    	func_usart2_dma_send_bytes(mac, 2);
    	delay_ms(100);
    	
    	//DHCP
    	for(;func_dhcp_get_ip_sub_gw(1, mac, &dhcp_get, 500) != 0;);	
    	if(func_dhcp_get_ip_sub_gw(1, mac, &dhcp_get, 500) == 0)
    	{
    		setSUBR(dhcp_get.sub);
    		setGAR(dhcp_get.gw);
    		setSIPR(dhcp_get.lip);
    	}
    	
    	len = func_pack_httppost_body(buf_cont, "", "", "", "", "");
    	
    //	pack http message		
    	len = func_pack_httppost_head_body(buf_send, "/a/b/c/d/create", remote_ip, port, buf_cont, len);
    	
    //	res = func_httpc_post(0, remote_ip, port, buf_send, len, buf_send, &recv_len, 1000, 5000);
    	res = func_http_post(0, remote_ip, port, buf_send, len, buf_send, &recv_len, 1000);
    	if(res == 0)
    	{
    		func_usart2_dma_send_bytes((u8*)buf_send, recv_len);
    	}
    
    	for(;;)
    	{
    		
    		func_led1_on();
    		delay_ms(1000);
    		func_led1_off();
    		delay_ms(1000);
    		
    	}
    }
    

    测试的结果,解析报文的body,并通过串口打印出来:

    通过16进制转字符串转换一下,看看结果

     

    展开全文
  • STM32+W5500实现Web2个网页之间的切换.rar
  • 浏览器配置就是在电路板上搭载一个嵌入式的web服务器,所以功能一般的很有限。 特定情况下,搭载一个浏览器设置接口,可以大大方便设备的使用,毕竟是个电脑就肯定有浏览器的。 2.W5500浏览器配置例程分析 1)...
  • 软件实现了5500网页配置,可以参考代码进一步开发
  • 网络芯片W5500 硬件连接 第一步,打开SPI设备驱动框架 双击RT -Thread Settings 然后在打开devices文件下的board.h文件,打开#define BSP_USING_SPI2的定义,我这里使用的是SPI2 然后在stm32f4xx_hal...
  • W5500作为服务器突然断线

    千次阅读 2018-02-05 12:51:21
    大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了。为什么?下面对这个问题进行解释说明,并提出解决办法。 图1中的上位机程序作为客户端,连接W5500服务器...
  • W5500-EVB 的 HTTP 服务器示例 ... ** 网页示例位于“webpages.h”文件中。 W5500-EVB 使用 AJAX 方法和预定义的 CGI 功能来配置网络或监视和控制 I/O。 W5500-EVB 的 CGI 包含使用 HTTP GET/POST 请求方法的
  • STM32+W5500网络通信

    千次阅读 2021-12-25 16:02:21
    STM32+W5500实现web服务1. 基本原理2. 程序实现5. 总结参考 1. W5500模块实现数据通信 引脚初始化,此连线方式用于三个模块功能的整体实现 PA3 -> W5500_RST PA4 -> W5500_SCS PA5 -> W5500_SCK PA6 ...
  • 0.移植说明,w5500移植文件 Ethernet和Internet里面包含的文件就是以太网五层模型中的应用层 应用层协议:HTTP,FTP,SMTP,TFTP,Telent, MQTT 支撑协议:DNS,SNMP HTTP使用TCP而不是UDP. MQTT(Message ...
  • WEB固件升级

    千次阅读 2014-02-21 16:30:34
    本地WEB网口升级芯片的程序目的是为了升级固件的操作变得简单和容易。 电脑端使用浏览器。 使用设备网口,电脑和设备通过网口连接 确保各种情况下设备能正常运行,不是老固件就是新固件 固件完整性验证 各种...
  • STM32+W5500平台的MODBUS协议通讯。利用W5500芯片进行以太网通讯。
  • 经过最近两天的调试,STM32F103VCT6+W5500的Telnet功能实现。实现远程登陆及控制功能,目前只是控制GPIO的操作,控制LED。当然,修改代码,即可实现其他的控制,如继电器等。  目前主要实现的telnet 命令为: help...
  •   前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯...
  • 前言: 1:单片机实现基础的网络功能...网络模块(W5300 和W5500) 2:w5500提供 的例程里面有:  (1)Network install  (2)DHCP 向主机获取动态IP (3)TCP Server  (4)TCP Client (5)UDP   (6)DNS 暂时不知道怎么用

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 164
精华内容 65
关键字:

w5500web