当前位置: 首页 > news >正文

STM32 W5500

W5500会帮我封装数据,我发给W5500的是数据,W5500发出去的是协议帧。

    使用W5500的前置知识点:W5500使用前需要先进行复位,也就是将RST输入引脚拉低10ms以上,然后再拉高50ms。W5500的版号寄存器地址是0X0039,当读取这个寄存器返回值是0X04,就证明通信通了W5500需要配置四个参数:

image

    这四个参数都是配置给W5500的。关于MAC地址:一共是6个字节,第一个字节只能是偶数。

image

    关于IP地址:分为网段+自己的地址,同网段的设备可以连接在同一个局域网中关于子网掩码:掩码二进制左边连续 1 的个数 = 网段位数,所以常见的255,255,255,0的意思就是24个连续的1的掩码,从左往右24位是网段

image

    关于网关(路由器地址):同网段的设备算是在一个村子里,网关相当于村口大门,村子里的设备想要与外界沟通必须经过大门

image

image

    关于路由器:只走网段,不管具体的网址

image

    简化版

image

    一个实际的例子

image

    Socket是什么也可以这样说,Socket就是一个通讯通道,在W5500中这是一个实际的通道,而且还有通道深度,也就是数据缓存空间的大小,也可以配置通道的类型,可以是TCP/UDP/...(可能还对应了特定的规则,比如帧的格式?还没学那么深入)

image

    W5500的INT是上拉开漏输出下面是驱动的流程

