智能车制作

 找回密码
 注册

扫一扫,访问微社区

STM32论坛
查看: 1520|回复: 0
打印 上一主题 下一主题

STM32F429 UCOSII NETCONNECT TCP客户端 网口通信问题,求大神解惑!!!

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
22
威望
14
贡献
8
兑换币
4
注册时间
2016-12-6
在线时间
0 小时
毕业学校
万里
跳转到指定楼层
1#
发表于 2016-12-6 09:25:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

参考NETCONN_TCP客户端实验

稍作修改在UCOS任务列表中只有一个TCP客户端任务
该任务不做任务切换 ,无限循环执行该任务

while(1)
{
netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY);//发送数据
}

循环发送conn为新创建的netconn连接,tcp_sbuffer为520字节数组首地址,长度520字节。

此处图中Kbps 有误,实际为KBps这点我已经确认过了。得到网速约(7MB/S)。

while(1)
{
netconn_recv(conn,&recvbuf);//仅接收数据,数据不作任何处理
netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY); //发送数据

}

此处图中Kbps 有误,实际为KBps这点我已经确认过了。得到网速约(55KB/S)。


问题一:此函数netconn_recv(conn,&recvbuf)为网口接收函数,加了此函数严重影响通信速度,小弟想通过读取寄存器标志或其他状态标志判断网口是否接收到数据,使网速依旧能保持(7MB/S)如:

while(1)
{
if(ETH_Handler.RxFrameInfos.length>60)//接收到数据
{
//解析接收到的数据
}
netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY); //发送数据
}

这样做确实可以让发送速度保持在(7MB/S)但是这个判断存在问题, TCP自身协议通信如握手包,NAK包等通信时ETH_Handler.RxFrameInfos.length该值也会改变。
这个值是从网口中断服务函数void ETH_IRQHandler(void)中得到的。
有没有大神知道网口通信可以通过读取哪个寄存器或者判断哪个标志可以判断接收到网口数据了?或者采用其他的方式,只需网速能保持在(3MB/S)以上即可。


问题二:

while(1)
{
netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY);//发送数据
}


仅发送函数无限循环,无接收函数,TCP服务器发送数据20次后程序停止,硬件仿真程序一直在网口中断服务函数,大神知道原因吗?
以下为修改过的程序源码:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-12 10:57 , Processed in 0.041125 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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