目录

  • 一、W5500及modbus
  • 二、代码实现
    • 1.初始化网络
    • 2.响应函数
    • 3.main函数循环
  • 三、通信结果
  • 链接

一、W5500及modbus

W5500 芯片是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。是韩国WIZnet(微知纳特)发布全硬件TCP/IP协议栈以太网接口芯片。
W5500 支持高速标准4线SPI接口与主机进行通信,该 SPI 速率理论上可以达到 80MHz。其内部还集成了以太网数据链路层(MAC)和10BaseT/100BaseTX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)、掉电模式和网络唤醒功能。与传统软件协议栈不同,W5500内嵌的8个独立硬件 Socket 可以进行8路独立通信,该8路Socket的通信效率互不影响,可以通过 W5500 片上32K 字节的收/发缓存灵活定义各个Socket的大小。

Modbus协议是一个master/slave架构的协议。有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点。每一个slave设备都有一个唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。

一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个IO接口,以及指挥设备回送一个或者多个其寄存器中的数据。

有许多modems和网关支持Modbus协议,因为Modbus协议很简单而且容易复制。它们当中一些为这个协议特别设计的。有使用有线、无线通信甚至短消息和GPRS的不同实现。不过设计者需要克服一些包括高延迟和时序的问题。

二、代码实现

1.初始化网络

void Load_Net_Parameters(void)
{Gateway_IP[0] = 192;//加载网关参数Gateway_IP[1] = 168;Gateway_IP[2] = 1;Gateway_IP[3] = 1;Sub_Mask[0]=255;//加载子网掩码Sub_Mask[1]=255;Sub_Mask[2]=255;Sub_Mask[3]=0;Phy_Addr[0]=0x0c;//加载物理地址Phy_Addr[1]=0x29;Phy_Addr[2]=0xab;Phy_Addr[3]=0x7c;Phy_Addr[4]=0x00;Phy_Addr[5]=0x01;IP_Addr[0]=192;//加载本机IP地址IP_Addr[1]=168;IP_Addr[2]=1;IP_Addr[3]=199;S0_Port[0] = 0x13;//加载端口0的端口号5000 S0_Port[1] = 0x88;S0_Mode=TCP_SERVER;//加载端口0的工作模式,TCP服务端模式

2.响应函数

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++;
}

3.main函数循环

 while (1){W5500_Socket_Set();//W5500端口初始化配置W5500_Interrupt_Process();//W5500中断处理程序框架if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据{S0_Data&=~S_RECEIVE;Process_Socket_Data(0);//W5500接收并发送接收到的数据}//从机状态标志HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);}

三、通信结果

1.建立连接

2.选择TCP/IP协议设置地址端口

串口输出

链接

STM32F103+W5500网络通信

STM32基于W5500模块实现通信相关推荐

  1. STM32 PAJ7620U2手势识别模块(IIC通信)程序源码详解

    最近在自学设计下基于STM32单片机的项目,想用手势识别模块做一点好玩的,做个手势控制家居设备开关,另外正好借此巩固I²C 通信.因此,我想借这个机会在这里和大家分享一下自己学习STM32单片机时的所 ...

  2. STM32—基于ZE08-CH2O模块检测甲醛含量精解

    ZE08-CH2O模块概述 管脚定义: ZE08-CH2O模块的数据及其使用方法: 这是我经常用的方法:使用串口来接收数据,然后这个模块分为两个模式:1,主动上传模式,2.问答模式.如果没有太大要求的 ...

  3. cubemx stm32 基于uln2003模块的步进电机驱动代码

    cubemx配置 开4个GPIO口 硬件连接 使用的是野火的指南者,型号是stm32f103ve 代码 uln2003.c #include "uln2003.h" #includ ...

  4. 基于Stm32的4G模块实现内网透传通信(代码后附)

    基于Stm32的4G模块实现内网透传通信 一.内网透传即内网映射,内网IP端口映射外网连接访问过程的实现.内网透传通信实现过程又有以下几种区别: 1)路由器映射.适合自己本地路由有公网IP网络环境,用 ...

  5. 基于stm32之w5500以太网应用

    基于stm32之w5500以太网应用 强调一下前半段为基础知识普及(这段还是很重要的.不管用什么工具开发精通协议才是王道),后半段为实战代码干货. 如上图所示,最底下的一层叫做"物理层&qu ...

  6. python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import sock ...

  7. 基于STM32和W5500的Modbus TCP通讯

     在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现. 1.移植前的准备工作 为了实现Modbus ...

  8. 基于android的课程画图设计,基于Android的智能终端通信勘察设计系统绘图模块的设计与实现...

    摘要: 随着通信行业甲方对设计勘察要求的提高,设计院的工作人员在外勘察的任务也越来越重.而传统勘察绘图使用纸质介质进行信息采集并在整理后进行计算机制图的的方式效率过于低下,不能满足当前勘察对效率和成本 ...

  9. 基于STM32与GSM模块发送中英文短信

    基于STM32与GSM模块发送中英文短信 最近在做毕业设计有用到GSM模块进行短信报警,模块的功能比较多这里就不介绍了,一般的拨打电话都很简单就只需要一条指令即可,发送英文短信也很简单也只要几条命令也 ...

最新文章

  1. pyinstaller python3.7_解决python3.7安装好pyinstaller却不能使用的问题
  2. MyBatis 源码分析 - 缓存原理
  3. Java:希望每天叫醒你的不是闹钟而是梦想!
  4. aix么把占用的端口释放掉_AIX 环境下Telnet返回提示所有端口已经被占用,处理方法...
  5. 前台等待事件 oracle,Oracle等待事件之buffer busy waits
  6. eclipse自动为变量生成Get/Set函数
  7. Doris之Rollup 与查询
  8. 乐玩模块脚本实战教程辅助脚本制作开发视频
  9. 【kvm虚拟化详解01】-虚拟化概述和主流方案介绍
  10. 联机饥荒一直显示启动服务器,饥荒联机版启动服务器时遇到一些麻烦 | 手游网游页游攻略大全...
  11. 平方根python_python如何求平方根
  12. 中华酷联小米:未来谁将干掉三星?
  13. GIS招聘 | 辽宁省省直事业单位(含测绘、地信等专业岗位)
  14. Chrome 各版本下载地址大全
  15. 一文读懂汽车功能安全
  16. java中statistic_Java Statistic類代碼示例
  17. 练手项目2笔记之day01
  18. 常见测试用例设计之水杯
  19. android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、蓝牙锁等源码器
  20. go 极简后台管理-二次开发

热门文章

  1. Java 值传递与“引用传递”
  2. rxjava dagger2 retrofit 框架
  3. linux下关闭redis服务
  4. Oracle ORA-01722: invalid number 错误分析
  5. C语言中pow函数和sqrt函数的使用
  6. 开发婚礼app软件的优势和功能需求分析
  7. Unity细节操作(固定分辨率,打包窗口化,字体清晰)
  8. spring security 实现匿名访问接口
  9. jToken与JArray简单笔记
  10. My Eclipse 软件解锁秘钥