STM32驱动W5500连接腾讯云

news/2024/10/18 9:19:35/

STM32驱动W5500连接腾讯云

1.W5500简介

   W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。 W5500 集成了 TCP/IP 协议栈, 10/100M 以太网数据链路层(MAC)及物理层(PHY) ,使得用户使用单芯片就能够在他们的应用中拓展网络连接。
   久经市场考验的 WIZnet 全硬件 TCP/IP 协议栈支TCP,UDP,IPv4,ICMP,ARP,IGMP 以及 PPPoE 协议。 W5500 内嵌 32K 字节片上缓存以供以太网包处理。如果你使用 W5500,你只需要一些简单的 Socket 编程就能实现以太网应用。这将会比其他嵌入式以太网方案更加快捷、简便。用户可以同时使用 8 个硬件 Socket 独立通讯。
   W5500 提供了 SPI(外设串行接口)从而能够更加容易与外设 MCU 整合。而且,W5500 的使用了新的高效 SPI 协议支持 80MHz 速率,从而能够更好的实现高速网络通讯。为了减少系统能耗, W5500 提供了网络唤醒模式(WOL)及掉电模式供客户选择使用。

2.W5500底层驱动编写与移植

W5500底层底层驱动移植参考示例:https://blog.csdn.net/weixin_44453694/article/details/123066305
STM32连接腾讯云参考示例:https://blog.csdn.net/weixin_44453694/article/details/116802776

