【使用W5500实现UDP、TCP通信】

这篇具有很好参考价值的文章主要介绍了【使用W5500实现UDP、TCP通信】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、W5500介绍

W5500是一个集成的以太网模块,这个模块上携带TCP/IP协议,控制器只需要通过SPI协议读写其寄存器便可以以网络的方式进行数据交互。
W5500模块自带10个引脚,但由于使用其官方库,只需使用六个引脚便可以进行数据交互,这六个引脚分别为:VCC、GND、MISO、MOSI、SCS、SCLK。其中:
MISO:SPI主机输入从机输出引脚;
MOSI:SPI主机输出从机输入引脚;
SCS:SPI SLAVE选择引脚(低电平有效);
SCLK:时钟信号引脚。
和单片机的连线为:MISOPA6,MOSIPA7,SCSPA4,SCLKPA5。
在程序中操作的几个重要寄存器:
Sn_SR(Socket n 状态寄存器):指示了Socket n的状态,并根据 Sn_CR 或者一些 TCP 模式下的特殊控制包,如 SYN,FIN 包而改变;
Sn_MR(Socket n 模式寄存器):该寄存器用于配置所有 Socket 的选项或协议类型;
Sn_IR (Socket n 中断寄存器):该寄存器用于提供给 Socket n 中断类型信息;
Sn_RXBUF_SIZE (Socket n 接收缓存大小寄存器):该寄存器配置了 Socket n 的接收缓存大小。Socket n 接收缓存区大小可以配置为 1,2,4,8 和 16Kbytes。

二、UDP、TCP介绍

UDP是基于IP的简单协议,是不可靠的协议,其优点是简单、轻量化和速度快,缺点是没有流控制,没有应答确认机制,不能解决丢包、重发和错序问题。UDP不是面向连接的,是不可靠的传输。
TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立一个可靠的连接。 一个TCP连接必须要经过三次握手才能建立起来,简单的描述下这三次握手的过程:
首先,我让信使运输一份信件给对方,对方收到了那么他就知道了我的发件能力和他的收件能力是可以的,这是第一次握手。
然后,他就给我回信,我若收到了,我便知道了我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力也是可以的,这是第二次握手。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后反馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的,这便是第三次握手。
三次握手结束便建立起了连接。以上是一种通俗化的理解,其实在三次握手过程中会发送数据包,并根据数据包进行判断二者的收发能力。

三、程序实现TCPS、TCPC、UDP的过程

1、TCPS,单片机作为TCP的服务器,在该程序的实现部分通过函数获取Sn_SR寄存器的值来判断Socket的状态,若Socket处于关闭状态则调用函数打开Socket;若Socket已处于初始化状态则建立监听;若Socket处于连接建立状态,则清除接收的中断标志位并进行回环测试,接收来自Client的数据,并将此数据再次发送给Client;若Socket处于等待关闭的状态则调用函数关闭Socket。
2、TCPC,单片机作为TCP的客户端,同样在程序的实现部分通过函数获取Sn_SR寄存器的值来判断Socket的状态,若Socket处于关闭状态则调用函数打开Socket;若Socket已处于初始化状态则建立连接;若Socket处于连接建立状态,则清除接收的中断标志位并进行回环测试,接收来自Server的数据,并将此数据再次发送给Server;若Socket处于等待关闭的状态则调用函数关闭Socket。
3、UDP,在程序的实现部分通过函数获取Sn_SR寄存器的值来判断Socket的状态,若Socket处于关闭状态则调用函数打开Socket;若Socket处于UDP模式,则清除接收的中断标志位并进行回环测试,接收来自上位机的数据,并将此数据先发送至单片机再次发送给上位机,在此模式中不再需要建立连接,只需将IP地址和端口设置好即可。

四、遇到的问题及解决

在实现UDP的时候出现了上位机发送数据但是返回值是-1的情况,刚开始我去网上查找原因,说是recvfrom函数的问题,但这是一个官方库且我不太相信UDP实现函数没有问题,所以我就对UDP相关标志位进行了修改,修改过后就可以实现UDP的功能。
在其功能都实现了之后就开始将其移植到UCOS中去,想都没想直接将相关文件进行移动,并替换掉原来UCOS项目的文件,刚开始觉得不是太难,但是移植过后尝试运行失败,然后就进行一步一步的调试,发现跳过UART函数初始化之后网络可以进行连接,这时候恍然大悟,UART的相关设置发生变化导致整个系统启动出错,最后将UART初始化换了回去,便可以进行网络连接和串口输出。
五、回环测试截图文章来源地址https://www.toymoban.com/news/detail-400472.html

