电子产品世界 » 论坛首页 » 嵌入式开发 » ARM » 从零开始使用uIP


共47条 1/5 1 2 3 4 5 ›| 跳转至

从零开始使用uIP

高工
2014-10-09 21:33:15    评分

      在玩树莓派的过程中搭建了一个web服务器并在此基础上安装了一个开源论坛discuz,算是认识了网络吧。正好手头上有个任务也需要用到简单的网络通信,通过网页在配置一些参数。就把STM32做成一个简单的web服务端。树莓派的进程终止了一段时间就去完成小任务了。现在做的差不多了,来此分享一下最近的一点点收获。也希望大神们指点指点!!!

     原本是打算用LwIP的,因为LwIP相比uIP来说功能较为齐全,无奈时间太紧,就先用比较有把握的uIP来整了,之后有时间了再去琢磨琢磨LwIP,有啥心得体会再继续和网友分享。

     此贴内容是从uIP的移植--->简易web服务器  (抛砖引玉)


     顶楼就贴出之后需要的一些基本材料:

     USR-TCP232.rar  (网络调试助手工具)

     uIP-1.0源码.rar

     amo的编程小工具集合V1.2.6.rar

     uIP_Go.rar    (STM32工程模块,带有ENC28J60程序)

     STM32库函数代码自动生成器正式版.rar

     硬件方面:

     STM32F103VET6 (一位小学弟画的开发板,俺就在这里用用)

     ENC28J60网络模块 (以前的存货)

     


     一、移植篇    代码:uIP_Go_移植篇代码.rar

     二、webserver体验一   网页文件以及代码: webserver体验一部分的代码.rar 

     三、webserver体验二   网页文件以及代码: webserver体验二部分代码.rar 

  

    如果帖子中有何错误还有代码中有何不足,希望大家指点,支持开源共享




关键词: uIP     移植     web     STM32    

高工
2014-10-09 21:35:31    评分
2楼
移植

先瞧瞧uIP在系统中的位子:

        

硬件驱动是需要提前完成,然后和uIP挂接。应用层则是咱所要实现的功能。

1、从源码中取出uIP协议栈核心部分以及用于硬件挂接的文件:

     

    将上图中所指文件添加到工程中:

    

修改uip_dev下的文件:

按照上图的顺序来:

第一个文件:clock-arch.h  


第二个文件:(tapdev.c这里完成网卡驱动的3个函数


第一个函数(tapdev_init(void))这个网卡驱动

const u8 _macaddr[6] = {'l','i','k','l','o','n'}; 

//只要与局域网内其他网卡MAC地址不同即可

/*----------网卡驱动根据用户自己的网卡来填写-----------------*/

u8

tapdev_init(void)

{

u8 res,i;

res = ENC28J60_Init((u8 *)_macaddr);  //配置网卡的MAC地址

    for(i = 0;i < 6;i++){

uip_ethaddr.addr[i] = _macaddr[i];

}

ENC28J60_PHY_Write(PHLCON,0x0476); //网卡驱动函数在顶楼的工程模板里有

return res;

}

第二个函数(tapdev_read(void))


/*---------------------------------------------------------------------------*/

unsigned int

tapdev_read(void)

{

return ENC28J60_Packet_Receive(MAX_FRAMELEN,uip_buf);

}

/*---------------------------------------------------------------------------*/

第三个函数(tapdev_send(void))


/*---------------------------------------------------------------------------*/

void

tapdev_send(void)

{

ENC28J60_Packet_Send(uip_len,uip_buf);

}

/*---------------------------------------------------------------------------*/

个文件:(tapdev.h这里直接过

个文件:(uip_conf.h 配置文件,根据需要配置



个文件:(clock-arch.c 时钟部分


#include "clock-arch.h"

#include "timerx.h"

extern u32 uip_timer; //timerx.c

/*---------------------------------------------------------------------------*/

clock_time_t

clock_time(void)

{

  return uip_timer;

}

/*---------------------------------------------------------------------------*/

修改完了之后开始编译,发现有很多错误

1、..\uip\uip.h(1180): error: #20: identifier "uip_tcp_appstate_t" is undefined

2、


3、


4、现在没有写应用程序,下面这些警告不用管


5、


6


7


8


9


10


11



现在编译应该是没有错误和警告了.......................(还没移植完哟,咱继续)


开始搬运代码:(搬过来的代码中设置IP等根据具体情况设置)


然后将while(1)里面的代码全部复制,搞成一个新的函数:


现在我们程序的主函数是:





高工
2014-10-09 21:35:48    评分
3楼

Webserver () 


将上图中的webserver加入到工程文件夹中:





编译一下,有20个警告都是出自远httpd_fsdata.c中,这个文件是存文件信息的地方,咱先不管,进入到http_fsdata.c中,把数组都给删掉,保留下面的结构体作个参考。


到此先设计一个网页再说,用Dreamweaver可视化网页设计工具来整,毕竟在网页方面咱不是专业的....


在顶楼以及分享了amo的编程小工具集合。开始把文件转为数组:




再去httpd_strings.c和httpd_strings.h添加自己的文件:




加上上图所示的强制类型转换可以去除警告。

这样还没完,去应用程序的回调函数看看:


这个函数是处理交互信息的,现在先修改程序把我们的网页送上去。在主函数中添加监听80端口



首先检查是否可以ping通:


然后上浏览器:


点击下面那个邀请链接后,到了这里:



高工
2014-10-09 21:36:00    评分
4楼
Webserver (二)

这一部分就实现网页上get方式提交表单。

在上一个网页代码中添加一个表单:



采用的GET方式,其格式是   /文件名?变量=变量值&变量=变量值

那么在程序中就按照这个去解析:



打开浏览器输入IP 192.168.201.2


程序里写的是把提交的数字显示出来:


到此帖子已经完结了,鼓励大家开源共享,互相交流。希望大家能够共享出自己的经验提供给网友学习...


院士
2014-10-10 09:16:13    评分
5楼
资源全部通过审核

专家
2014-10-10 11:32:36    评分
6楼
太牛了,我学习嵌入式linux就一直没坚持下去

助工
2014-10-10 17:58:49    评分
7楼

厉害



高工
2014-10-10 23:14:58    评分
8楼
辛苦老大了,又有一个附件

高工
2014-10-10 23:15:52    评分
9楼
这个现在也学得不深,论坛有活动,和大家一起玩有意思一点

工程师
2014-10-12 21:33:47    评分
10楼
默默的点赞

共47条 1/5 1 2 3 4 5 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]