ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STM32+W5500网络通信

2021-12-28 19:31:16  阅读:233  来源: 互联网

标签:网络通信 25BC% W5500 TCP STM32 Buffer 25E5% 25E6% msg


文章目录

一、w5500简介

这个网络芯片通过硬件实现了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY);支持TCP、UDP、IPv4、ICMP、ARP、IGMP以及PPPoE。内嵌32K字节缓存。MCU通过SPI与其通讯来配置网络及进行网络通信,SPI速率达80MHz。

其上提供多达8个独立的socket(套接字),编号0-7,这个socket和平常所说的socket稍微有点差别。对于UDP,设置对应UDP后的操作和普通的socket差不多;但对于TCP,1个socket只能对应一条TCP链接,也就是说,比如你在一个端口上打开了监听TCP的如5000端口,然后使用两个TCP客户端去连接,结果是只有先连入的那个TCP链接能成功。为了在一个TCP端口上同时服务多个TCP链接,需要在多个socket上同时监听那个端口。

另稍微提一下,与W5500通讯的基本思想就是读写W5500的寄存器,来控制W5500的各种功能或读写数据,就好像我们在单片机上通过设置各个寄存器的值来操作各个模块,但因为它不是直接接在MCU的地址总线上的,所以要通过特定格式的SPI帧来间接实现操作寄存器。每次读写寄存器的时候先按固定格式指定起始地址,然后按序依次从MISO读取或从MOSI写入数据。同时还可能随带一些其他操作,比如可变数据长度模式下还需要在每次开始发送前拉低片选信号,发送结束后再拉高。(与可变数据长度模式对应的就是固定数据长度模式,这种模式下不需要频繁控制片选信号,但是在大量读写时就很蛋疼。现在版本的官方库中只支持可变数据长度模式,所以就不需要纠结这个事情了)

当然,这些细节操作官方的IO库已经都帮我们隐藏了,基本我们只需要调用库提供的api就行。

二、modbus通信

MODBUS协议是美国Modicon公司(现已被收购)首先推出的基于RS485总线的通信协议,有RS232/RS422/RS485接口标准。Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。
MODBUS协议是一种 主从式 串行异步 半双工 通信协议。
主从式 指通信设备中有一台主机和多台从机(最大约240个),主机可以和从站双向通信,可以和单独一个从站通信,或者所有从站同时通信(广播),这个时候不需要回应。而从站只能和主站通信,从站之间不能相互通信,从机也不会主动给主机发送信息,只会应答主机。
MODBUS主站同时只会发起一个事物处理,只会与一个从站通信

三、代码

  • 关键代码,这里需要在开始定义一个全局变量data,每次调用都会使data++,而返回的数据就是把data置于数据位,值通过tcp回传回去,能在modbus poll里看到这个值
void Process_Socket_Data(SOCKET s)
{
	int len;
	unsigned char msg[11]={0x00,0x00,0x00 ,0x00, 0x00, 0x05, 0x01, 0x03, 0x02, 0x00, 0x70};
	len=sizeof(msg);
	unsigned short size;
	size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
	memcpy(Tx_Buffer, Rx_Buffer, size);
	
	//打印查询报文
	for (int j=0;j<size;j++){
		 printf("0x%02X ",Tx_Buffer[j]);
	}

	//写响应报文
	//检验码
	msg[0]=Tx_Buffer[0];
	msg[1]=Tx_Buffer[1];
	
	//协议
	msg[2]=0x00;
	msg[3]=0x00;
	
	//数据包长度
	msg[4]=0x00;
	msg[5]=0x05;
	
	//设备编号
	msg[6]=Tx_Buffer[6];
	//功能码
	msg[7]=Tx_Buffer[7];
	//数据长度
	msg[8]=0x02;
	
	//低八位
	msg[10]=data&0XFF;
	//高八位
	msg[9]=data>>8;
	
	memcpy(Tx_Buffer, msg, len);	
	//发送响应报文
	Write_SOCK_Data_Buffer(0, Tx_Buffer, len);
	data++;
}


  • Modbus Poll读取设置
    在这里插入图片描述
  • 这里是通过TCP连接,端口为5000
    在这里插入图片描述
  • 读取效果
    在这里插入图片描述

四、总结

modbus tcp通信原理基本清楚。

五、参考链接

https://blog.csdn.net/qq_47281915/article/details/121927294?spm=1001.2014.3001.5501
https://link.csdn.net/?target=http%3A%2F%2Fwww.ad.siemens.com.cn%2Fproductportal%2FProds%2Fpublished%2FComm%2FComm_9.1%2FComm_9.1.html%23%3A~%3Atext%3DModbus%2520TCP%25E6%2595%25B0%25E6%258D%25AE%25E5%25B8%25A7%2520Modbus%25E6%2595%25B0%25E6%258D%25AE%25E5%259C%25A8TCP%2FIP%25E4%25BB%25A5%25E5%25A4%25AA%25E7%25BD%2591%25E4%25B8%258A%25E4%25BC%25A0%25E8%25BE%2593%25EF%25BC%258C%25E6%2594%25AF%25E6%258C%2581Ethernet%2520II%25E5%2592%258C802.3%25E4%25B8%25A4%25E7%25A7%258D%25E5%25B8%25A7%25E6%25A0%25BC%25E5%25BC%258F%25EF%25BC%258CModbus%2CTCP%25E6%2595%25B0%25E6%258D%25AE%25E5%25B8%25A7%25E5%258C%2585%25E5%2590%25AB%25E6%258A%25A5%25E6%2596%2587%25E5%25A4%25B4%25E3%2580%2581%25E5%258A%259F%25E8%2583%25BD%25E4%25BB%25A3%25E7%25A0%2581%25E5%2592%258C%25E6%2595%25B0%25E6%258D%25AE3%25E9%2583%25A8%25E5%2588%2586%25EF%25BC%258CMBAP%25E6%258A%25A5%25E6%2596%2587%25E5%25A4%25B4%2528MBAP%25E3%2580%2581Modbus%2520Application%2520Protocol%25E3%2580%2581Modbus%25E5%25BA%2594%25E7%2594%25A8%25E5%258D%258F%25E8%25AE%25AE%2529%25E5%2588%25864%25E4%25B8%25AA%25E5%259F%259F%25EF%25BC%258C%25E5%2585%25B17%25E4%25B8%25AA%25E5%25AD%2597%25E8%258A%2582%25EF%25BC%258C%25E5%25A6%2582%25E5%259B%25BE1%25E6%2589%2580%25E7%25A4%25BA%25EF%25BC%259A%2520%25E5%259B%25BE1%25EF%25BC%259AMODBUS%2520TCP%25E6%258A%25A5%25E6%2596%2587

标签:网络通信,25BC%,W5500,TCP,STM32,Buffer,25E5%,25E6%,msg
来源: https://blog.csdn.net/weixin_46075647/article/details/122200559

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有