×
单片机 > 单片机程序设计 > 详情

网络通信之UIP在STM32上的移植

发布时间:2020-08-31 发布时间:
|

1、什么是UIP协议栈:

UIP是一种适用于小型嵌入式通信的TCP/IP协议栈,由瑞典计算机科学院的人开发编写的,它去掉了完整的TCP/IP中不常用的功能,简化了通讯过程,但其保留了网络通信中必须使用的协议,把设计重点放在IP、TCP和ARP协议的实现上。简单易用、占用资源少是它的设计特点。 

 

2、协议栈接口

UIP协议栈通过一系列接口函数与底层函数和上层应用程序通信,在两者之中,UIP接口函数处于中间。 其中UIP提供两个个接口函数给底层系统。分别是

(1)uip_input()

当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。同时将调用 uip_input() 函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。当 uip_input() 返回时,一个输出包同样放在全局缓冲区uip_buf里,大小赋给uip_len。如果uip_len 是0,则说明没有包要发送。否则调用底层系统的发包函数将包发送到网络上。

 

(2)uip_periodic()

 

uIP 周期计时是用于驱动所有的uIP 内部时钟事件。当周期计时激发,每一个TCP 连接都会调用uIP 函数uip_periodic() 。类似于 uip_input() 函数。uip_periodic()函数返回时,输出的IP 包要放到uip_buf中,供底层系统查询uip_len的大小发送。

 

 

UIP提供一个调用函数uip——appcall() 与 上位机应用程序通信。当uip在接收到底层传来的数据包后,直接调用uip_appcall()就可以把数据传送到上层应用程序进行处理。

 

 

系统底层其实在一开始时还需要调用初始化UIP的函数——uip_init(),主要是初始化协议栈的侦听端口和默认所有连接都是关闭的。

 

3、UIP协议栈在STM32上的移植

 

 

(1)DM9000A 初始化和UIP初始化;

tapdev_init(); uip_init();

(2)设置IP地址 

 uip_ipaddr(ipaddr, 192,168,1,10);

(3)设置默认的路由器地址 

uip_ipaddr(ipaddr, 192,168,1,1);

(4)设置网络掩码

  uip_setnetmask(ipaddr);

 

(5)当DM9000A接收到数据后会产生中断,这时候从DM9000A读取一个IP包,返回数据长度;

    uip_len = tapdev_read();

(6)校验处理数据包

BUF->type == htons(UIP_ETHTYPE_IP

(7)去除以太网帧头结构,更新ARP表

uip_arp_ipin();

(8)IP包处理

uip_input();


关键字:网络通信  UIP  STM32  移植 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