原创 在stm32上采用ENC28J60+uip1.0实现udp通信的笔记

2010-1-25 20:35 12233 14 19 分类: MCU/ 嵌入式

在stm32上采用ENC28J60+uip1.0实现udp通信的笔记
一、移植中要做的修改(相当简单):
1、修改tapdev.c 中的tapdev_init(),tapdev_read(),tapdev_send();
void tapdev_init(void)
{
 Enc28j60Init(mac_addr);
}
unsigned int tapdev_read(void)
  {
    return Enc28j60PacketReceive(uip_buf, UIP_BUFSIZE );
  }
void tapdev_send(void)
{
 Enc28j60PacketSend(uip_buf, uip_len);
}
2、uip.h中的必要的配置及数据类型的定义;
3、uip.h中定义两个宏UIP_APPCALL(),UIP_UDP_APPCALL();
二、关于UIP_APPCALL(),UIP_UDP_APPCALL()
这两个宏定义为应用程序的两个函数.uip_udp_appcall()在uip_process中被调用两次,一次是在uip_input时,被调用以供用户提取有用的udp数据,uip_appdata该向长度为uip_len的udp数据包;另一次是在uip_process(UIP_UDP_TIMER)或者uip_process(UIP_UDP_SEND_CONN)时被调用,用来打包用户要发送的数据,只要在将数据填充到uip_appdata指针处,然后调用uip_udp_send(len),就可以完成数据的发送.


uip在udp通信时显得非常的不方便.
先从接收数据开始,在设备准备接收外部数据前,必须得先与对方建立一个连接,也就是将对方的IP信息赋给连接表,uip_input()完成接收的数据的解析,而只有当收到数据的来源与主机有连接的时候,数据包才会被接受,响应UIP_UDP_APPCALL();不禁的问一下,我要收数据,我是客户端,我如何知道主机的IP?难道这些东西都得约定好,固定不变?要这样当然也是可以的,但是通常情况似乎不是这样.所以,要程序移植时,这项功能的修改是必要的.
在发送方面,uip的udp发送要在uip_udp_appcall()中作出响应,而且也是以连接为通信基础.这似乎不符合我们的程序设计要求,把发送函数写为udp_sendto(addr,rport,lport)肯定更方便.所以,本人对程序进行修改,在uip_udp_appcall()中响应接收,将接收到的数据保存在缓冲中,然后交给程序进行功能解析,当要发送响应时,调用udp_sendto().
三、uip不方便使用中断执行tapdev_read();
由于接收与发送共用缓冲区,决定了它不可能在保证执行效率下,使用中断接收.要使用中断,你得为uip_buf另添buf区.


应用中只用到了uip的udp部分,该部分已经调试完成,应用层实现了uip_udp_read(),uip_udp_sendto()两个函数,调用方便;
通过测试,性能并不完美,ping响应时间<=1ms,出错率在1/500左右,有待更多优化,欢迎交流、指教。

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户1697522 2013-8-2 16:04

博主,能否发一份完整的程序给我看一下呢???1751640975@qq.com谢谢!

用户377235 2013-1-21 22:04

抱歉打搅了 ,现在正在利用stm32+enc28j60实现UDP发送,遇到一个不小的问题,能否参考下您的例程,非常感谢啊!pogft@126.com

用户377235 2012-4-3 21:16

工厂生产MHL转HDMI适配器,需要联系best-ideal@Hotmail.com或者电话15817307029

用户377235 2012-3-5 23:22

您好,现在我在学习stm32+enc28j60的UDP收发,能不能发一份源码参考一下呢?非常感谢啊!ysumry@63.com

用户419902 2012-2-2 21:59

标准制定的目的就是为移动设备提供高清的音视频接口。MHL针对移动应用做了优化,比如可以用更少的管脚进行信号传输,连接时可以对移动设备进行充电等

用户1353976 2012-1-30 11:49

通讯接口更新太快了,我们做芯片的真是不停的更新自己的设计啊 hdmi才刚好,又要考虑其他接口了

用户1125082 2012-1-16 16:15

不错,学习了解。

用户1054515 2012-1-16 14:09

哎呀妈呀,

用户1437952 2012-1-14 18:14

好东西啊,不知道什么时候能大规模地普及啊

用户974050 2012-1-11 15:54

需要MHL和HDMI桥接芯片的请联系Calvin@bilway.com
相关推荐阅读
用户1410124 2010-08-09 12:09
通过自定义HID设备实现PC与STM32之间灵活的双向通信
本文记录利用STM32的USB设备以HID方式实现与PC的自定义包大小通信的上下位机开发过程.关键字: USB, HID, HID读写,Report Descriptor要解决的问题 : 假定某一串行...
用户1410124 2010-01-13 15:40
VC++项目开发全程实录[视频教程全集]
快速链接  http://www.songxiaolong.com/go/43629.html ...
用户1410124 2009-12-19 10:07
VC论坛
VC论坛:     1.编程先锋         http://wlbookwl.myrice.com   (后起之秀,实力可畏,吐血推荐!)         2.Visual   C++-MFC开发...
用户1410124 2009-12-19 09:54
堆和栈的区别
一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其    操...
用户1410124 2009-05-31 15:32
uC/GUI跑起来了
uC/GUI跑起来了,拿出来晒晒^_^ mdk里弄的,lpc2138上跑的,proteus里仿的,12864LCD显示的,纯虚拟环境,实在是方便啊,没上OS,下一个脚印当然就是OS++啦。 ...
EE直播间
更多
我要评论
5
14
关闭 站长推荐上一条 /3 下一条