OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8429|回复: 6

W5500网络通信TCP Server自动断开连接

[复制链接]

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2020-6-23
在线时间
14 小时
发表于 2021-5-31 20:19:24 | 显示全部楼层 |阅读模式
本帖最后由 yqyj2333 于 2021-5-31 20:31 编辑

通信类型:TCP Server(W5500-SPI网络通信)微控制器:STM32F103ZET6
编程库:HAL
问题描述:
在下图(第一张图和第二张图)子循环(增量式PID控制子程序)中,运行快要结束时,偶尔会出现自动关闭socket(getSn_SR(SOCK_TCPS)) == 0x00),且出现后,无法在下一个子循环中连接,只能到下下个子循环连接。通过串口打印(第三张图)可以看到在跳出循环后socket就自动关闭了,且出现CH: 0 Unexpected1 length 0    SEND_OK Problem!!;网络通信(第四张图)也停止收发消息了,只有等到下下个子循环,才会自行恢复。W5500接收程序如第五张图所示,W5500发送程序如第六张图示。W5500发送程序:
void Robot_Send_Message(uint8 * buf, uint16 len)
{
        send(SOCK_TCPS, buf, len);                                                                                                      /*向Client发送数据*/
        HAL_Delay(10);
        if(getSn_IR(SOCK_TCPS) & Sn_IR_SEND_OK)
        {
                setSn_IR(SOCK_TCPS, Sn_IR_SEND_OK);                                                                       /*清除接收中断标志位*/
        }
}

W5500接收程序:
void Robot_Receive_Command(void)
{
        atkkey = 0;
        switch(getSn_SR(SOCK_TCPS))                                                                                        /* 获取socket的状态 */
        {
                case SOCK_CLOSED:                                                                                                /* socket处于关闭状态 */
                {
                        socket(SOCK_TCPS ,Sn_MR_TCP,local_port,Sn_MR_ND);                               /* 打开socket */
                        break;   
                }
                case SOCK_INIT:                                                                                                        /* socket已初始化状态 */
                {
                        listen(SOCK_TCPS);                                                                                        /* socket建立监听 */
                        break;
                }
                case SOCK_ESTABLISHED:                                                                                        /* socket处于连接建立状态 */
                {
                        if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
                        {
                                setSn_IR(SOCK_TCPS, Sn_IR_CON);                                                        /* 清除接收中断标志位 */
                        }
                        atkkey=getSn_RX_RSR(SOCK_TCPS);                                                                /* 定义len为已接收数据的长度 */
                        if(atkkey > 0)
                        {
                                recv(SOCK_TCPS,atkRxbuf,atkkey);                                                /* 接收来自Client的数据 */
                                atkRxbuf[atkkey]=0x00;                                                                         /*添加字符串结束符*/
                                Robot_Command_Analysis();
                        }
                        if(getSn_IR(SOCK_TCPS) & Sn_IR_SEND_OK)
                        {
                                setSn_IR(SOCK_TCPS, Sn_IR_SEND_OK);                                                /*清除接收中断标志位*/
                        }
                        break;
                }
                case SOCK_CLOSE_WAIT:                                                                                        /* socket处于等待关闭状态 */
                {
                        disconnect(SOCK_TCPS);                                              /* 断开当前TCP连接 */
                        close(SOCK_TCPS);
                        break;
                }
        }
}
1.png 2.png [url=][/url]




6.png
5.png
4.png
3.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2021-7-9 17:05:35 | 显示全部楼层

回帖奖励 +1 金钱

帮顶,一直用的LAN8742和DP83848c这个还没用过呢
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-12-28 14:52:18 | 显示全部楼层

回帖奖励 +1 金钱

帮顶         
回复 支持 反对

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-12-28 14:52:50 | 显示全部楼层
帮顶   
回复 支持 反对

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-12-28 14:53:17 | 显示全部楼层

回帖奖励 +1 金钱

帮顶   
回复 支持 反对

使用道具 举报

1

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2020-3-15
在线时间
28 小时
发表于 2021-12-28 15:04:31 | 显示全部楼层

回帖奖励 +1 金钱

噢      
回复 支持 反对

使用道具 举报

2

主题

369

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4241
金钱
4241
注册时间
2020-7-24
在线时间
714 小时
发表于 2021-12-28 15:08:49 | 显示全部楼层

回帖奖励 +1 金钱

帮顶  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表