STM32F103ZTE6 + W5500编程遇到的问题与解决过程

news/2025/11/25 10:28:42/文章来源:https://www.cnblogs.com/haohaoganhuo/p/19267175

STM32F103ZTE6 + W5500编程遇到的问题与解决过程

01W5500ARCH
W5500是韩国公司WIZNET出品的爆款网络芯片,它集成了TCP/IP协议栈和以太网PHY接口,能让不具备网络功能的单片机通过 SPI 接口便捷地实现上网功能,目前国内兼容的芯片有沁恒公司的CH394。我最近开发的一款数据采集卡产品就是使用STM32F103ZET6+W5500实现了网络功能,网络部分代码由野火开发板配套提供,而野火的代码也是在官方代码基础上修改而来。使用配套代码很容易就实现了我的应用,但是在稳定性测试中也发现了一些问题,下面就是遇到的问题以及解决办法。

1. 拔插网线后无法再次连接

  建立连接成功后,将网线拔插,模拟网络故障,结果在网线插上后可以PING通,但是连接一直超时,通过单片机的调试串口输出可以看出W5500的状态一直处于SOCK_ESTABLISHED,说明它没有收到网络断开的通知。网上搜索解决方法,需要启动Keep-Alive功能,因此在网络初始化代码中添加相应代码启动Keep-Alive功能:
启动Keep-Alive功能函数声明如下:

    //s参数表示对应的socket号,times参数表示超时次数void setSn_KPALVTR(SOCKET s, uint8 times);

函数定义如下:

void setSn_KPALVTR(SOCKET s, uint8 times)
{//IINCHIP_WRITE是官方提供的寄存器操作函数//官方手册中每个时间单位是5S,times=1表示检验周期是5SIINCHIP_WRITE(Sn_KPALVTR(s),times);
}

官方手册描述如下:

    Sn_KPALVTR 配置了 SOCKET n 的‘KEEP ALIVE(KA)’在线验证心跳包传输时
间。他只在TCP模式下生效,在其他模式下将会被忽略。单位时间为5秒。 
KA 包会在Sn_SR变为SOCK_ESTABLISHED 且与对方至少进行过一次收或发的通
讯后进行传输。如果‘Sn_KPALVTR > 0’,W5500 在一定时间周期会自动传输 KA
包以检查 TCP 的连接状态(自动在线验证)。如果‘Sn_KPALVTR = 0’,将不会
启动自动在线验证,主机可以通过 SEND_KEEP 配置命令发送 KA 包(手动在线验
证)。在‘Sn_KPALVTR > 0’时,将会无视手动在线验证。如果对方不能在超时计数期内反馈在线心跳包,这个连接将会被关闭并
触发超时中断。

  从官方手册来看,下面的代码应该是最长5S+超时计数秒数后就关闭连接,程序超时计数描述设置的是32秒,拔掉网线后测试了几次,基本都是36、37秒W5500的socket变成关闭连接状态,符合预期。

    //0是SOCKET,也就是W5500的通道0setSn_KPALVTR(0, 1);

也可以手动发送心跳包,函数如下(我的代码中没有手动发送,主要是没想好发送的时机,所以还是设置自动发送更简单):

    //发送心跳包函数声明void sendKA(SOCKET s);//发送心跳包函数定义void sendKA(SOCKET s){IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND_KEEP);}

拔掉网线后需要等待半分钟多才能再次连接上,这个时间还是有些长,如果能检测到网线断开后马上就关闭连接,这样就可以在插上网线后快速的进行连接,从而提升用户体验。
检测网络断开的代码如下,为了节约系统开销,这里使用了宏定义:

    #define NET_DISCONNECT ((IINCHIP_READ(PHYCFGR) & 0x01) == 0)

NET_DISCONNECT可以直接当作布尔变量使用,断开为真,连接为假。
在检测到网络断开后,直接使用close函数关闭对应socket就可以让单片机马上处于等待连接的状态。

2. 卡在SOCK_SYNRECV很长时间

  上位机windows操作系统,使用VS2022的C++编程,设置断线重连,有的时候能马上连接,有的时候要等半分钟才能连接成功,查看单片机的调试串口输出,可以看到W5500的网络状态卡在了SOCK_SYNRECV处很长时间,直到超时关闭连接后,上位机才能再次连接成功。将上位机连接超时从1秒改成5秒后,连接延迟的现象有所改善,但是仍然会出现,估计是在单片机等待连接再次建立的时候,刚好出现在超时临界点,导致接收不到SOCK_SYNRECV的应答信号,就一直卡在那里了,决定使用下面的思路解决。
