11128|17

20

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32F407+LWIP+ENC28J60中断方式实现数据接收 [复制链接]

 
demo是从xiaoyan大神的帖子http://www.openedv.com/thread-25178-1-1.html下代码移植过去的。demo(裸机)实现的功能如下:
实现了开发板作为客服端与远程服务器进行tcp/ip协议简单收发数据
实现DHCP动态分配IP功能
实现DNS功能
实现enc28j60采用中断方式接收网口的数据
实现简单判断网线是否插上


在此抛砖引玉,向前辈们请教几个问题。
以下代码中,有标志问题1和问题2。
1.问题1处,和服务器断开链接后,怎么还会收到空的数据帧?
2.err_t tcp_client_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)函数是客户端接收到数据后调用,那么和服务器断开链接后,假设问题1出程序程序能执行,但还能执行到问题2处吗?
3.自己的应用程序和LWIP内核回调程序是怎样一个运行流程?
4.怎样测试网络速度的快慢呢?
  1. //客户端接收到数据之后将要调用的函数
  2. err_t tcp_client_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
  3. {
  4.         err_t ret_err;
  5.         struct tcp_client_state* ts;
  6.         ts = arg;                               //TCP PCB状态
  7.         if(p==NULL)                       //如果从服务器接收到空的数据帧就关闭连接,???问题1
  8.         {   
  9.                 ts->state = ES_CLOSING;          //连接关闭了
  10.                 tcp_client_close(tpcb,ts);
  11.                 lwip_flag &=~ LWIP_CONNECTED;   //清除连接标志
  12.               printf("连接关闭了!1\r\n");
  13.             
  14.         }
  15.         else if(err!=ERR_OK)
  16.         {   //位置错误释放pbuf
  17.                 if(p!=NULL)
  18.                 {
  19.                     pbuf_free(p);
  20.                 }
  21.                 ret_err = err;                  //得到错误
  22.         }
  23.         else if(ts->state==ES_RECEIVED)
  24.         { //连接收到了新的数据
  25.         revdatalen = p->tot_len;
  26.               if((p->tot_len)>=LWIP_DEMO_BUF)
  27.                 {         //如果收的的数据大于缓存
  28.                     ((char*)p->payload)[LWIP_DEMO_BUF - 1] = 0;           
  29.                     memcpy(lwip_demo_buf,p->payload,LWIP_DEMO_BUF);
  30.                 }
  31.                 else
  32.                 {               
  33.                     memcpy(lwip_demo_buf,p->payload,p->tot_len);
  34.                     lwip_demo_buf[p->tot_len] = 0;                  
  35.                 }

  36.                 lwip_flag |= LWIP_NEW_DATA;     //收到了新的数据
  37.               tcp_recved(tpcb, p->tot_len);      //用于获取接收数据的长度,  表示可以获取更多的数据         
  38.                 pbuf_free(p);   //释放内存
  39.                 ret_err = ERR_OK;
  40.         }
  41.         else if(ts->state==ES_CLOSING) //???问题2
  42.         {   //服务器关闭了
  43.                 tcp_recved(tpcb, p->tot_len);        //远程端口关闭两次,垃圾数据
  44.                 pbuf_free(p);
  45.               ret_err = ERR_OK;
  46.               printf("连接关闭了!2\r\n");
  47.         }
  48.         else
  49.         {                                       //其他未知状态
  50.                 tcp_recved(tpcb, p->tot_len);
  51.                 pbuf_free(p);
  52.               ret_err = ERR_OK;
  53.         }
  54.         return ret_err;
  55. }
复制代码


STM32f4-LWIP Demo.zip

1.09 MB, 下载次数: 229

售价: 1 分芯积分  [记录]

此帖出自stm32/stm8论坛

最新回复

正好在学习使用,下来参考一下。   详情 回复 发表于 2021-4-28 22:49
点赞 关注(1)
 

回复
举报

2

帖子

1

TA的资源

一粒金砂(初级)

沙发
 
下来看看
此帖出自stm32/stm8论坛
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

板凳
 
不错下来参考一下
此帖出自stm32/stm8论坛
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
下来看看
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
正好我的中断接收老失败,参考一下
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
shoak 发表于 2017-10-19 10:11
正好我的中断接收老失败,参考一下

你好,我也正在搞这个,我是一进来就一直在中断里了,什么情况呀
此帖出自stm32/stm8论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 
正在调试ENC28,感谢了
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

8
 
看看
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
下载下来看看
此帖出自stm32/stm8论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

10
 
下载不了,能再发一遍吗
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 

下来看看,谢谢!

此帖出自stm32/stm8论坛
 
 
 

回复

137

帖子

0

TA的资源

一粒金砂(中级)

12
 

 STM32F407+LWIP+ENC28J60中断方式实现数据接收,要币,先评论赚币

此帖出自stm32/stm8论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

13
 
我是過來學習的
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 

学习学习

此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

15
 

学习学习 感谢!

此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
LwIP版本号
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

17
 

下载了文件数据损坏

此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 

正好在学习使用,下来参考一下。

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表