image
image
image
image
image
image

    使用W5500官方库+HAL的实践。我自己尝试了使用官方库,失败了,然后参考了很多gitee上的代码,终于理解了使用官方库的方法。void UDPinit(void){// 1. 硬件复位
W5500_RESET();//2.将MCU的驱动CS  SPI  中断开关 的函数注册到W5500官方库当中
reg_wizchip_cris_cbfunc(w5500_cris_enter, w5500_cris_exit);reg_wizchip_cs_cbfunc(W5500_Select, W5500_Unselect);
reg_wizchip_spi_cbfunc(W5500_ReadByte, W5500_WriteByte);//3配置W5500的信息:MAC IP 掩码 网关 DNS 静态DHCP
ctlnetwork(CN_SET_NETINFO, (void*)&gSetNetInfo);// 4. 初始化WIZCHIP
uint8_t memsize[2][8] = {{2,2,2,2,2,2,2,2}, {2,2,2,2,2,2,2,2}}; // 每个Socket的收发缓冲区大小(KB),共8个Socket
if(ctlwizchip(CW_INIT_WIZCHIP, (void*)memsize)) {// 初始化失败,通常意味着硬件通讯有问题printf("WIZCHIP Initialization Failed!\r\n");while(1);
}
// 5. 等待PHY链接建立
uint8_t phy_link=PHY_LINK_OFF;
do {if(ctlwizchip(CW_GET_PHYLINK, (void*)&phy_link) == -1){printf("Read PHY link failed, retry...\r\n");HAL_Delay(100);continue;  // 跳过本次循环剩余部分,重新尝试}
} while(phy_link == PHY_LINK_OFF);
printf("PHY Link is OK!\r\n");//		wiz_phy_link_check();// 6. 设置网络信息,比如TCP或者UDPclose(SOCK_UDPS);uint8_t sta = getSn_SR(SOCK_UDPS);if(sta == SOCK_CLOSED){socket(SOCK_UDPS, Sn_MR_UDP, 5001, 0);}HAL_Delay(100);

}

    OSI( Open Systems Interconnection )七层模型

image

    TCP/IP 4层模型

image

    需要简要提一下的是,计算机网络的7层模型中,最底层的是物理层,再往上是链路层,网络层。为了代码的健壮性,最好先等待检测物理层的链接完成建立之后,再进行链路层或者其他层的通讯。这个检测可以是延时等待,也可以是通过函数不断判断物理层的状态。我先前之所以TCP通讯不上,就是因为等待的时间不够,直接就调用connect()函数尝试与TCP服务器进行连接,然后由于物理层没有准备好,连接失败了;还有就是当调用connect这个函数的时候,起作用的只有下面的四层,因为与TCP服务器与TCP客户端建立连接只需要这些操作,所以说,TCP/IP是网络传输的基础。还有就是先前配置mac地址,配置W5500自身通道之类的,由于都是自身的配置,不涉及到与其他设备的交互,所以先后顺序按理说应该是不重要的,需要注意的只有一点,在与其他设备进行交互时,自身的配置一定得齐全,该有的都得有。这七层模型只有在数据传输的时候才起作用,至于响应几层,就看传输的数据了,比如请求建立TCP链接的只会影响4层。
http://www.jsqmd.com/news/818959/

相关文章:

  • 5G网络优化实战:手把手教你配置gNB切换策略(盲切、基于覆盖、基于优先级)
  • 告别闪烁!ESP32+WS2812B的精准时序控制与FreeRTOS任务优化指南
  • 云计算能效评估:从PUE到xPUE的进阶实践
  • 2026Q2商用显示技术服务解析:成都五合科技有限公司联系/成都大型LED/成都定制LED显示屏/成都室内LED/选择指南 - 优质品牌商家
  • JFET输入运放失真机制与介质隔离工艺解析
  • VisualCppRedist AIO终极指南:一劳永逸解决Windows软件运行问题
  • AI驱动PDF智能生成:从LLM原理到工程实践
  • 5分钟掌握rpatool:解锁Ren‘Py游戏资源的完整指南
  • ArcGIS Server 10.8.1 要素服务发布实战:从PostgreSQL数据库到Web地图的完整链路
  • 避坑指南:ZYNQ移植uCOSIII时,BSP里ps7_ethernet_0驱动选错怎么办?
  • ASMA-Tune:大语言模型在汇编代码理解中的创新应用
  • Generative-AI-Playground:模块化AI应用开发实践与本地部署指南
  • 现代浏览器扩展开发模板:基于TypeScript与Webpack的工程化实践
  • 802.11ac核心技术解析与无线网络优化实践
  • 构建个人技能库:用Git+Markdown打造可复用的技术资产仓库
  • 计算机毕业设计Hadoop+Spark+AI大模型Steam游戏推荐系统 游戏可视化 机器学习 深度学习 大 数据毕业设计
  • ARM架构SCTLR_EL1寄存器详解与配置指南
  • FPGA在工业自动化中的核心价值与实现
  • 【军事三维电子沙盘】多源数据融不进去?聊聊我踩过的4个坑无标题
  • 2026年温州GEO服务商深度解析:如何选择本地化专业伙伴 - 2026年企业推荐榜
  • 【企业级Python审查SOP】:用Claude自动识别PEP 8违规、逻辑漏洞与供应链风险(附可落地的12条规则清单)
  • 轻量级代码复用框架Kilo-Org:提升团队开发效率的代码片段管理方案
  • 盾码无界是什么:一套面向大模型时代的企业增长基础设施拆解
  • OpenAI API 413 请求实体过大:从错误诊断到代理部署的实战指南
  • 儿童房 书房健康照明设计:国标 RG0/UGR<19/Ra≥90 武汉家装实用指南
  • HYPE水文模型全流程实战——以黑河上游流域为例
  • Plasmic:基于React的可视化构建器,重塑前端开发与设计协作范式
  • 瑞萨R7F0C系列MCU:高性价比嵌入式开发实战与低功耗设计解析
  • sessionstellar-cursor:打造高性能、可定制Web鼠标交互的完整指南
  • 2026年5月二手钢结构立柱可靠服务商排行及实测分析:二手钢结构材料/二手钢结构构件/二手钢结构檩条/二手钢结构钢梁/选择指南 - 优质品牌商家