添加SOCK_SYNRECV超时判断,W5500进入SOCK_LISTEN状态后,复位超时;进入SOCK_SYNRECV状态后,开始计时,如果计时时间到,仍然处在SOCK_SYNRECV状态中,则关闭socket。相关函数与代码如下:

//函数声明
uint8 SYNRECVTimeOut(uint8 resetTime,uint16 timeOutMS);
//resetTime=0表示不复位超时定时器
//resetTime=1表示复位超时定时器
//timeOutS是超时秒数//函数定义
uint8 SYNRECVTimeOut(uint8 resetTime,uint16 timeOutMS)
{static uint64_t lastMS = 0;if (resetTime) {lastMS = get_ms();}else {if (get_ms() - lastMS > timeOutMS)return 1;}return 0;
}//网络处理代码片段……case SOCK_LISTEN://复位超时定时器SYNRECVTimeOut(1, 0);break;case SOCK_SYNRECV://此状态超过1S则关闭端口if (SYNRECVTimeOut(0, 1000))close(SOCK_TCPS);break;……

经过上面两个处理,拔插数据采集卡的网线,上位机重连基本都可以在1秒内完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/975668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年新疆电线电缆厂家权威推荐榜单:耐火电缆/扁电缆/高温电缆源头厂家精选

随着新疆地区能源、交通和城市基础设施建设的持续推进,电线电缆市场需求呈现稳定增长态势。根据行业数据显示,2024年西北地区电线电缆产业规模同比增长约12%,其中新疆市场表现尤为突出。本文基于企业实力、产品质量…

深入解析:LLM辅助轻量级MES编排系统低代码开发方案介绍

深入解析:LLM辅助轻量级MES编排系统低代码开发方案介绍2025-11-25 10:25 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

ClickHouse的实践经验

1. 主键索引 在 ClickHouse 中选择有效的主键对查询性能和存储效率至关重要。如果不指定primary key,primary key默认就是ordering key。 在选择ordering key时,优先考虑在查询条件中常用的列,尤其是那些排除大量行…

小白建站3天就被爬?10分钟部署免费WAF,护住我的Java学习笔记

小白建站3天就被爬?10分钟部署免费WAF,护住我的Java学习笔记作为逛了三年博客园的老粉,去年终于鼓起勇气搭了自己的技术博客,专门用来记Java学习笔记。跟着园友的教程,用腾讯云学生机+宝塔面板装好了Typecho,第一…

2025年质量好的新能源轴专用磨床最新TOP厂家排名

2025年质量好的新能源轴专用磨床最新TOP厂家排名新能源轴加工行业背景与市场趋势随着全球新能源汽车产业的蓬勃发展,新能源轴作为关键零部件的需求呈现爆发式增长。据中国机床工具工业协会最新统计数据显示,2024年中…

2025 价值流智能时代 ITSM 选型指南:如何让平台成为 IT 服务价值闭环核心引擎?

2025 价值流智能时代 ITSM 选型指南:如何让平台成为 IT 服务价值闭环核心引擎?$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");文章对比主流ITSM厂商核心能…

2025年北京房产分割律师权威推荐榜单:离婚诉讼/继承律师/婚姻诉讼专业律师精选

在北京这座超一线城市,房产作为家庭核心资产,其分割案件往往涉及复杂法律问题和巨大经济利益。根据北京市法院系统近年数据统计,房产分割案件在家事纠纷中占比超过65%,且平均审理周期长达8.2个月。专业房产分割律师…

医疗器械注册公司哪家好?2025年权威机构推荐榜单

一、市场背景与行业现状 近年来,全球与中国医疗器械市场持续保持稳健增长。数据显示,2024年全球医疗器械市场规模已达6230亿美元,预计2025年将增长至6491亿美元;中国作为全球第二大医疗器械市场,规模从2020年的72…

超越像素:兰亭妙微揭示,卓越的APP界面设计始于“产品策略”