UDP回环测试: 【使用W5500实现UDP、TCP通信】
TCPS回环测试: 【使用W5500实现UDP、TCP通信】
TCPC回环测试: 【使用W5500实现UDP、TCP通信】

到了这里,关于【使用W5500实现UDP、TCP通信】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • socket概述 python中如何使用TCP/UDP协议实现通信-教程

    很多编程语言中,都 使用scoket套接字实现网络通信。 Socket是对TCP/IP协议的封装,Socket本身就是一个调用接口(API),方便程序员用Socket使用TCP/IP协议簇,实现网络通信。 不同编程语言,shiyongSocket通信的语法有所区别,但基本原理类型相似。 它的两种方式,分别是TCP和UDP协

    2024年02月13日
    浏览(32)
  • CLION开发STM32之W5500系列(一)

    本系列适用于需要使单片机通过网口进行通信的开发。 针对的是刚入门的同学们,也是个人的经验分享。 本次使用到的芯片为stm32f103vet6(其他的也可以) 本次使用的网口模块为W5500,其网关有示例程序均可以参考. 本次使用Clion+OpenOCD+ARM-GCC 进行开发、烧录、编译. 建议熟悉网络

    2024年02月09日
    浏览(37)
  • Clion开发STM32之W5500系列(综合实验)

    此为w5500模块的综合实验测试模块,包含dhcp、dns、ntp 以上三个模块的驱动参考之前的文章,本篇不做说明. 使用的开发芯片 stm32f103vet6系列,外设接口使用的spi2 通过dhcp动态获取ip, 通过dns解析NTP服务域名的ip 通过NTP服务ip获取时间

    2024年02月16日
    浏览(31)
  • Clion开发STM32之W5500系列(NTP服务封装)

    在w5500基础库中进行封装,获取服务端的时间,来校准本地时间。 本次使用的方案是通过ntp获取时间+定时器更新保证时间准确。

    2024年02月16日
    浏览(29)
  • java实现UDP及TCP通信

    简介 UDP (User Datagram Protocol)用户数据报协议, TCP (Transmission Control Protocol) 传输控制协议,是传输层的两个重要协议。 UDP是一种 无连接、不可靠 传输的协议。其将数据源IP、目的地IP和端口封装成数据包,不需要建立连接,每个数据包的大小限制在64KB内;发送不管对方是否准

    2024年02月03日
    浏览(32)
  • Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

    - 网络通信 概念:网络通信是指 通过计算机网络进行信息传输的过程 ,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准确性和安全性。常见的网络通信协议有T

    2024年02月10日
    浏览(53)
  • JavaEE 初阶篇-深入了解 UDP 通信与 TCP 通信(综合案例:实现 TCP 通信群聊)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录         1.0 UDP 通信         1.1 DatagramSocket 类         1.2 DatagramPacket 类         1.3 实现 UDP 通信(一发一收)         1.3.1 客户端的开发         1.3.2 服务端的开发         1.4 实

    2024年04月26日
    浏览(32)
  • 基于UDP/TCP的网络通信编程实现

    红色是心中永不褪色的赤诚 操作系统为网络编程提供了 Socket api , Socket是基于TCP/IP协议的网络通信的基本单元, 基于Socket的网络程序开发就是 网络编程. 由于直接与应用层联系的是传输层, 所以针对应用层协议(TCP, UDP), Shocket提供了三种套接字, 分别是 流套接字(使用TCP) , 数据报

    2024年02月08日
    浏览(38)
  • 基于python socket实现TCP/UDP通信

    两个应用程序如果需要进行通讯最基本的一个前提就是能够唯一的标示一个进程,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后

    2024年02月16日
    浏览(37)
  • Socket套接字编程(实现TCP和UDP的通信)

      🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔 🦾🦾🦾 目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿 谢谢

    2024年02月03日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包