#include "stm32f10x.h"
#include "usart.h"
#include "timer.h"
#include "aliyun_mqtt.h"/*w5500相关头文件*/
#include "w5500api.h"
#include "dhcp.h"
#include "dns.h"
#define SERVER_IP "LA57WTHWL6.iotcloud.tencentdevices.com"//服务器IP
#define SERVER_PORT 1883 //端口号
//客户端ID:{产品ID}{设备名}
#define ClientID "LA57WTHWL6Smart_home"
//用户名和密码可使用密码生成工具完成
#define Username "LA57WTHWL2Smart_home;120310126;HK8V9;1635948714"
#define Password "2a915cae4489b591ce556e71f4e9f1ka21c354a37d12fee7c46f56abee1f048a;hmacsha256"//密文 //订阅题:$thing/down/property/{ProductID}/{DeviceName} ---{ProductID}产品ID,{DeviceName}设备名
#define SET_TOPIC  "$thing/down/property/Lb57WTHWL3/Smart_home"//订阅
//发布主题:$thing/up/property/{ProductID}/{DeviceName}
#define POST_TOPIC "$thing/up/property/Lb57WTHWL3/Smart_home"//发布char mqtt_message[200];//上报数据缓存区
u8 rx_buff[200];
void init_Net(void)
{u8 try_times=0;init_W5500();/*W5500初始化*/init_dhcp_client();//动态分配IPwhile(check_DHCP_state(SOCK_DHCP)!=DHCP_RET_UPDATE){try_times++;if(try_times==255)//超时 重启芯片{							Reset_W5500();init_dhcp_client();try_times=0;}delay_ms(10);}while(!set_Network());/*判断数据是否写入成功*/u8 ipaddr[4];//ip地址u8 subnet[4];//子网掩码u8 gateway[4];//网关getSIPR (ipaddr);			printf(" W5500 IP地址   : %d.%d.%d.%d\r\n", ipaddr[0],ipaddr[1],ipaddr[2],ipaddr[3]);getSUBR(subnet);printf(" W5500 子网掩码 : %d.%d.%d.%d\r\n", subnet[0],subnet[1],subnet[2],subnet[3]);getGAR(gateway);printf(" W5500 网关     : %d.%d.%d.%d\r\n", gateway[0],gateway[1],gateway[2],gateway[3]);  
}
/*连接服务器*/
uint8 TCP_Connect(SOCKET Socket,uint8 *sip,uint16 sport,uint16 lport)
{static uint8 CONNECT_FLAG = 0;switch(getSn_SR(Socket)){case SOCK_INIT:CONNECT_FLAG=connect(Socket,sip,sport);/*连接服务器*/break;case SOCK_CLOSE_WAIT:disconnect(Socket);close(Socket);break;case SOCK_CLOSED:CONNECT_FLAG=0;socket(Socket,Sn_MR_TCP,lport,Sn_MR_ND);break;}return CONNECT_FLAG;
}
int main()
{u16 i=0;u8 stat=0;u16 time=0,cnt=0;float temp=10;u16 rlen;USART1_Init(115200);printf("W5500 SPI模拟时序寄存器版,连接腾讯云VER1.0 \r\n");init_Net();/*W5500硬件初始化,动态分配IP*/printf("W5500 硬件初始化成功\r\n");while(!do_dns((u8 *)SERVER_IP)){}/*域名解析*/while(1){stat=TCP_Connect(MQTT_SOCK,NET_CONFIG.rip,1883,5500);/*连接服务器*/printf("stat=%d\r\n",stat);if(stat)break;delay_ms(1000);} printf("腾讯物联网平台连接中....\n");while(1){if(getSn_SR(MQTT_SOCK)==SOCK_ESTABLISHED){if(getSn_IR(MQTT_SOCK)&Sn_IR_CON){setSn_IR(MQTT_SOCK,Sn_IR_CON);}MQTT_Init();if(MQTT_Connect(ClientID,Username,Password)==0){printf("腾讯云平台连接成功\r\n");break;}}}stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);if(stat)printf("订阅失败\r\n"); while(1){/*接收数据*/rlen=getSn_RX_RSR(MQTT_SOCK);if(rlen>0){rlen=recv(MQTT_SOCK,rx_buff,rlen);printf("len=%d\r\n",rlen);for(i=0;i<rlen;i++){printf("%c",rx_buff[i]);}}delay_ms(1);time++;cnt++;if(time>=5000){time=0;MQTT_SentHeart();//发送心跳包}if(cnt>=2000){temp+=1.5;if(temp>=85)temp=-15;cnt=0;sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"LED1\":1,\"temp\":%.2f,\"L\":356}}",temp);//温度MQTT_PublishData(POST_TOPIC,mqtt_message,0);}    }
}

3.运行效果

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
参考示例:https://download.csdn.net/download/weixin_44453694/81893703


http://www.ppmy.cn/news/287017.html

相关文章

STM32+W5500

一、W5500简介 W5500 网络扩展板集成了一个硬件 TCP/IP 协议栈芯片 W5500 以及一个含有网络变压器的 RJ-45&#xff08;HR911105A&#xff09;。 其中&#xff0c;W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器&#xff0c;为嵌入式系统提供了更加简易的互联网连接方案&#x…

GD32E503Vxx SPI W5500通信

国产替代和ETH网关开发&#xff0c;用到了GD32E503Vxx和W5500&#xff0c;首先在W5500 Evaluation board V1.0上&#xff0c;也就是基于STM32F103RCT6的评估板上&#xff0c;移植了DHCP&#xff0c;DNS&#xff0c;MQTT等功能&#xff0c;跑起来很顺利。后续移植到GD32E503VET6…

基于stm32之w5500以太网应用

基于stm32之w5500以太网应用 强调一下前半段为基础知识普及&#xff08;这段还是很重要的。不管用什么工具开发精通协议才是王道&#xff09;&#xff0c;后半段为实战代码干货。 如上图所示&#xff0c;最底下的一层叫做“物理层”&#xff0c;也叫“PHY 层”&#xff0c;最…

W5500初始化过程

第一步硬件复位 1&#xff1a;拉低RST 2&#xff1a;拉高RST 3&#xff1a;读取通用寄存器0x002e地址以确以太网连接完成&#xff08;如果读到1&#xff0c;为以太网连接完成&#xff09; 第二步初始化W5500 1&#xff1a;初始化W5500寄存器函数 软复位 向通用寄存器&am…

STM32+W5500实现网络通信

文章目录 1、W5500简介2、UDP调试3、Modbus通讯3.1、代码完善3.2、建立连接 4、总结 1、W5500简介 1、简介&#xff1a; W5500是一款高性价比的以太网芯片&#xff0c;其全球独一无二的全硬件TCPIP协议栈专利技术&#xff0c;解决了嵌入式以太网的接入问题&#xff0c;简单易用…

STM32开发笔记111:移植W5500驱动程序

文章目录 前言1、电路设置2、设置STM32Cube3、将W5500源代码,拷贝到指定位置4、更改文件包含位置5、在include.h中加入包含文件6、去除Wmissing-braces警告7、去除Wparentheses警告8、加入SPI驱动程序10、增加函数声明11、在main.cpp中定义函数实现12、完善类前言 本文讲解如…

基于stm32f429的uclinux-W5500网络设备内核驱动

之前那篇写w5500驱动只是单纯的应用程序驱动&#xff0c;虽然可以实现一定的目的&#xff0c;但是没有充分利用到linux的内核&#xff0c;在一些应用场合就显得不合时宜&#xff0c;于是就进行w5500网络设备内核驱动的学习&#xff0c;幸运的是w5500网络设备驱动的文件是在4.8版…

w5500网络连接

文章目录 w5500_conf.h 文件内容w5500_conf.c 文件内容w5500.h 文件内容w5500.c 文件内容type.h 文件内容socket.h 文件内容socket.c 文件内容 w5500_conf.h 文件内容 包含一些相关的硬件初始化和用户参数配置。 #ifndef _W5500_CONF_H_ #define _W5500_CONF_H_#include &quo…