小学生
最后登录1970-1-1
在线时间 小时
注册时间2021-5-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;
}
}
}
![](https://www.firebbs.cn/forum.php?mod=image&aid=31028&size=300x300&key=b3c5499041526702&nocache=yes&type=fixnone) ![](https://www.firebbs.cn/forum.php?mod=image&aid=31027&size=300x300&key=8342466d0df4a4f5&nocache=yes&type=fixnone) ![](https://www.firebbs.cn/forum.php?mod=image&aid=31029&size=300x300&key=7676fa553cdbeadd&nocache=yes&type=fixnone) ![](https://www.firebbs.cn/forum.php?mod=image&aid=31032&size=300x300&key=5bd280566566749a&nocache=yes&type=fixnone) ![](https://www.firebbs.cn/forum.php?mod=image&aid=31031&size=300x300&key=b126957e4d6a5ff2&nocache=yes&type=fixnone) ![](https://www.firebbs.cn/forum.php?mod=image&aid=31030&size=300x300&key=58b7ac01f27758c4&nocache=yes&type=fixnone)
|
|