超越像素:兰亭妙微揭示,卓越的APP界面设计始于“产品策略”在数字产品的世界里,一个令人遗憾的常态是:许多创业者带着一个绝佳的想法,找到一家APP界面设计公司,直接要求“帮我把界面做得漂亮点”。然而,将设计仅…

基于SVM与K-means的图像分割实现

一、核心流程设计 本方案采用两阶段分割框架,结合K-means的快速聚类与SVM的高精度分类优势:粗分割阶段:K-means聚类实现初始区域划分 精细分割阶段:SVM分类器优化分割边界二、完整MATLAB代码实现 %% 清空环境与数据…

控油好用洗发水牌子盘点!什么洗发水去屑止痒控油又蓬松?9款高口碑必入清单

油头从来不是“一刀切”的问题:有人是“傍晚微油”的轻度油头,只需要基础控油;有人是“半天就塌”的中度油头,急需长效蓬松;还有人是“刚洗就黏”的重度油头,连带着脱发、头屑、异味一起找上门。选不对洗发水,轻…

Valgrind内存错误检测工具使用

Valgrind内存错误检测工具使用基本用法 假设你有一个可执行程序 ./my_program,可以这样运行 Valgrind: Bash valgrind --tool=memcheck --leak-check=full ./my_program 常用选项说明: 选项 说明 --tool=memcheck 使…

Setup线程组使用注意事项 - BKY007

在最近的一次性能测试中,把要测得 接口 不小心放入了 SetUp线程组中 把登录接口 放入了 普通线程组中,待测得接口功能 需要拿到 登录接口的 cookie信息授权, 1、在登录的响应结果中 利用正则提取器 拿到 了 响应结果…

2025年北京离婚诉讼律师权威推荐榜单:离婚律师/继承律师/房产分割专业律师团队精选

随着社会经济发展和家庭结构多元化,离婚诉讼法律服务需求呈现显著增长态势。根据北京市司法局发布的《2024年北京公共法律服务发展报告》,2024年北京市离婚诉讼案件量同比增长18.5%,其中涉及财产分割争议的占比76.3…

微信原生开发者工具-关于wxml中text标签的坑

从图中我们可以明显的看到“随”和“还”的字体不在圈内我们的指定范围内,但是让AI反复修改,就是改不好,从方框改为圆圈,始终都解决不了 怎么办 我们先用调试窗口的选择元素检查,看看到底是怎么个事这里你查了wxs…

2025年北京继承律师权威推荐榜单:房产分割/离婚诉讼/婚姻诉讼专业律师团队精选

随着社会财富积累和人口老龄化程度加深,继承法律服务需求呈现显著增长态势。根据北京市司法局发布的《2024年北京公共法律服务发展报告》,2024年北京市继承类法律咨询量同比增长23.7%,继承案件占全部家事案件的31.8…

丐版 OI 技巧 / 杂项部分总结 + 作者学习笔记

合作: SKK 部分:【前面忘了】,SKK,我【中间忘了】的信仰,我【中间忘了】的希望:https://www.cnblogs.com/S-Keep-Kiding/p/19267094 Wy_x 部分:https://www.cnblogs.com/Wy-x/p/19265940我写的的学习笔记部分: …

OI 常见经典技巧 (遗产)

总要留下点东西的。开题相关:拿到题先看时空!先看时空!先看时空! 一切建立在看完时空的前提下,最主要的就是先读题面,千万别急,大概理解了再模样例,如果长时间读不懂先看后面的。 大概理解了就去看数据范围,这…

2025 最新衡阳装修设计公司推荐!家装行业全产业链闭环服务品牌排行榜权威发布,透明化保障与品质之选深度解析

引言 家装市场长期存在材料掺假、报价隐瞒、工艺不达标等乱象,据国际室内设计与装修协会(IFI)最新测评数据显示,全球家装投诉率中 68% 源于信息不透明,32% 涉及环保不达标问题。为破解行业痛点,本次排行榜依托权…

2025年口碑好的铝木实验台厂家推荐及选择指南

2025年口碑好的铝木实验台厂家推荐及选择指南行业背景与市场趋势实验室家具行业作为科研基础设施的重要组成部分,近年来随着我国科研投入的持续增加而蓬勃发展。据中国实验室装备行业协会统计数据显示,2024年我国实验…