毕业设计说明书
中文摘要
摘 要
在科学技术日新月异的今天,嵌入式系统已成为计算机领域的一个重要组成部分。嵌入式系统具有软件、硬件的可裁剪性,系统精简,具有高时效性,且功耗较低。由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器, 就可以使用任意一种Web浏览器接收和发送信息。本论文首先讨论了基于ARM Cortex-M3的嵌入式Internet技术,介绍了嵌入式网络通信技术的基础知识,然后根据嵌入式设备的特点,对标准TCP/IP协议进行了合理的简化,实现了符合ARM Cortex-M3单片机的嵌入式精简TCP/IP协议栈。在协议栈的基础上,实现了简单的嵌入式Web服务器。
本论文结合嵌入式技术、互联网通讯技术,介绍了嵌入式Web服务器的具体实现过程。论文采用STM32F103C8T6+ENC28J60的硬件构架,基于超文本传输协议(HTTP)传输控制数据和用户信息,设计了微型嵌入式WEB服务器,通过以太网和-据传输共享以单片机应用系统为中心的小型嵌入式设备的信息,实现了嵌入式系统的Internet接入,Internet上的远程用户就可以通过浏览器访问嵌入式Web服务器,进而实现对嵌入式系统的远程控制和监测。
关键字:STM32 WEB服务器 远程控制
I
英文摘要
Abstract
This system adopts the ST company Cortex-M3 kernel STM32 microprocessor STM32F103. STM32F103 is STMicroelectronics launched a new STM32 connection type (Connectivity) is a high performance products series of micro controller, the chip integrates a variety of standard high performance industrial interface, and different types of STM32 products in the pin and software with perfect compatibility, can be easily adapted to more applications. The new STM32 standard peripherals including 10 timer, two 12 1-Msample/s AD (ADC) (rapid alternating mode 2M sample/s), two of 12 DA (DAC), two I2C ports, five USART ports and three SPI ports and high quality digital audio interface IIS, and STM32F103 with a full USB (OTG) interface, two CAN2.0B interface, and Ethernet 10/100 MAC module. This chip can meet the industrial, medical, building automation, home audio and home appliances market a variety of products demand.. System is the main content of the network control is connected with the equipment and access to the equipment status and data informa-tion can be released; the webpage; timely response control command from the remote user. In addition, the embedded equipment with simple function, low power con-sumption and portability etc.
Keywords : STM32 Web server Remote control
II
目录
目 录
摘 要 ........................................................................................................................... I Abstract ......................................................................................................................... II 目录 ............................................................................................ 错误!未定义书签。 第一章 引言 ................................................................................................................. 1 1.1 课题的研究意义 ................................................................................................. 1 1.2 嵌入式的发展趋势 ............................................................................................. 1 1.3 嵌入式Web服务器 ............................................................................................ 2 1.4 嵌入式Web服务器的研究现状及关键问题 .................................................... 2 第二章 STM32系统的硬件平台 ................................................................................ 4 2.1 概述 ..................................................................................................................... 4 2.2 微处理器的选择 ................................................................................................. 4 2.3 以太网控制器的选择 ......................................................................................... 4 2.4 SPI通信协议 ........................................................................................................ 6 2.4.1 SPI接口的引脚描述 ...................................................................................... 6 2.4.2 SPI特征 .......................................................................................................... 6 2.4.3 数据发送与接收过程 .................................................................................... 7 2.5 网络模块硬件接口原理图 ................................................................................. 8 第三章 嵌入式web服务器TCP/IP协议栈 ............................................................... 9 3.1 概述 ..................................................................................................................... 9 3.2 嵌入式TCP/IP协议栈概述 ............................................................................... 9 3.3 嵌入式TCP/IP协议栈数据处理流程 ........................................................... 10 3.3.1 数据的发送过程 .......................................................................................... 10 3.3.2 数据的接收过程 .......................................................................................... 11 3.4 嵌入式 Web 服务器中TCP/IP栈的实现 ..................................................... 12 3.4.1 ARP协议实现 ............................................................................................. 12 3.4.2 ARP发送模块 .............................................................................................. 14 3.4.3 IP协议实现 .................................................................................................. 17
III
目录
3.4.4 ICMP协议实现 ............................................................................................ 19 3.4.5 TCP协议实现 .............................................................................................. 19 第四章 嵌入式Webserver的设计 ............................................................................ 22 4.1 HTTP协议的实现 ............................................................................................. 22 4.2 嵌入式WEB服务器的设计和实现 ................................................................. 26 4.2.1 Web 页面存储及网页数据 ......................................................................... 26 4.2.2 动态内容的处理及在线互动的实现 .......................................................... 27 4.3 协议栈和 Webserver 功能测试 ...................................................................... 29 4.4 Web应用设计 ................................................................................................. 29 4.4.1 基于嵌入式WEB服务器的应用系统调试 ............................................... 29 4.4.2 单板调试 ...................................................................................................... 30 4.4.3 联机调试 ...................................................................................................... 30 4.4.4 测试分析 ...................................................................................................... 32 4.5 本章小结 ......................................................................................................... 33 总 结 ........................................................................................................................ 35 致 谢 ........................................................................................................................ 35 参考文献 ..................................................................................................................... 35 附 录 ........................................................................................................................ 35
IV
第一章 引 言
第一章 引言
目前,网络化控制己成为远程控制的主要研究方向,利用网络实现对局域乃至全球范围内设备的监控是工业控制系统的发展趋势。嵌入式 Internet远程监控技术作为网络化控制的代表,它解决了工业控制领域中异构网络互联问题,提高了传统装备的智能化水平,促进了传统产业结构的调整。 嵌入式Web服务器尤其适用于嵌入式Internet应用,它通过Ethernet或Modem的连接可以轻松连接到任何网络,真正实现对设备的远程管理和控制。
1.1 课题的研究意义
一般互联网站都采用功能强大的通用Web服务器。随着网络各个核心部分业务量的提高其访问量和数据流量快速增长处理能力和计算强度也相应增大,使得单一设备根本无法承担。而且许多企业级应用系统的应用请求具有突发性和紧急性的特点。当应用访问急剧上升时容易造成网络瓶颈。解决这一问题的办法是采用多台嵌入式Web服务器,为一个应用服务集群负载均衡机制就是为解决多个网络设备之间实现合理的业务量分配而提出的。
嵌入式网络技术的目标是将小型简单的低成本嵌入式系统连接到网络,充分利用网络资源,实现更广范围的信息共享和更多类型的信息、服务。随着因特网的迅速发展,Web应用越来越广泛。由于Web技术的开放性和平台特性,大大降低了软件系统和通信系统的设计、维护工作量,节省了人员培训费用,提高了现场测试和控制设备的管理水平。
1.2 嵌入式的发展趋势
嵌入式技术的发展以及对未来工业将产生的巨大影响已经引起世界各国的高度关注.欧盟认为,嵌入式技术是IT领域中发展最快的内容,并将保持巨大技术发展和商业应用机会。嵌入式系统的应用领域非常广泛,在产业发展中的重要性仍在持续提升,欧盟统计,在2003年,全球大约有80亿片嵌入式可编程微处理器。到2010年全球有160亿片嵌入式可编程微处理器,地球上平均每人有三个处理器。在2013年,这个数字还将持续增长。
- 1 -
第一章 引 言
1.3 嵌入式web服务器
嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。它具有“嵌入性”、“专用性”与“计算机系统”三个基本要素。在当今数字信息技术、网络技术迅速发展的时代,嵌入式系统已经无处不在,并将不断涌现出新的嵌入式系统产品。
嵌入式Web服务器是一个Web服务器引入领域的测试和控制设备,在硬件平台和相应软件系统的支持下,它改变了传统的测量和控制使用的TCP / IP设备的通信协议,以网络技术为核心的网络测试和控制的并基于Internet的设备。Web应用系统与传统系统相比,简化了系统结构,把信息收集和传播信息的集成到现场测量控制设备。运用标准的接口和通信协议,从Web服务器的嵌入式设备也可以向任何连接到网络的合法用户提供统一的操作和控制界面。由于Web技术的开放性和平台无关的特性,大大降低了软件维护、软件系统和通信系统设计的工作量,节省了人员培训费用,提高了测试和控制现场设备管理水平。高端嵌入式设备快速发展,硬件成本显著下降,有的嵌入式系统硬件已经与通用计算机接近。同时随着Internet的迅速发展,网络化的嵌入式产品已经成为IE产业的最大增长点,将嵌入式设备接入Internet将成为一种必然。
1.4 嵌入式Web服务器的研究现状及关键问题
在中国,嵌入式系统开发已经有20多年的历史,从事嵌入式开发的工程师有数十万,但大多数是几个人的小组。现今,我们面对的式嵌入式的工业化潮流,如果不能正确的认识到这一点,那么我们将错过上游产品开发的机遇。
嵌入式Web服务器主要具有以下优点:
1.统一的客户界面:客户端只需要一个通用的浏览器,解决了统一用户界面的问题。
2.平立性:浏览器所运行的平台与嵌入式Web服务器所在的平台无关,
- 2 -
第一章 引 言
真正实现了跨平台。
3.高可扩展性:服务器端可以在任何需要的时候进行功能的增强与扩展,而且管理员通过客户端即可完成这些操作,实现了远程管理和控制。
4.并行性与分布性:嵌入式Web不仅实现了跨平台,也是一个多处理机系统和分布式系统,可并发的处理多个不同用户的服务请求。
嵌入式web技术就是要实现嵌入式系统连接到网络,要求嵌入式系统在软件上实现有关的Internet通信协议,解决数据的封装、编码及发送接收等问题;在硬件上具有一定的计算和存储能力,提供高效处理IP数据包需要的网络带宽和吞吐量。
由于嵌入式系统自身的特点,按照传统PC的方法将嵌入式系统接入网络存在很大的困难。其困难在于,Internet上面的各种通信协议对于计算机存储器、运算速度等方面的要求比较高,而嵌入式系统中除部分犯位处理器以外,大量存在的是8位和16位嵌入式MCU,它们存储容量小,运行速度较慢,支持TCP/IP等Internet协议将占用大量系统资源。另外,传统的TCP/IP协议在实现实时性方面做得不够好,它把大量的精力花在保证数据传送的可靠性以及数据流量的控制上。而在实时性要求比较高的嵌入式领域中,传统的TCP/IP不能满足其实时要求。
因此,从简洁实用的角度出发,需要把传统TCP/IP在不违背协议标准的前提下加以改进实现,使其实现性得到提高,占用的存储空间尽可能少,以满足嵌入式应用的要求。
- 3 -
第二章 STM32系统的硬件平台
第二章 STM32系统的硬件平台
2.1 概述
嵌入式硬件平台包括处理器、外围的控制电路、只读存储器、可读写存储器、外围设备和网络控制单元。由于嵌入式系统芯片的多样性,各模块芯片都有较大的选择空间。在选择上述硬件平台模块的具体芯片时,通常需要考虑它们的功能、功耗、封装、体积、成本、可靠性、电磁兼容性等方面,并在尽量满足应用需求的同时尽量减少冗余功能,以节约成本。本文根据实时监控的需要选择实验平台各模块的芯片。
2.2 微处理器的选择
该系统要求直接接入网络,其中要运行嵌入式TCP/IP协议栈并最终实现一个嵌入式Web服务,要求CPU具有一定的数据处理能力及足够大的程序存储空间,而且要求价格低廉,以便于量化的生产。在此选用32位嵌入式微处理器。
本文选用了一款基于ARM Cortex-M3内核芯片—由意法半导体(ST)推出的STM32F103芯片。STM32F103是意法半导体推出全新STM32互连型(Connectivity)系列微控制器中的一款性能较强产品,此芯片集成了各种高性能工业标准接口,且STM32不同型号产品在引脚和软件上具有完美的兼容性,可以轻松适应更多的应用。该系列微处理器工作频率为72MHz,内置高达256K字节的Flash存储器和K字节的SRAM,具有丰富的通用I/O端口。
STM32F103拥有全速USB(OTG)接口,两路CAN2.0B接口,以及以太网10/100 MAC模块,非常适合本系统的要求。作为最新一代的嵌入式ARM处理器,它为实现MCU的需要提供了低成本的平台、缩减的引脚数目、降低的系统功耗,同时提供了卓越的计算性能和先进的中断响应系统。丰富的片上资源使得STM32F103系列微处理器在多种领域如电机驱动、实时控制、手持设备、PC游戏外设和空调系统等都显示出了强大的发展潜力。
2.3 以太网控制器的选择
嵌入式设计人员越来越需要将连接功能加入应用之中。以太网是局域网
- 4 -
第二章 STM32系统的硬件平台
(LAN)的主要联网技术,可实现局域网内的嵌入式器件与互联网的连接。嵌入式系统有了以太网连接功能,单片机便可经网络分发数据,并通过遥控方式进行控制。以太网因其架构、性能、互操作性、可扩展性及开发简便,已成为嵌入式应用的标准通讯技术。
Microchip Technology(美国微芯科技公司)推出全球首枚28引脚以太网控制器,可为嵌入式应用提供低引脚数、低成本且高效易用的远程通讯解决方案。设计人员可采用Microchip的ENC28J60以太网控制器,创建占位小、成本低、精简的嵌入式网络应用。
在此之前,嵌入式设计人员在为远程控制或监控提供应用接入时可选的以太网控制器都是专为个人计算系统设计的,既复杂、又占空间,且比较昂贵。目前市场上大部分以太网控制器采用的封装均超过80引脚,而符合IEEE802.3协议的ENC28J60只有28引脚,就能既提供相应的功能,又可以大大简化相关设计,并减小占板空间。此外,ENC28J60以太网控制器采用业界标准的SPI串行接口,只需4条连线即可与主控单片机连接。这些功能加上由Microchip免费提供的、用于单片机的TCP/IP软件堆栈,使之成为目前市面上最小的嵌入式应用以太网解决方案。
ENC28J60以太网控制器的主要特点包括:
符合IEEE 802.3:内置10Mbps以太网物理层器件(PHY)及媒介接入控制器(MAC),可按业界标准的以太网协议可靠地收发信息包数据;
可编程过滤功能:特殊的过滤器,包括Microchip的可编程模式匹配过滤器,可自动评价、接受或拒收Magic Packet™、单播(Unicast)、多播(Multicast)或广播(Broadcast)信息包,以减轻主控单片机的处理负荷;
10Mbps SPI接口:业界标准的串行通讯端口,低至18引脚的8位单片机也具有网络连接功能;
可编程8 KB双端口SRAM缓冲器:以高效的方式进行信息包的存储、检索和修改,以减轻主控单片机的内存负荷。该缓冲存储器提供了灵活可靠的数据管理机制。
- 5 -
第二章 STM32系统的硬件平台
2.4 SPI通信协议
SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等
2.4.1 SPI接口的引脚描述
表2-1 SPI的引脚描述
引脚名称 SCK NSS 类型 串口时钟 从设备选择 描述 作为主设备的输出,从设备的输入 从机选择。SPI从机选择信号是一个低有效信号 MISO 主设备输入/从设输出引脚 该引脚在从模式下发送数据,在主模式下接收数据 该引脚在主模式下发送数据,在从模式下接收数据 MOSI 主设备输出/从设备输入引脚 2.4.2 SPI特征
1.3线全双工同步传输。
2.带或不带第三根双向数据线的双线单工同步传输。 3.8或16位传输帧格式选择。 4.主或从操作。 5.支持多主模式。
6.8个主模式波特率预分频系数(最大为fPCLK/2)。 7.从模式频率(最大为fPCLK/2)。
- 6 -
第二章 STM32系统的硬件平台
8.主模式和从模式的快速通信。
9.主模式和从模式下均可以由软件或硬件进行NSS管理,主/从操作模式的动态改变。
10.可编程的时钟极性和相位。
11.可编程的数据顺序,MSB在前或LSB在前。 12.可触发中断的专用发送和接收标志。 13.SPI总线忙状态标志。
14.支持可靠通信的硬件CRC,在发送模式下,CRC值可以被作为最后一个字节发送。
2.4.3 数据发送与接收过程
在接收时,接收到的数据被存放在一个内部的接收缓冲器中;在发送时,在被发送之前,数据将首先被存放在一个内部的发送缓冲器中。
对SPI_DR寄存器的读操作,将返回接收缓冲器的内容写入SPI_DR寄存器。处理数据的发送与接收,当数据从发送缓冲器传送到移位寄存器时,设置TXE标志(发送缓冲器空),它表示内部的发送缓冲器可以接收下一个数据;如果在SPI_CR2寄存器中设置了TXEIE位,则此时会产生一个中断;写入SPI_DR寄存器即可清除TXE位。
注:在写入发送缓冲器之前,软件必须确认TXE标志为„1‟,否则新的数据会覆盖已经在发送缓冲器中的数据。
- 7 -
第二章 STM32系统的硬件平台
2.5 网络模块硬件接口原理图
图2-1 网络模块原理图
上图所引出来的NET_INT,MISO,MOSI,SCK,NET_CS,NET_RST分别对应STM32F103的PB12,PA6,PA7,PA5,PA4,NRST管脚,这样连接起来就可以构成完整的硬件设计。
- 8 -
第三章 嵌入式Web服务器TCP/IP协议栈
第三章 嵌入式Web服务器TCP/IP协议栈
3.1 概述
嵌入式 Web 服器的协议主要有两个,TCP/IP协议和HTTP协议。T C P / I P起源于6 0年代末美国资助的一个分组交换网络研究项目,到9 0年代它已经成为计算机之间最常应用的组网形式。它是一个真正的开放系统,协议族的定义及其多种实现是免费的。
在嵌入式Web服务器设计中,浏览器成了设备的前端控制板,web服务器可以向任何接入它所在网络的合法用户提供统一的基于浏览器方式的操作和控制界面。而HTTP引擎是Web服务器的核心,Web服务器同Web浏览器之间的通信是通过HTTP协议进行的,这一通用的、无状态的、面向对象的协议是Web浏览器和Web服务器之间的应用层协议,是建构在TCP/IP协议基础之上的。用一句话概括,TCP/IP协议是计算机与internet之间互联的基础,而HTTP引擎是web服务器的核心技术。
3.2 嵌入式TCP/IP协议栈概述
嵌入式系统本身就是可裁剪的系统,同样,他可以根据自己的需要对TCP/IP协议栈进行删减,设计自己的协议族。在嵌入式web服务器中,考虑到STM32F103的处理速度,只需要保留TCP/IP协议栈的基本功能,满足系统需要即可,主要能够实现的协议有ARP,IP,ICMP,TCP协议。
TCP/IP协议栈根据功能的不同进行分层,每一层完成特定的功能,并且服务于上、下层。TCP/IP协议栈主要分为四层:网络接口层、网络层、传输层、应用层。网络接口层的主要作用是提供网络层和物理层之间的接口。网络层的作用是IP寻址、封装数据、错误处理和诊断等。应用层直接面向用户,运行的主要是HTTP协议。
- 9 -
第三章 嵌入式Web服务器TCP/IP协议栈
应用层:HTTP协议 传输层:TCP协议 网络层:IP (ARP、RARP、ICMP) 网络接口层:Ethernet、SLIP、PPP 表3-1 嵌入式TCP/IP 协议栈结构图
3.3 嵌入式TCP/IP协议栈数据处理流程
TCP/IP协议栈数据处理过程主要分两个部分。第一部分是对接收到的以太网数据包进行处理,即数据帧的解包过程。第二部分主要是对将要发送的数据进行打包,使用以太网数据包的格式发送出去,使该网络内所有的计算机都能接受到数据。在数据处理的这两个主要功能之前,程序应该做好初始化工作。
应用层:无 传输层:TCP协议 网络层:IP、ICMP协议 网络接口层:ARP应答协议 表 3-2 TCP/IP协议子集
3.3.1 数据的发送过程
发送过程描述为:首先初始化程序,进入主循环,然后发送ARP数据包,
判断TCP服务是否开启,若没有开启返回初始化。开启TCP 服务后,判断TCP是否处于监听状态,若是返回初始化。继续判断TCP是否超时,超时则返回初始化,然后判断ARP发送请求位,-1则返回初始化,不是则进行TCP发送。
- 10 -
第三章 嵌入式Web服务器TCP/IP协议栈
图 3-1 数据发送图
3.3.2 数据的接收过程
数据接收过程描述:程序的主循环中,首先初始化,然后判断接受的数据包是否为以太网数据帧,如果是检测以太网数据帧首部,判断是否为ARP数据帧,如果是ARP数据帧则进行ARP数据处理子程序,如果不是ARP数据帧,处理IP数据首部,判断是否为ICMP数据帧,如果是则进行ICMP处理,反之判断是否为TCP数据包,如果是则进行TCP数据处理,反之判断为错误帧,选择丢弃。
- 11 -
第三章 嵌入式Web服务器TCP/IP协议栈
图3-2 嵌入式TCP/IP协议栈处理数据流程图
3.4 嵌入式 Web 服务器中TCP/IP栈的实现
3.4.1 ARP协议实现
ARP协议指的是“Address Resolution Protocol”(地址解析协议)的缩写。在以太网中,两台主机之间通信必须知道对方的MAC地址。目标MAC地址通过地址解析协议获得。地址解析是指主机发送数据前将目标IP地址转换成MAC地址的过程。ARP协议的主要作用就是通过目标设备的IP地址获得目标设备的MAC地址,是通信顺利进行。
- 12 -
第三章 嵌入式Web服务器TCP/IP协议栈
ARP程序第一步检测以太网帧的类型字段,根据以太网类型字段来判断其协议类型。在以太网标准中,一个携带ARP消息的以太网其类型字段必须包含十六进制值0806。第二部,检测消息中的操作字段并根据这个消息字段来确认是一个请求消息还是一个应答消息。当它是一个请求消息时,ARP程序比较目标IP地址与自己的IP地址,如果一样,则要回发一个应答消息。
程序流程如下图:
图3-3 ARP协议解析图
- 13 -
第三章 嵌入式Web服务器TCP/IP协议栈
3.4.2 ARP发送模块
ARP发送模块主要任务便是ARP消息的发送,WEB服务器发送消息时,消息嵌入到以太网帧中广播出去并且匹配合适IP地址,由这台计算机做出应答流程图如图3.3所示
图3-4 ARP发送数据包过程
ARP协议接受模块主要负责接收ARP数据,ARP的接收采用软中断方式,程序
ARP发送过程
ENC28J60Init(mymac); //ARP初始化函数
init_ip_arp_udp_tcp(mac, ip, wwwport);//初始化以台网IP层
if (eth_type_is_arp_and_my_ip(buf, plen))
{
make_arp_answer_from_request(buf); //arp 数据发送
- 14 -
第三章 嵌入式Web服务器TCP/IP协议栈
continue; }
其中ENC28J60Init函数原型
void ENC28J60Init(unsigned char* macaddr) {
ENC28J60_CSH();
enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET); // do bank 0 stuff
NextPacketPtr = RXSTART_INIT; // Rx start
enc28j60Write(ERXSTL, RXSTART_INIT&0xFF);
enc28j60Write(ERXSTH, RXSTART_INIT>>8); // set receive pointer address
enc28j60Write(ERXRDPTL, RXSTART_INIT&0xFF);
enc28j60Write(ERXRDPTH, RXSTART_INIT>>8); // RX end
enc28j60Write(ERXNDL, RXSTOP_INIT&0xFF); enc28j60Write(ERXNDH, RXSTOP_INIT>>8); // TX start 1500
enc28j60Write(ETXSTL, TXSTART_INIT&0xFF); enc28j60Write(ETXSTH, TXSTART_INIT>>8); // TX end
enc28j60Write(ETXNDL, TXSTOP_INIT&0xFF);
- 15 -
第三章 嵌入式Web服务器TCP/IP协议栈
enc28j60Write(ETXNDH, TXSTOP_INIT>>8); //do bank 1 stuff, packet filter enc28j60Write(ERXFCON,
ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN); enc28j60Write(EPMM0, 0x3f); enc28j60Write(EPMM1, 0x30); enc28j60Write(EPMCSL, 0xf9); enc28j60Write(EPMCSH, 0xf7); enc28j60Write(MACON1, MA-CON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS); enc28j60Write(MACON2, 0x00);
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, MACON3, MA-CON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN|MACON3_FULDPX);
enc28j60Write(MAIPGL, 0x12); enc28j60Write(MAIPGH, 0x0C); enc28j60Write(MABBIPG, 0x15);
enc28j60Write(MAMXFLL, MAX_FRAMELEN&0xFF); enc28j60Write(MAMXFLH, MAX_FRAMELEN>>8); // do bank 3 stuff // write MAC address
// NOTE: MAC address in ENC28J60 is byte-backward enc28j60Write(MAADR5, macaddr[0]); enc28j60Write(MAADR4, macaddr[1]);
- 16 -
第三章 嵌入式Web服务器TCP/IP协议栈
enc28j60Write(MAADR3, macaddr[2]); enc28j60Write(MAADR2, macaddr[3]); enc28j60Write(MAADR1, macaddr[4]); enc28j60Write(MAADR0, macaddr[5]);
//配置PHY为全双工 LEDB为拉电流
enc28j60PhyWrite(PHCON1, PHCON1_PDPXMD); // no loopback of transmitted frames
enc28j60PhyWrite(PHCON2, PHCON2_HDLDIS); // switch to bank 0 enc28j60SetBank(ECON1) // enable interrutps
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, EIE,
EIE_INTIE|EIE_PKTIE); // enable packet reception
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); }
3.4.3 IP协议实现
IP协议提供了不同网络的主机之间数据包的连接服务,是TCP/IP的基础。IP层协议在本次设计中主要实现的是验证IP报文的正确和对TCP和ICMP报文实行分流。
1.IP协议发送实现
在本系统中,只使用到IP协议两项最基本的功能,即处理接收到的IP数据报和负责对TCP报文、ICMP报文进行封。
- 17 -
第三章 嵌入式Web服务器TCP/IP协议栈
IP发送函数的流程图如图3.4所示。
图3-5 IP发送流程图
2.IP接收的实现
Web服务器接收到数据帧时,开始判断太网首部中的帧类型字段。IP数据报的字段应该是0x0800.如果判断为IP数据报,则将此数据交给IP进行处理。根据IP协议,程序会对数据报IP地址字段与本机IP地址进行匹配,若不一致,则丢掉该数据。IP处理程序将严格按照以上的过程接收处理数据并进行处理,函数的流程图如下图3.5所示。
- 18 -
第三章 嵌入式Web服务器TCP/IP协议栈
图3-6 IP接受函数流程图
3.4.4 ICMP协议实现
ICMP是一种路由报告错误或提供有关意外情况信息的报文机制。它并不是的一部分,准确的说他应该是IP大的一部分。在每个IP实现中必须有它。在本系统中,只要实现回送请求和回送应答就足够了。
3.4.5 TCP协议实现
TCP协议是web服务器系统的核心。在设计嵌入式Web服务器时,系统应用层只需支持HTTP协议。嵌入式web服务器把要传送的数据存入网页的相关位置。对于任何TCP连接,每次只需支持HTTP协议发送网页服务。在嵌入式这样的系统中,资源十分有限,因此要精简TCP协议。
建立TCP连接需要三次握手。
第一次握手:需要服务器在网络端建立TCP同步报文(SYN),目的端口号是80 (Http服务),源端口号是1225,序列号是0(相对序列号)。
第二次握手:由服务器发送一个TCP同步报文和一个响应(SACK)报文,源端口号是80,目的端口号是1225,序列号是0,接收序列号是1。
- 19 -
第三章 嵌入式Web服务器TCP/IP协议栈
第三次握手:在数据请求端收到一个TCP同步和响应(SYNC+ACK)报文之后,再向嵌入式Web服务器发送一个响应报文,目的端口号是80,序列号是1,接受序列号是1,源端口号是1255。
TCP协议的软件实现:
make_tcp_ack_from_any(buf); // send ack for http get
make_tcp_ack_with_data(buf, plen); // send data
continue; } }
// tcp port www end
下面是make_tcp_ack_from_any函数原型 void make_tcp_ack_from_any(unsigned char *buf) {
unsigned int j; make_eth(buf); // fill the header:
buf[TCP_FLAGS_P]=TCP_FLAGS_ACK_V; if (info_data_len==0) {
make_tcphead(buf,1,0,1); // no options }
- 20 -
第三章 嵌入式Web服务器TCP/IP协议栈
else {
make_tcphead(buf,info_data_len,0,1); // no options }
// total length field in the IP header must be set: // 20 bytes IP + 20 bytes tcp (when no options) j=IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN; buf[IP_TOTLEN_H_P]=j>>8; buf[IP_TOTLEN_L_P]=j& 0xff; make_ip(buf);
// calculate the checksum, len=8 (start from ip.src) + TCP_HEADER_LEN_PLAIN + data len
j=checksum(&buf[IP_SRC_P], 8+TCP_HEADER_LEN_PLAIN,2); buf[TCP_CHECKSUM_H_P]=j>>8; buf[TCP_CHECKSUM_L_P]=j& 0xff;
enc28j60PacketSend(IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+ETH_HEADER_LEN,buf); }
- 21 -
第四章 嵌入式webserver的设计
第四章 嵌入式Webserver的设计
4.1 HTTP协议的实现
超文本传输协议(HTTP)用来构建分布式信息系统,是主要用在万维网(WWW)上的存取数据的协议。它建立在TCP/IP协议之上属于应用层的协议。
HTTP协议最初的版本是0.9版本,经历了1.0版本,发展到现在的1.1版本。在这次的web服务器设计中使用HTTP1.1版本,HTTP1.1增加了显示缓存控制,允许在一个TCP下进行连接多个HTTP事务处理。HTTP协议建立在TCP协议的基础之上。并利用80端口实现TCP数据传输。在设计HTTP协议时,最主要的部分是HTTP的请求和响应。
做Web服务器时,服务器系统被动接收请求。首先分析用户请求是否合理,并通过分析请求报文的内容,获得数据信息,最后返回Web页面文件。本系统在报文方面的处里主要对报文关键字段数据的修改,报文其他基本内容不变。系统设计的重点放在对GET, POST方法的请求和响应处理上。GET方法是用户从服务器读取文档。POST方法是用户存入服务器文档。系统设计的第二个重点在报文主体关键字段数据的提取和修改上。而对GET, POST之外的其它类型请求则不提供支持。
1.GET请求
一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过方法。指定提交方式为GET或者POST,默认为GET提交。GET请求用于读取文档,文档的地定义在URL中。服务器通常将文档的内容放在响应报文的主体中作为响应,除非出现了差错。
2.POST请求
响应报文包括一个状态行、一个首部、有时也包含一个主体,状态行定义响应报文的状态。状态码字段反应响应的状态。100系列的代码是非正式的,200系列的代码则指示成功的请求,300系列的代码是将客户重新定向到另一个URL,400系列的代码指示在客户端的一个差错,500系列的代码指示在服务器
- 22 -
第四章 嵌入式webserver的设计
端的一个差错。
其实现过程:
图4-1 HTTP协议接收处理流程图
其中,URL的计算方法是URL中个字段ASCII码之和。URL的识别方法是判断URL两端空格。在处理POST方法时,浏览器端提交的控制数据位于请求消息的实体部分。请求消息的实体可以由两个连续的CRLF(\\r\\n)字符来识别,控制数据则可以依据“变量名=值”的格式来识别。在HTTP协议数据帧的发送过程中,因为TCP报文数据字段的长度有,网页内容分段传输。
- 23 -
第四章 嵌入式webserver的设计
HTTP协议完整的软件实现过程:
if (strncmp(\"GET \ {
// head, post and other methods: // for possible status codes see: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
plen = fill_tcp_data_p(buf, 0, PSTR(\"HTTP/1.0 200 OK\\r\\nContent-Type: text/html\\r\\n\\r\\n
goto SENDTCP; }
if (strncmp(\"/ \
{
plen = fill_tcp_data_p(buf, 0, PSTR(\"HTTP/1.0 200 OK\\r\\nContent-Type: text/html\\r\\n\\r\\n\"));
plen = fill_tcp_data_p(buf, plen, PSTR(\"
Usage: \")); plen = fill_tcp_data(buf, plen, baseurl);
plen=fill_tcp_data_p(buf,plen,PSTR(\"password
\")); goto SENDTCP; }cmd = analyse_get_url((char *) &(buf[dat_p + 5])); // for possible status codes see: if (cmd ==(u8)-1) {
- 24 -
第四章 嵌入式webserver的设计
plen=fill_tcp_data_p(buf,0,PSTR(\"HTTP/1.0401 rized\\r\\nContent-Type:text/html\\r\\n\\r\\n
goto SENDTCP; // 三次握手过程; }
if (cmd == 1) {
//LEDA、LEDBON();
i = 1; }
if (cmd == 0) {
//LEDA、LEDOFF(); i = 0; }
plen = print_webpage(buf, (i)); SENDTCP :
make_tcp_ack_from_any(buf); // send ack for http get
make_tcp_ack_with_data(buf, plen); // send data
continue; }
Unautho-
- 25 -
第四章 嵌入式webserver的设计
}
// tcp port www end
4.2 嵌入式WEB服务器的设计和实现
本次设计嵌入式Web服务器的基本功能如下。
1.实时数据显示、信息发布。服务器将各设备的实时状态以动态显示的方式发布到网页上。客户通过访问Internet查询设备状态
2.设备参数控制。参数控制包括设备运行参数和设备状态参数。本次设计的系统接收到客户提交的参数设备请求后,执行参数写入操作。
3.网络控制。实现用户通过Internet远程控制设备,系统在接收到用户的远程控制求情后,通过下发指令给驱动系统,控制设备运行。达到用户远程控制的目的。
4.访问权限。只有权限达到要求的用户才可以访问相应的控制系统。而权限的设置主要是服务器的认证。
嵌入式Web服务器基于系统应用设计和实现,屏蔽了操作系统和硬件的差异,使得嵌入式Web服务器应用可以适应不同平台。
4.2.1 Web页面存储及网页数据
嵌入式Web服务器系统与传统的Web服务器相比较,对系统结构进行裁剪,在测控设备中进行信息采集和信息发布。嵌入式Web服务器存储设备的容量是有限的,由于这个硬件的,它就难以达到计算机上web服务器那样存储大量的静态HTML网页,嵌入式web服务器返回给浏览器的页面都是动态生成的。在本次设计嵌入式web服务器中,将web页面和程序代码固话到K的FLASH中。
html文件头的格式及内容如下所示: HTTP/1.1 200 OK\\ n Cache-control: no-cache\\ n Connection: Keep-Alive\\ n
- 26 -
第四章 嵌入式webserver的设计
Content-Length: 775\\ n Content-Type: text\\html\\ n \\n
网页文件是利用html编辑软件编辑(如微软OFFICE的FRONTPAGE开发软件)生成Web页面,然后把页面代码分别保存在buffer[]数组中。
4.2.2 动态内容的处理及在线互动的实现
在本次设计的系统中,服务器是作为对硬件设备的远程监控来使用的,所以服务器提供了对动态变化的被监视内容的服务。利用CGI(Common Gateway Interface,通用网关接口)原理可以在嵌入式协议上实现动态网页。
CGI技术是通用网关接口技术,是指一段运行在服务器上的程序,为客户端的HTML页面提供接口。并为我们提供了HTML无法做到的功能。HTML无法记住客户的信息不能把信息记录到特定的文件里,要把信息记录到服务器的硬盘里,这就需要CGI技术。CGI程序通过环境变量、命令行参数、标准输入输出与WWW服务器进行通讯,传递有关参数和处理结果。
CGI作为HTML的补充,它的使用是十分必要的。CGI作为接口的规范,用来处理客户输入的数据,一般指游览器输入。客户通过游览器向服务器发出请求,服务器启动相应的CGI服务程序。它可以将客户的求情内容转换为服务器可识别的格式。处理完成后,再由CGI将服务器处理出的数据转换为游览器能识别的数据,发送给客户。
服务器获取的客户端传输数据的格式为: name[1]=value[1] name[2]=value[2] name[3]=value[4] name[nl=value[n],
name[i]指的是变量名,是表单中输入域的名字;value[i]是变量值,它是用
- 27 -
第四章 嵌入式webserver的设计
户在表单中某输入域输入的值。客户端传输数据的过程中,每行“name=value”串由“&”分隔。环境变量CONTENT TYPE可以获得数据编码的类型。
本设计的web服务器通过在游览器下HTML表单对变量进行远程修改,从而控制远程设备LED 的闪亮。
对LED灯的控制可以通过以下步骤进行说明: 1.Web服务器上对LED灯的控制的HTML代码如下:
当用户填写了表单LED ON并递交时,通过GET方法将改变的数据返回到服务器。
2.浏览器连接到Web服务器,并发出如下请求: GET /?on=on HTTP/1.1 ……………
Accept-Language: zh-cn Accept-Encoding:gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 2.0.50727)
- 28 -
第四章 嵌入式webserver的设计
host: 202.110.209.163 Connection: Keep-Alive
在上面的代码GET /?on=on中,远程用户填写的表单中选中了ON选项,即让LED发光的命令。这样就实现了用户的远程控制。
4.3 协议栈和 Webserver 功能测试
TCP/IP一个分层的协议。分层协议的特点就在于为上层提供服务和接口,并屏蔽下层的实现细节。简单的来说,对于一个WEB Server为了能为客户端浏览器提供网页服务,就需要应用层协议HTTP来实现对网页数据的传输。而HTTP则需要传输层协议TCP来建立连接并实现差错重传等机制以实现可靠传输。TCP协议将数据打包后交付网络层协议IP,IP协议将实行尽力传输,将数据进行转发到离主机最近的下一层。当然,具体的数据包需要在物理链路上进行传输,必然需要底层网卡驱动和与底层使用的具体网路协议相关的模块支持。
换句话说,如果能通过客户端访问STM32开发板上的WEB Server,并且能够在客户端浏览器上得到网页的正常显示,则说明该TCP/IP协议能为上层应用提供网络通讯服务,从而验证该协议栈的可行性。
该应用系统构建起来非常简单,把控制对象简化为LED指示灯,如果是其它控制对象,原理也是一样的,然后用网线把嵌入式Web服务器接入以太网即可。这时就可以通过标准浏览器与嵌入式Web服务器进行动态交互,在本控制网络中,就可以通过浏览器来控制LED指示灯的亮和灭,从而达到远程设备监控的目的。
4.4 Web应用设计
4.4.1 基于嵌入式WEB服务器的应用系统调试
嵌入式Web服务器基本配置如下: IP地址:192.168.0.23 子网掩码:255.255.255.0
- 29 -
第四章 嵌入式webserver的设计
默认网关:192.168.0.1
基于嵌入式WEB服务器的应用系统的调试分为单板调试和联机调试两步来完成。
4.4.2 单板调试
这部分主要是对系统底层进行调试,也是系统正常工作的基础所在。电路连接好并确定无硬件问题后,需要判断网络芯片是否正常工作。
在对网络芯片的调试过程中,首先是通过单片机和ENC28J60执行发数据操作,利用示波器观察STM32F103C8T6的SPI接口PA6(MISO),PA7(MOSI)管脚上的波形,确定当前的SPI工作是否正常。如果数据波形正确,说明SPI通信正常,则进一步测试SPI通信是否正确。
调试方法有很多种,还有一种方法就是向网络控制芯片ENC28J60的PHY模块LED控制寄存器写入不同的数据,不同的数据对应不同的LED的闪烁状态。其对应关系见下表:
表 4-1 寄存器设置
寄存器配置位 1000 1001 1010 1011 LEDA状态 点亮 熄灭 快速闪烁 慢速闪烁 LEDB状态 点亮 熄灭 快速闪烁 慢速闪烁 这样,改变PHY模块LED控制寄存器相应的配置位,电路板上的2个LED指示灯的闪烁状态会发生改变。如果闪烁状态与写入的配置位不对应,则可以肯定硬件通信有问题。
4.4.3 联机调试
这部分上作是在嵌入式系统与PC机之间进行的,将PC机及嵌入式WEB服务
- 30 -
第四章 嵌入式webserver的设计
器都接到交换机上。通过交换机上的LED的状态可以大致判断网络连接情况。构建一个网络系统后,一般要对网络性能进行测试。用来评估网络性能的五项指标是:可用性、响应时间、利用率、吞吐量及带宽容量。网络可用性和响应时间是用来确定网络是否正常工作,网络上主机是否连通;网络利用率是指网络被使用的时间占总时间(即被使用的时间+空闲的时间)的比例;网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽;网络带宽容量指的是在网络的两个节点之间的最大可用带宽。
因为使用的是现成的以太网,所以没有必要花精力去考虑网络的整体性能,我们更关心的是嵌入式Web服务器的自身情况,因此只要测试一下络性能的前两项指标即可。
考虑到测试的方便,本次测试选择在嵌入式Web服务器与局域网内的任一电脑之间进测试。
1.Ping功能测试
确定网络可用性和响应时间,最简单的方法是使用ping命令。通过向远端的机器发送icmp echo request,并等待接收icmp echo reply来判断远端的机器是否连通,网络是否正常工作。
计算机某时刻对本嵌入式Web服务器执行ping命令的情况。由图可以看出,嵌入式Web服务器与远端计算机能够连通,控制网络能够正常工作。
- 31 -
第四章 嵌入式webserver的设计
图4-2 Web服务器执行ping命令的响应
上图中time表示数据包往返时间,该值可以反映当前网络的大体速度;TTL最大值为128,每经过一个路山器数值减1,当数值减为零时数据包丢弃,所以从该值可以判断数据的大致流程。Bytes表示当前数据包的长度。
2.Web测试
Web测试主要是检测远端客户机能否通过标准浏览器访问嵌入式Web服务器提供的资源,这里主要测试对被控设备的控制和监测,即对LED指示灯显示内容的远程控制。只要在远端客户机浏览器URL地址栏中输入:http: //192.168.1.23通过该界面就可以控制LED指示灯的亮灭。如图所示:
图 4-3 浏览器控制界面
4.4.4 测试分析
通过前面的试验可以看出,系统一切工作正常,说明ARP,ICMP,IP,TCP,HTTP协议都己正确运行。系统基本上可以达到设计的要求,硬件电路板功能稳定。系统实现了上位机与现场数据通过Internet的交互,能够实时的进行数据传输。
上述一系列测试的成功,说明通过嵌入式Web服务器实现了对被控设备的远程控制和监测,达到了预期的目的。
- 32 -
第四章 嵌入式webserver的设计
4.5 本章小结
本章分析和实现嵌入式系统的HTTP防议和动态交互技术,并讨论了嵌入Webserver的安全性,设计并实现了一个嵌入式Web服务器,嵌入式Web服务器程序可以检查用户访问权限、根据用户请求显示和更改设备状态,具有传输速率高,可靠性强,访问方便的特点,最后对协议栈和Web服务器进行了功能测试。本文的方案真正实现将嵌入式系统直接与Internet相连,并能方便实时的对设备进行监控,具有广泛的应用前景。
- 33 -
总结
总 结
1.经过几个学期的努力和学习,我终于完成了web服务器从总体方案设计到
各单元电路方案设计的整个过程,对服务器系统有了比较深刻的理解。
2.首先,在整个设计过程中,我遇到最大的问题是关于协议栈和整个设计的框架问题,不知道从哪里入手,不明白通信的过程,在这上面花费了很长时间。幸运的是最后我掌握了整个系统的控制过成。无论再难的事情,只要肯付出努力,慢慢地去揭示其中的奥秘,就一定能够收获可喜的回报。
3.其次,我感到不熟悉的地方是对STM32资源的了解,这部分扩宽了我的专业知识面。
4.最后,对我来说,软件编程一直是我的弱点,这几个月的学习中,我把大部分时间都放在了软件编写上,这对我来说是个挑战。我在查找资料,复习编程语言,不断练习之后,终于完成了软件控制部分,弥补了我的不足。
5.在做该课题的过程中,我也复习了我大学四年学到的电路分析基础、数电、模电以及单片机等方面的知识,第一次把学到的硬件知识与软件设计结合使用,第一次了解到,原来利用我的专业知识可以做出工业、生活中这么实用的东西。这使我对本专业有了更加浓厚的兴趣。
6.做本课题的这段时间里,我学会了如何利用网络资源,把一个最初连框架都不太了解的系统,凭借自己的能力做了出来。这段时间,我遇到了很多难题,在不断到网上查找资料和不断翻阅书籍之后,我把问题一一解决了。我想在以后步入社会的工作中,即使是本专业相关的工作,我们都要重头学起,那是一个自己找资料,自己不断学习,从而不断成长的过程。这次的毕业设计就给了我一个自己学习的机会,并使我感受到了成功的乐趣。
- 34 -
致谢
致 谢
这次毕业设计我是在柳宝虎老师的指导下完成的,在他的指导下,我少犯了很多不必要的错误,更有效率的完成了我的课题设计。我要衷心的感谢他对我的帮助和悉心指导。他广博的知识和严谨的治学态度,让我受益匪浅。我以后要向老师学习,在工作中细心,谨慎,不断努力使得自己的工作完成地更加完美。遇到不懂的地方要自己查资料,培养正确的解决问题的思路,自己实在不能解决的问题再去咨询周围的人,努力地做一个有思想、有能力的人。
最后,我还要感谢学校领导,感谢所有帮助过我的老师和同学,谢谢你们!
- 35 -
参考文献
参考文献
[1] 沙占友等.单片机外围电路设计. 北京:电子工业出版社,2003 [2] 美 Berger,A.著吕骏译《嵌入式系统设计》. 电子工业出版社,2002.9 [3] 马洪连等,《嵌入式系统设计教程》. 电子工业出版社,2006.6
[4] 周立功. ARM 嵌入式系统基础教程[M].北京:北京航空航天大学出版社 [5] 周立功著. ARM 微控制器基础与实战[M].北京:北京航空航天大学出版社,
2003
[6] 马争鸣著. 《TCP/IP 原理与应用》.冶金工业出版社2006
[7] 周叶丹. 嵌入式Internet技术研究及Web服务器实现:[硕士学位论文].南京:
河海大学计算机应用技术2005.5
[8] 王晓菊.潘琢金.杜睿 嵌入式网络接口模块设计及协议实现[期刊论文]-沈阳
航空工业学院学报 2007
[9] 刘伟.崔永锋.吴相林 TCP/IP协议在远程单片机控制系统的设计[期刊论文]-微计算机信息 2007
[10] 姚光开,于永棠,柴乔林. 微型 TCP/IP 协议栈的设计与实现. 计算机应用,
2003,23(9):82-84
[11] 卿立军.嵌入式Internet中轻量级TCP/IP协议栈的研究与实现[D]:[硕士学位
论文].长沙:湖南大学,2004
[12] 刘汉轮.嵌入式系统的INTERNET接入实现[J].南京:工业控制计算机,2003,
16(12):21-24
[13] 张满怀.嵌入式TCP/IP协议研究与实现[J].广州:广东工业大学学报.2001.4 [14] Microchip Technology Inc.ENC28J60 Data Sheet.2006
[15] Wang Hongyuan.Shi Guodong and Xia Deshen. Flexible neural network and its application.Pattern Recognition and Artificial Intelligence ,2002
- 36 -
附录
附录
- 37 -
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务