denike 发表于 2010-3-11 20:32:09

enc28j60+uip PING通 但是测试UDP收发数据不通

请教:STM32+enc28j60+uip PING通 但是测试UDP收发数据不通
写了一个基于uip的UDP收发数据的测试程序,其功能是:目标板接收到PC发来的以太网数据后返回接收到的数据给PC,可以PING通,但是收发不了数据,不知道是不是uip的配置弄错,还是其它什么原因,大家帮帮忙。UDP 初始化 和UDP回调函数如下(不知道是不是这样写):
u8_t data_buf={0},data_len=0,rec_ok_flag=0;

staticstruct uip_udp_conn *conn_tftp=NULL;
void example1_init(void)
{
//uip_listen(HTONS(1234));   //TCP
u16_t any;
   //远程IP为192.168.1.200
uip_ipaddr(any, 192, 168, 1, 200);
if(conn_tftp != NULL)
{
uip_udp_remove(conn_tftp);//如果连接已经建立,则删除之
}
conn_tftp = uip_udp_new(any, HTONS(1000)); //建立到远程ipaddr,端口为1000的连接
if(conn_tftp != NULL)
{
//绑定本地端口为1000
conn_tftp->lport = HTONS(1000);
}

}


void example1_app(void)
{
unsigned char i ;
u8_t cmd_data={0x55,0x06,0x2B,0x00,0x00,0x00,0x00,0x87};
if(uip_connected())
{
       uip_send("UART TO LAN V0.1\n",17);
      }
if(uip_newdata() || uip_rexmit() )
{
       for(i=0;i<uip_datalen();i++)
          {
          data_buf=*uip_appdata++;
          }
   data_len=uip_datalen();
   rec_ok_flag=1;
}
if (uip_poll())
    {
   if (rec_ok_flag)
    {
   uip_send(data_buf, data_len);
rec_ok_flag=0;
    }
else
{
   uip_send(cmd_data, 8);
}
}
}
void tcp_appcall(void)
{

}

小弟刚接触以太网不是很懂,不知道UIP哪里配置错,知道原因的朋友帮帮忙,谢谢!附上代码,帮忙看看
http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_537878.jpg
PING 通过 (原文件名:PING 192.168.1.5.jpg)

http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_537879.jpg
UDP数据没返回1 (原文件名:udp数据没返回.jpg)

http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_537880.jpg
UDP数据没返回2 (原文件名:UDP数据没返回2.jpg)

点击此处下载 ourdev_537881.rar(文件大小:1.47M) (原文件名:uip_0_9.rar)

denike 发表于 2010-3-12 14:21:34

不要沉 继续顶

denike 发表于 2010-3-12 20:12:29

难道没人知道吗??不是吧

denike 发表于 2010-3-14 22:45:00

继续关注

denike 发表于 2010-3-16 22:08:55

在顶

NJ8888 发表于 2010-3-16 22:12:58

你,收到UDP包先点灯,如果能点亮,说明是返回包的IP PORT信息不符合源端(PC端),所以PC收不到

denike 发表于 2010-3-19 00:20:35

楼上能说具体一些吗??

forestchen 发表于 2010-3-19 11:07:18

建议楼主再看看Uip的文档。你那个UDP的回调函数也不是作用在UDP的。估计你是从tcp的回调函数改过来的吧,有些指令不是用在UDP上的。而且,UDP的发送函数是 uip_udp_send(); 同时,uip的默认UDP回调函数是udp_appcall,如果你要改动,需要重新定义。

denike 发表于 2010-3-20 11:27:05

多谢楼上提醒 的确UDP的发送函数是 uip_udp_send(); 继续关注
现在没用那个UIP协议的 我用另外一个调试UDP TO CAN 成功了 也比较简单只要几个函数就可以了 没UIP复杂

a305566 发表于 2011-4-29 08:56:40

支持楼主分享

shuaishuai2599 发表于 2011-11-14 09:18:39

楼主能帮帮我吗?我现在在使用UIP协议栈,准备进行UDP通讯,但不知道UDP函数改怎么写,写完之后放到哪个位置,您能帮帮我嘛?348651265

w492901074 发表于 2012-8-3 17:04:05

最近也碰到类似问题,只接触UDP协议4天,继续看中。。。。。{:sleepy:}

dainqi10 发表于 2013-6-25 11:17:47

我用了别人一个51里移植的UIP 结果现在都ping不通,头疼中

wangkangming 发表于 2013-10-8 19:19:16

dainqi10 发表于 2013-6-25 11:17 static/image/common/back.gif
我用了别人一个51里移植的UIP 结果现在都ping不通,头疼中

您好!现在ping通了吗?我现在STM32+ENC28J60移植uip也ping不通呢?多指教

fangying712 发表于 2013-11-6 15:52:38

wangkangming 发表于 2013-10-8 19:19 static/image/common/back.gif
您好!现在ping通了吗?我现在STM32+ENC28J60移植uip也ping不通呢?多指教

估计是uip_ethaddr.addr里边没有初始化,我初始化之后就可以Ping通。在tapdev.c里边的tapdev_init();加上
for(i = 0; i<6 ; i++){
uip_ethaddr.addr = mymac;
}
页: [1]
查看完整版本: enc28j60+uip PING通 但是测试UDP收发数据不通