淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 开源电子网 公众平台:“正点原子” 官方网站:www.alientek.com 联系电话:13922348612 ddddd ALIENTEK 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 RAW_UDP实验 适用平台 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ENC28J60 模块 (正点原子) ddddd 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 本视频重点参考资料 参考资料: 1,探索者STM32F407开发板 《STM32F4 LWIP开发手册》——LWIP无操作系统移植 2,以太网参考资料 《STM32F4xx中文参考手册》-第29章 以太网(ETH) 3,LWIP参考资料 《嵌入式网络那些事LWIP协议深度剖析与实战演练》 作者:朱升林 4,LAN8720参考资料 见光盘:硬件资料芯片资料 ① LAN820A.pdf 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 目录 RAW编程接口 1 LWIP UDP组织结构 2 RAW_UDP实验例程 3 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
RAW_UDP实验 声明 本视频所有有关LWIP原理部分的内容均参考自《嵌入式网络那些事LWIP协议深度剖析与实战演练》,并且已经征得作者朱升林先生的同意。在此,感谢朱升林先生的支持。
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 1、RAW编程接口 LWIP有3种编程接口,分别为:RAW、NETCONN和SOCKET。 RAW:RAW编程接口不需要操作系统的支持,可以直接裸机使用LWIP,但是RAW编程接口比较复杂!RAW使用的是回调机制,需要大家了解回调函数。 NETCONN和SOCKET:这两种编程接口都需要有操作系统的支持,否则的话没法使用,但是这两种接口使用起来比较简单。 至于究竟使用哪一个就看自己的需求了,建议在实际项目中使用NETCONN或SOCKET编程接口,开发难度低。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、LWIP UDP组织结构 2.1、UDP协议简介 UDP协议中文名字就是用于数据包协议,是OSI参考模型中的传输层协议,、是一种无连接的(TCP是面向连接的)、不可靠的传输协议。UDP协议只是尽可能的将应用层的数据发送出去,不提供任何的浏览量控制、报文确认等,也就是说当报文发送以后是无法得知报文是否安全完整的到达目的主机的。 UDP协议的优缺点: 缺点:因为UDP自身没有确认机制来确认数据包是否正确的发送到目的主机,因此UDP报文有可能丢失、出错等,那么针对于UDP报文的丢失和出错那就需要应用程序来处理了。 优点:由于现如今的网络环境可靠性高、延时低,因此UDP协议也不是那么的不堪一击,相反由于UDP协议省去了建立连接,数据确认、流量控制等一系列的过程,因此UDP的协议代码量少,处理过程简洁,实时性好!因此适合那些对轻微的数据差错不敏感的应用,如网络电话和网络视频等。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、LWIP UDP组织结构 2.2、端口号 我们在使用UDP或者TCP传输数据的时候都是将数据传递个制定主机的,但是在实际使用中可能同时有多个软件来使用网络,比如在使用电脑的时候我们会登陆qq,网页,邮箱等等,那么我如何知道这个网络数据发送给那个应用的呢?这里就引用了端口号这个概念,使用端口号来区分不同的应用的。这样的话我们就可以使用IP地址确定好目的主机,然后在使用端口号确定目的主机中的应用程序。 端口号范围为0~65535,端口号不是随便可以用的,有一些端口号叫公认端口号,这些公认端口号我们就不能使用,公认端口号范围为:0~1023,比如21端口分配给了FTP,25端口分配给了SMTP,80端口分配给了HTTP。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、LWIP UDP组织结构 2.3、UDP组织形式 LWIP中使用UDP控制块来描述UDP,UDP控制块是UDP协议最核心的东西,UDP控制块是一个结构体,这个结构体在udp.h中定义。 struct udp_pcb { IP_PCB; //宏IP_PCB中的各个字段 struct udp_pcb *next; //指向udp_pcb,用于将控制块组织成链表 u8_t flags; //控制块状态字段 u16_t local_port, remote_port; //本地端口号和目的端口号 udp_recv_fn recv; //处理数据的回调函数 void *recv_arg; //传递给回调函数的参数 }; 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、LWIP UDP组织结构 下面我们重点说一下recv字段,recv字段指向的是一个函数,这个函数需要我们来编写,当内核收到报文并匹配到某个控制块以后通过函数指针recv来回调这个我们编写的处理函数,recv指向的是udp_recv_fn类型的,udp_recv_fn如下: typedef void (*udp_recv_fn) (void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port); arg:表示将传递给函数的用户自定数据。 pcb:指向接收到报文的UDP控制块结构。 p: 指向接收到的报文。 addr:表示发送该报文的的源主机地址。 port:表示发送该报文的源主机端口。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、LWIP UDP组织结构 UDP控制块链表如下:
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 2、UDP协议 2.5、RAW_UDP相关API函数 在使用RAW编程接口方式下使用UDP协议的话主要使用到如下表中几个函数: 函数 描述 new_udp() 新建一个UDP的PCB控制块。 udp_remove() 将一个PCB控制块从链表中删除,并释放这个控制块的内存。 udp_bind() 为UDP的PCB绑定一个本地IP地址和端口号。 udp_connect() 连接到指定IP地址主机的指定端口号,其实就是设置PCB控制块的remote_ip和remote_port。 udp_disconnect() 断开连接。 udp_send() 通过一个PCB控制块发送数据 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 3、RAW_UDP实验例程 打开我们开发板配套的raw_udp实验工程,其中udp_demo.c为本实验的实验文件,本文件中一共有5个函数,如下表: 函数 描述 Udp_demo_set_remoteip() 设置远端IP地址,UDP连接的时候要要用到这个地址 Udp_demo_test() UDP实验测试函数,本实验的主要内容就在这个函数里面 Udp_demo_recv() UDP接收数据的回调函数,回调函数是要我们自己编写的 udp_demo_senddata() 发送数据,通过这个函数可以将我们要发送的数据发送出去 udp_demo_connection_close() 关闭UDP连接 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com