• 1.35 MB
  • 2022-04-22 11:31:57 发布

电子信息工程毕业论文基于stm32无线数据基站的设计和实现(1).doc

  • 38页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'本科毕业设计(20届)题目基于stm32无线数据基站的设计和实现学院电子信息学院专业电子信息工程姓名陈洁班级09091813学号09918307指导教师周磊完成日期20年3月 诚信承诺我谨在此承诺:本人所写的毕业论文《基于stm32无线数据基站的设计和实现》均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。承诺人(签名):年月日 摘要随着人们的生活及其生产水平的不断提高,对生活中各种数据接收的速度和准确度的要求就显得尤为重要,无线数据收发控制就是一个典型的例子,因此无线数据基站就是现代生产生活中应运而生的一种智能、快捷、方便可靠的检测系统。本设计通过STM32F107控制无线收发模块从无线网络节点接收数据,进行相关处理后通过以太网把数据发送至应用服务器。系统的用户统用户通过Internet网络访问应用服务器,其中本设计起到网桥和防火墙的作用。其中本设计中采用的以太网控制器为DM9161芯片。本设计软件部分的主要工作是在硬件平台的基础上实现TCP/IP协议栈,由于TCP/IP协议栈较复杂,功能实现比较困难,一般选择成熟的TCP/IP协议栈进行移植,此次选择开源并且较成熟的LwIP以太网协议栈。关键词:STM32F107以太网DM9161TCP/IP协议栈 ABSTRACTWiththecontinuousimprovementofpeople"slivesandtheirproductionlevels,thethelifedatareceptionspeedandaccuracyrequirementsisparticularlyimportant,wirelessdatatransceivercontrolisatypicalexample,thewirelessdatabasestationismodernproductionlifecameintobeingasmart,fast,convenientandreliabledetectionsystem.ThisdesignSTM32F107controlwirelesstransceivermodulereceivesdatafromthewirelessnetworknodesrelatedviaEthernettransmitsdatatotheapplicationserver.ThesystemusersystemuseraccesstotheapplicationserverthroughtheInternet,includingthedesignplayaroleofbridgeandfirewall.DM9161Ethernetcontrollerchipusedinthedesign.ThesoftwarepartofthedesignworkisimplementedinhardwareplatformbasedontheTCP/IPprotocolstack,theTCP/IPprotocolstackismorecomplex,andmoredifficulttoachieve,usuallyselectedmatureTCP/IPprotocolstackfortransplantation,thechoiceopensourceandthemorematureLwIPEthernetprotocolstack.Keywords:STM32F107EthernetDM9161TCP/IPProtocolstack 目录1引言12概述22.1课题研究的背景22.2国内外stm32控制以太网技术发展现状及趋势32.3研发方向和技术关键42.4主要技术指标43总体设计53.1系统方案选择与论证53.2系统软件总体结构63.3本章小结74硬件设计94.1主控芯片STM32F10794.2STM32串口通讯124.3DM9161用法介绍164.4本章小结205以太网协议215.1TCP/IP协议215.2嵌入式TCP/IP协议栈226软件设计266.1主程序设计266.2系统初始化子程序276.3RS232通讯子程序286.4网口通讯子程序286.5本章小结297结论30致谢31参考文献32附录33-33- 1引言随着人们的生活及其生产水平的不断提高,对生活中各种数据接收的速度和准确度的要求就显得尤为重要,无线数据收发控制就是一个典型的例子,因此无线数据基站就是现代生产生活中应运而生的一种智能、快捷、方便可靠的检测系统。目前,无线网络标准按照通讯距离的不同分为WAN、WLAN、PAN。比较主流的无线技术有蓝牙、3G、HomeRF、WI-FI、WIMAX、GPRS、CDMA、UWB等。其中WI-FI运用最为广泛,其运用主要在WLAN/MESH领域。无线网络推动了数据通信进入了新的里程碑,让办公、工作、学习不再受“线”制。方便实现了移动办公,组建临时工作组,召开紧急会议等不在需要复杂的布线拆线,无线覆盖区域直接可以通过无线进行通信。校园环境等,可以让师生在任何环境,可以在广场、在草坪、在体育场地等任意位置连接上Internet。随着无线网络在各个领域的成功案例及人们对它的关注程度,无线网络定是未来通信的发展方向,也定能在各领域中得到很好的应用。本设计通过stm32控制无线收发模块从无线网络节点接收数据,进行相关处理后通过以太网把数据发送至应用服务器。系统的用户统用户通过Internet网络访问应用服务器,其中本设计起到网桥和防火墙的作用。其中本设计中采用的以太网控制器为DM9161芯片。-33- 2概述2.1课题研究的背景近几年来,随着科学技术日新月异的发展,计算机科技的快速发展,特别是互联网的快速普及,互联网在人类活动中也越来越紧密联系,尤其是对于工业控制和信息电器领域中同样有着越来越重要的应用。同时计算机,通讯,消费电子三合一的快速发展,数字化时代已经到来。而嵌入式接入设备是数字化时代的一大主流标志,形态各异的计算机,通讯,消费电子三合一产品也将是网络接入设备的一大主流。因为PC机以及现有的Internet技术可以实现对非网络设备进行远程控制的部分的要求,而且成本费用较高,可靠性和期望值也有一定的距离,所以这种方案并没有被广泛的接受和使用。由于嵌入式设备具有低成本高性能的特点,而现今对嵌入式系统的开发研究和嵌入式技术也都进入到了一个成熟的阶段,将嵌入式系统和网络相结合来实现非网络系统的网络控制,那么世界可能就是另一番景象。因特网技术的成熟,使得网上提供的信息更加丰富,应用项目也更加多样,人们对网络的需求也越来越广泛,利用PC机上网来查阅和发布各类信息等对于网络的日常应用已经不能满足人们的需求。像传统的电器,电冰箱,微波炉,电视,空调等,这类电子设备的功能也不在单一,电器结构也更为复杂,也逐步开始应用嵌入式网络接入,使用户可以通过网络就能实现远程控制,信息通讯。同样,互联网在全球范围内的连通性,那些能够连接因特网的设备也成为人们选择产品中考虑的一大问题,通过Internet对家用电器等非网络设备进行远程控制已经成为现今主流。而一些小型轻便的设备,比如一些医学仪器上的身体上使用的传感器,体积小而且便宜,内存小,运算能力有限,因此必须在资源受限的情况下实现TCP/IP协议甚至处理接受到的信息。TCP/IP协议可以分为四个层次,从底层到最高层分别是物理层和数据链路层,网络层,传输层,和最高层的应用层。物理层和数据链路层是TCP/IP协议的最低层,要求提供给上层一个访问接口,以便传递IP分组信息。网络层是第二层,也是整个TCP/IP协议栈的核心,其功能是把分组发往目标网络或主机,源主机与目的主机可以在同一个网上,也可以在不同的网上。其中定义了分组格式和协议,即IP协议,来对分组进行排序。IP协议是一种不可靠、无连接的数据报发传送服务的协议,提供的只是一种尽力而为的服务。传输层是第三层,负责在应用进程中的端到端之间的通信。传输层定义了两种服务质量不同的协议,TCP和UDP。TCP-33- 是一种可靠的面向连接的协议,允许将源主机的字节数据流无差别的传送到目的主机。同时能够完成流量的控制功能,协调收发主机之间的发送和接受速度,从而控制正确的传输。应用层是最高层,其中也包括了很多协议:文件传送协议,简单邮件传送协议,简单网络管理协议,超文本传送协议等。LwIP是瑞士计算机科学院一个开源的TCP/IP协议栈实现。LwIP是LightWeightIP协议,有无操作系统都可以运行,其实现的重点是在保持TCP/IP协议的主要功能的基础上减少对内存的占用,一般只需要几百字节的RAM和40K左右的ROM就可以运行,这使得LwIP成为在资源受限的情况下实现及处理TCP/IP协议的解决方法。LwIP可以支持多网络接口下的IP转发,提供专门的内部回调接口RawAPI,这样可以提高应用程序性能。像LwIP的目标系统是最小限度系统,所使用的操作系统通常不能在内核与应用层进程之间维持一个严格的保护屏障。这里允许使用一种比较宽松的通许机制,通过共享内存的方式实现应用层与底层协议族之间的通讯。应用层可以知道底层协议使用的缓冲处理机制,这使得应用层可以有效的重复使用缓冲区。同样,应用层与网络代码使用的是相同的内存区,那么应用层就可以直接读写内部缓冲区。2.2国内外stm32控制以太网技术发展现状及趋势中国的嵌入式系统开发走过了二十多年的历程,有超过数十万名从事开发应用的工程师,但大多数以上是几个人的小组以孤军奋战的封闭方式开发几乎不可重用的软件。今天面对的是嵌入式系统工业化的潮流,如果不能认识到嵌入式软件必须以工业化的方式生产开发,不理解在短时间内装配集成“数百人/年”的嵌入式产品,那么将失去更多的上游产品的市场机遇。嵌入式软件方面逐渐形成了系统软件、应用软件的架构。国际上用于信息电器的嵌入式操作系统有40种左右。其中,国外涌现了一些著名的嵌入式操作系统,如:Vxworks、pSOS、WinCE、RTEK、palmOS、EpOC、QNX、LynxOS、DSPhnux等。其中Vx/Orks是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统:WinCE是一种32位的多任务操作系统,可以移植,能够开发多种企业和客户类设备,是微软公司的“维纳斯计划”的核心:3COM公司的Palm0S在PDA市场上占有很大的市场份额,它有开放的操作系统应用程序接口(API),开发商可以根据需要自行开发所需要的应用程序。国内外有大量嵌入式应用软件已广泛用于各类嵌入式系统中。大有国内紧跟国外趋势的形势。但是对于嵌入式Web服务器方面的研究国内现状不容乐观,目前国外的相关研究相对多些。如林C/IP研究项目,它是一个为微控制器和嵌入式系统而设计的小型TCP/IP协议栈:又如CMX公司的MieroNetTCP/IP,它是为8位或16位微处理器而设计的,支持大部分的标准协议,连接方式有以太网连接、拨号连接和直接连接方式。而国内也相应提出了Webito-33- 协议标准,但是相对滞后,缺少具体的工程实现方面的研究和具体产品的开发。美国DEC公司开发的VMSeluster系统开发最早,技术也较成熟,应用也很广泛,但由于VMS操作系统只能在DEC公司的VAX系列和AIPha系列服务器上运行,VMScluster的应用受到很大限制。Platform公司开发的高可用性集群系统LSF提供了分布式集群系统的解决方案,通过将物理上分离的多个集群连接在一起使多个同构或异构的计算机能够通过局域网或广域网共享计算资源,并能够为用户提供对资源的透明访问。国内也有不少公司进行了集群系统的研究和开发工作。联想公司在1999年9月推出了用于分布式高性能计算的NS10000高性能集群服务,该系统是一个四节点的系统,主要基于联想万全45008服务器,以总体成本相对较低的设备组合,足以替代传统班SC小型机和中型机的工作,而价格仅为市场上同等性能小型机的1/2--1/40。朗讯公司也推出了类似于Urboduster的高可用性集群系统LongshineClusterServer。从国内外的研究现状看,目前集群系统的应用大都致力于高可用性问题的解决,真正基于负载均衡的集群系统还比较少,而且在大部分负载均衡集群中采用的都是轮转调度、加权轮转调度等静态调度算法。2.3研发方向和技术关键(1)合理设计硬件电路,使各模块功能协调;(2)STM32对DM9161的控制;(3)STM32对串口模块的控制;(4)STM32对TCP/IP协议栈的开发;2.4主要技术指标(1)合理设计硬件电路,使各模块功能协调(2)STM32可以实现对数据的处理和传输。(3)对DM9161的控制的数据的传输-33- 3总体设计3.1系统方案选择与论证总体设计思路,分为三部分,无线数据采集部分,网络控制部分,控制部分。并利用stm32对各部分进行控制。应用DM9161通过网线与上位机相连接,可以处理和传递下系统相关参数。设计模块图如图3.1所示。服务器无线网络数据信号DM9161网络控制STM32F107处理图3.1整体模块图3.1.1控制部分方案在本次设计中,单片机是系统的控制核心,所以单片机的性能关系到整个系统的好坏。因此单片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。单片机种类很多,STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。因此,在本次设计中选用了stm32F107单片机作为主控芯片。2.1.2无线数据采集部分方案本设计有单片机控制无线模块,接收从无线网络的数据,并经过单片机进行处理,通过网络控制部分传送给PC接收。通过UTC4832无线网络把数据上传至主通信节点,主通信节点对数据进行进一步处理,通过以太网把数据发送至应用服务器。-33- 2.1.3网络控制部分方案方案一:采用基于RTL8019AS实现以太网通讯。RTL8019AS是由台湾Realtek公司生产的100pinPQFP封装10Mbps以太网控制器,符和EthernetII与IEEE802.3标准,其应用成熟广泛,但是由于RTL8019AS没有集成内部硬件协议,此方案需要在主控制器内部编写以太网通讯协议、程序繁琐、耗费时间,不利于系统的快速开发和稳定运行。且由于其封装引脚太多,也不方便系统的硬件设计。方案二:采用基于DM9161的网络控制器的以太网通讯系统设计。DM9161DM9161AEP是一款完全集成的和符合成本效益单芯片快速以太PHY,是采用较小工艺0.25um的10/100M自适应的以太网收发器。DM9161AEP通过可变电压的MII或RMII标准数字接口连接到MAC层,支持HPAuto-MDIX†。是目前常见的一款物理层收发器,由于全球的MCU集成度不断提高,由MAC+PHY+MII的衍生到现在的PHY,在以太网部分的成本,逐渐降低。方案三:采用基于ENC28J60的网络控制器的设计。ENC28J60是带有行业标准串行外设SPI接口的独立以太网控制器,具有28pinDIP封装,符合IEEE802.3的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。他还提供了一个内部DMA模块,以实现快速数据吞吐和硬件支持的IP较验和计算。与主控制器的通信通过两个中断引脚和SPI实现,传输数据速率高达10Mb/s。两个专用的引脚用于连接LED,进行网络活动状态指示。虽然ENC28J60同样也没有像DM9161那样集成了了内部硬件协议栈,但是由于其具有28pinDIP封装,大大便于硬件设计和制版,符合我们这次系统设计的基本要求。综上所述所述,方案二和方案三都适合作为本次设计的网络控制部分,由于条件所限我们选择方案二。3.2系统软件总体结构系统软件总体结构如图3-2所示,整个程序是围绕STM32F107VCT6单片机设计的,软件程序采用模块化设计,更容易理解和调试。整个程序除主程序之外还有5个部分:系统初始化子程序、RS232通讯子程序、网口通讯子程序、I/O数据采集子程序和RS485通讯子程序。-33- 图3-2软件结构图主程序流程图如图3-3所示。系统运行后进入主程序,首先对系统硬件进行初始化,而后再对网络进行初始化,然后检查网络连接是否正常,连接正常则进行周期运行显示,不正常则重新进行连接。图3-3主程序流程图3.3本章小结本章主要讲述了本设计-33- 的工作原理和本设计系统的工作流程。在说明工作原理的过程中,突出了电路的组成单元以及这些单元如何实现数据采集和数据处理控制功能。在说明系统流程时,结合本设计的内容指出了参数设置的方法和意义。-33- 4硬件设计4.1主控芯片STM32F10732位ARMCortex-M3结构,72MHz运行频率,1.25DMIPS/MHz,硬件除法和单周期乘法,并可快速可嵌套中断,6~12个时钟周期,有64K~256KB的FLASH,以及高达64KB的SRAM。另外在网络通信功能上,具有一个RJ45网络接口,支持10M/100M自适应网络,还有一个Zigbee无线网络通讯接口,一个Wi-FiWLAN无线宽带网络通讯接口。在本开发板上,添加了一些人机交互接口,一个大屏幕320*240,262144色TFT-LCD,支持SPI接口式/总线接口,四个LED发光管,一个电源LED指示灯,另外一个标准3.5mm耳机接口,一个五方向的输入摇杆,3个GPIO按键,1个RESTE按键,以及音频级处理芯片,USBOTG功能能,支持外接鼠标和键盘。串行通信功能上,有两个RS232连接插座,其中一个RS232带硬件流控制引脚,一个mini型USB插座,两个CAN连接口。其中与以太网最重要的硬件是MAC(介质访问控制)及其专用的DMA。专用的DMA控制器允许专用SRAM和描述符之间高速传输,其中一些地址过滤模式,对物理和组发送地址,以及32位状态编码,用于每个传送和接受帧。内部的FIFO用于缓存传输和接受帧,传输FIFO和接受FIFO都是2Kbyte,总共4Kbytes。实物图如图4.1所示:图4.1stm32实物图图 STM32F107xx包括以下特性:1.支持10和100Mbit/s两种速率2.专用DMA控制器允许专用SRAM和描述符之间高速传输。3.标记的MAC帧支持,支持VLAN(虚拟局域网)4.半双工和全双工两种操作模式,半双工下采用CSMA/CD(-33- 带有检测冲突的载波侦听多路存取)1.支持MAC控制子层,用于控制帧。2.32位CRC产生和清除。3.一些地址过滤模式,对物理和组播地址。4.32位状态编码,用于每个传送和接受帧。5.内部FIFO用于缓存传输和接收帧。传输FIFO和接收FIFO都是2Kbyte,总计4Kbytes。6.支持硬件PTP(精确时间协议),时间戳比较器连接到TIM2触发输入端。当系统时间比预定目标时间大时,触发中断。4.1.1STM32F107的以太网功能描述STM32F107支持两种工业标准的物理层接口,默认的介质无关接口MII和精简的介质无关接口RMII。以太网的外设由MAC和一个专用的DMA控制器,支持默认的MII和RMII通过一个选择位来设置默认的MII接口或者精简MII接口。TDMA控制器接口通过AHB主从接口连接核和内存,AHB主接口控制数据传输当AHN从接口访问控制盒状态寄存器空间。在MAC核传输前,传输FIFO缓存通过DMA从系统内存中读取数据,类似的,接受的FIFO队列从线上储存以太网帧从而知道它们被DMA传送到了系统内存中。以太网的外设还包括一个SMI用于和外部的PHY通信。配置寄存器允许用户为MAC和DMA控制器选择想要的模式和特性。图4.2STM32F107以太网原理框图4.1.2SMI站管理接口SMI(stationmanagementinterface-33- 站管理接口)允许应用程序通过一根时钟数据线来读取配置中任意一个物理寄存器,接口最多支持访问是32个PHY。应用程序可以在SMI的允许下选择32个PHY中的其中一个,再在PHY中32个寄存器中的任意一个来发送控制数据或者接受状态信息。但是在给定的时间里,只能访问一个PHY中的寄存器。如图4.2所示,图中微控制器执行使MDC时钟线和MDIO数据线来为交替的功能I/O扣。MDC是一个用于给数据传输提供时间参考的周期性时钟,最大的频率为2.5MHz,最小的MDC的高低时间是每次160ns,最小的周期是400ns。值得注意的是,在不工作的情况下,SMI管理接口驱动MDC时钟信号为低,即为0。而MDIO是数据输入和输出数据是要用MDC时钟信号来同步传输状态信号给物理设备,或者从物理设备那得到状态信号。STM32MACExternalPHYMDIOMDC图4.3SMI管理接口框图4.1.3SMI写操作当应用程序设置介质无关接口MII写和忙位时,SMI通过传输PHY的地址,PHY中的寄存器地址以及写数据来启动一个写操作到PHY寄存器上。当然,在传输过程中应用程序不能改变MII的地址寄存器中的内存或者是MII数据寄存器。在这个写操作的时间里,任何对MII地址寄存器和MII数据寄存器的写操作都会被忽略(忙时位为高,即为1),保证传输过程无差错完成。这个写操作完成之后,SMI又通过复位忙位,使得可以重新接受新的写操作。图4.4SMI写操作4.1.4SMI的读操作用户设置以太网MAC中MII的地址寄存器中的MIIBusybit时,MIIWritebit-33- 为零,SMI就通过传输PHY地址和PHY中的寄存器的地址,然后在PHY寄存器中就启动一个读操作。同样的,在传输过程中应用程序不能改变MII地址寄存器中的内容或者MII数据寄存器中的内容。同时在读操作过程中,对MII地址寄存器和MII数据寄存器的写操作也会被忽略(Busybit为高,即为1),保证传输过程不差错,能够正确完成。读操作完成后,SMI复位Busybit,然后用从PHY中读到的数据来更新MII数据寄存器。图4.5SMI读操作4.2STM32串口通讯STM32的串口是相当丰富的,功能也很强劲。最多可提供5路串口(MiniSTM32使用的是STM32F103RBT6,具有3个串口),有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDASIRENDEC规范(仅串口3支持)、具有DMA等。图4.5485电路串口最基本的设置,就是波特率的设置。STM32的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应IO-33- 口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了。下面,我们就简单介绍下这几个与串口基本配置直接相关的寄存器。1,串口时钟使能。串口作为STM32的一个外设,其时钟由外设时钟使能寄存器控制,这里我们使用的串口1是在APB2ENR寄存器的第14位。APB2ENR寄存器在之前已经介绍过了,这里不再介绍。只是说明一点,就是除了串口1的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在APB1ENR。2,串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。串口1的复位是通过配置APB2RSTR寄存器的第14位来实现的。APB2RSTR寄存器的各位描述如下:           图4.6寄存器APB2RSTR各位描述从上图可知串口1的复位设置位在APB2RSTR的第14位。通过向该位写1复位串口1,写0结束复位。其他串口的复位位在APB1RSTR里面。3,串口波特率设置。每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器达到配置不同波特率的目的。该寄存器的各位描述如下:                                     、图4.7寄存器USART_BRR各位描述-33- 前面提到STM32的分数波特率概念,其实就是在这个寄存器里面体现的。最低4位用来存放小数部分DIV_Fraction,[15:4]这12位用来存放整数部分DIV_Mantissa。高16位未使用。这里波特率的计算通过如下公式计算。这里的pclkx(x=1、2)是给外设的时钟(PCLK1用于串口2、3、4、5,PCLK2用于串口1),USARTDIV是一个无符号的定点数,它的值可以有串口的BRR寄存器值得到。而我们更关心的是如何从USARTDIV的值得到USART_BRR的值,因为一般我们知道的是波特率,和PCLKx的时钟,要求的就是USART_BRR的值。下面我们来介绍如何通过USARTDIV得到串口USART_BRR寄存器的值,假设我们的串口1要设置为9600的波特率,而PCLK2的时钟为72M。这样,我们根据上面的公式有:USARTDIV=72000000/9600*16=468.75那么得到:DIV_Fraction=16*0.75=12=0X0C; DIV_Mantissa=468=0X1D4;这样,我们就得到了USART1->BRR的值为0X1D4C。只要设置串口1的BRR寄存器值为0X1D4C就可以得到9600的波特率。4,串口控制。STM32的每个串口都有3个控制寄存器USART_CR1~3,串口的很多配置都是通过这3个寄存器来设置的。这里我们只要用到USART_CR1就可以实现我们的功能了。图4.8寄存器USART_BRR各位描述BIT13:串口功能;BIT12:MODE,字长。0:  1个开始位,8个数据位,1位停止位(默认);1:  1个开始位,9位数据位,1位停止位(默认);*注意:停止位的长度可在USART_CR2寄存器中设置。BIT11:WAKE唤醒功能BIT10:校检使能位,当激活奇偶校验功能时,置位该位将自动往要传输数据的高位字节处插入就校验位。BIT09:ParitySelection,0:偶校验;1:奇校验。BIT08:PEInterruptEnableBIT07:发送缓冲区空中断使能位BIT06:发送完成中断使能位BIT05:接收缓冲区非空中断使能位-33- BIT04:IdleInterruptEnableBIT03:TransferEnableBIT02:ReceiveEnableBIT01:ReceiverWakeupBIT00:SendBreak5,数据发送与接收。STM32的发送与接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了TDR和RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到收据的时候,也是存在该寄存器内。该寄存器的各位描述如下:   图4.9寄存器USART_DR各位描述可以看出,虽然是一个32位寄存器,但是只用了低9位(DR[8:0]),其他都是保留。DR[8:0]为串口数据,包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。当使能校验位(USART_CR1种PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位该取代。当使能校验位进行接收时,读到的MSB位是接收到的校验位。6,串口状态。串口的状态可以通过状态寄存器USART_SR读取。USART_SR的各位描述如下:                                                                     图4.10寄存器USART_SR各位描述-33- 这里我们关注一下两个位,第5、6位RXNE和TC。RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取USART_DR,通过读USART_DR可以将该位清零,也可以向该位写0,直接清除。TC(发送完成),当该位被职位的时候,表示USART_DR内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读USART_SR,写USART_DR。2)直接向该位写0。4.3DM9161用法介绍DM9161AEP是一款完全集成的和符合成本效益单芯片快速以太网PHY,是采用较小工艺0.25um的10/100M自适应的以太网收发器。DM9161AEP通过可变电压的MII或RMII标准数字接口连接到MAC层,支持HPAuto-MDIX†。是目前常见的一款物理层收发器,由于全球的MCU集成度不断提高,由早先的MAC+PHY+MII的衍生到现在的PHY,在以太网部分的成本,逐渐降低。有如下特点1.48pinLQFP封装2.制作工艺:0.25um,IO供电电压3.3V,模拟部分2.5V  3.支持MII和RMII连接方式(推荐使用MII)4.支持双绞线自适应(AUTO-mix)5.支持TCP/IP硬加速6.与全球95%的厂家的MCU完全兼容,是ATMEL推荐使用的单口PHY。注:目前DM9161AEP支持的温度范围是0-75°,而工业级的DM9161BIEP是支持-40°到85°。在应用过程中,DM9161AEP常出现的错误是,晶振的连接,以及网络变压器的匹配,所以应该慎重选择。DM9161引脚图如下所示:-33- 图4.11DM9161引脚图4.3.1DM9161引脚说明16脚TXER/TXD[4]:输入脚,传输错误或者是第五个TXD数据位,在100兆模式下,此脚为高,同时TXEN为高,暂停信号代替实际的数据。在10兆模式下这个输入脚被忽略,在旁路模式下(旁路4B5B)此脚变成TXD[4]脚,第五个TXD的数据of5B信号。20,19,18,17脚TXD[0:3]发送数据,4位数据输入(与TXCLK同步)在10兆或者100兆的半字节模式,在10兆的GPSI模式(7线)下,TXD[0]被用作串行数据输入脚,TXD[1:3]被忽略。输入脚即芯片发送数据给它,它接收后再发送。21脚TXEN:传输使能,高电平表示TXD[0:3]上数据是合法的在10兆或者100兆模式下。在10兆的GPSI模式(7线)下,高电平显示TXD[0]上数据合法。22脚TXCLK/ISOLATE:输出脚,当刚上电时是输入脚,拉低,发送时钟脚,为TXEN,TXD,andTXER.TXCLK的传输提供时钟参考,有PHY提供。25MHZ是100兆半字节模式,2.5兆是10兆半字节模式,10兆是10兆GPSI(7-Wired)mode(说是7线好像只用单线传输)。ISOLATE的设置是:当上电复位时是输入,0:寄存器0.10将被初始化成0,1:寄存器0.10将被初始化成1.24脚MDC:输入脚,管理数据的时钟脚,MDIO管理数据的同步时钟,这个时钟由管理芯片提供,最大12.5MHZ.25脚MDIO:输入/输出脚,双向的管理数据可能被管理芯片或者PHY提供。29,28,27,26RXD[0:3]/PHYAD[0:3]:三态输出,上电输入,拉低,在10/100兆MII模式四位输出(与RXCLK同步)。在10兆的GPSI模式(7线)下,RXD[0]脚是串行数据输出脚,RXD[1:3]areignored,PHYaddress[0:3],上电复位成输入脚,PHY地址检测输入脚。32脚MDINTR:输入/输出,上电输入,拉低,状态中断输出脚,当有一个状态改变(包括link,speed,duplexdependoninterruptregister[21])即由状态改变同时中断也设置了,才会输出。如果原来是低,则中断时输出高,如果是高则中断时输出低。34脚RXCLK/10BTSER:三态输出脚,上电输入,拉高,接收时钟由PHY提供时间参考为RXDV,RXD,andRXER.。PHY可能从接收的数据中恢复RXCLK参考,或者从25MHZ在100MMII模式下,2.5MHZ在10MMII模式下,10MHZ在10MbpsGPSI(7-Wired)mode。10BTSER仅支持10M模式(上电输入),0=GPSI(7-Wired)modein10Mmode,1=MIImodein10Mmode35脚CRS/PHYAD[4]:三态输出,上电输入,拉低,载波感应检测或者-33- PHYAD[4],在10BASE-T或者100BASE-TX的半双工模式下,高电平表示载波的存在是因为接收或者传输有效(正在进行中)在repeater或者全双工模式下,这个信号置高显示载波的存在仅仅因为接收有效此脚作为PHYAD[4](上电输入)PHY地址感应输入脚。36脚COL/RMII:三态输出,上电输入,拉低,冲突检测,在10M或者100M的半双工模式,高电平显示冲突状态,在全双工模式,此脚一直为低。简化的MII使能脚,此脚也用来选择正常的MII或者简化的MII,(上电是输入),0是正常的MII(默认),1是简化的MII,此脚经常被拉低,除非用于简化的MII。37脚RXDV/TESTMODE:三态输出,上电输入,拉低,接收数据合法,高电平显示合法的数据在RXD[0:3]中,测试模式控制脚(上电输入)0是正常的操作(默认)1为测试模式使能。38脚RXER/RXD[4]/RPTR:三态输出,上电输入,拉低,接收数据错误或者5B情况下第五个接收数据位,高电平显示一个不合法的符号被检测到,在解码旁路模式(旁路4B5B)RXER变成RXD[4],5B符号的第五个接收数据位。这个脚也可以用来选择RepeaterorNodemode.(上电输入)0NodeMode(default),1RepeaterMode.31LEDMODE:LED模式选择,0,支持双灯,1正常的灯40RESET#:低电平用来初始化DM9161A3,4脚RX+RX-:输入脚,差分数据从媒体被接收7,8脚TX+TX-:输出脚,差分传输对,差分数据被传输到媒体,在TP模式下。11脚LED0/OP0:输出脚,上电输入,上拉。LED驱动输出0,op0:上电复位输入,此脚用来控制强制的或者是公布的操作模式,在上电后此值被写入寄存器。12脚LED1/OP1:输出脚,上电输入,上拉。LED驱动输出1,op1:上电复位输入,此脚用来控制强制的或者是公布的操作模式,在上电后此值被写入寄存器。13脚LED2/OP2:输出脚,上电输入,上拉。LED驱动输出2,op2:上电复位输入,此脚用来控制强制的或者是公布的操作模式,在上电后此值被写入寄存器。10脚PWRDWN:输入脚,掉电控制,高电平强制芯片到掉电模式,在掉电模式下大部分芯片的模块被关电,仅MII管理接口(MDC,MDIO)可利用(PHY对管理传输有用,在MII上不会产生假信号),要想离开掉电模式必须用软件或者硬件复位让PWRDWN脚为低。14脚CABLESTS/LINKSTS:输出脚,上电输入,下拉,CableStatusorLinkStatus,此脚用来显示上电复位为输入的时候Cable-33- 是否是连接状态,0没有Cable连接,1有Cable连接。此脚也被用来显示上电复位输入为高的时候LINK的连接状态,0有LINK,1没LINK39DISMDIX:HP自动翻转,1自动模式失效,0使能HP自动翻转4.3.2DM9161标准协议说明DM9161A,快速以太单芯片传输,按IEEE802.3u,标准,完整的100Base-TX模式和10Base-T模式,芯片提供一个MII借口按标准IEEE802.3u,包含功能:图4.12DM9161标准协议TXD是4位半字节数据,被TXCLK驱动,在TXEN使能情况下,每一个TXCLK始终TXD(3:0)通过PHY被接收TXCLK(传输时钟)不间断时钟提供时间参考为TXEN,TXD,andTXER信号。TXEN传输使能,从物理层输入,显示物理层MII接口传输是存在的。TXER(传输码错误)与TXCLK同步,如果TXER在一个或多个时钟中置位,同时TXEN置位,PHY将发出一个或更多的信号在正在传输的数据帧中。RXD,4位数据被采样与RXCLK同步,每一个RXCLK,RXDV被置位,RXD(3:0)被传输从PHY到物理层。RXCLK(接收时钟)输出到物理层的不间断时钟为RXDV,RXD,andRXERsignals.提供参考。RXDV(接收数据合法)从PHY输入,显示PHY存在恢复的和解码的半字节数据在物理层上,为了正确的被层解释接收帧,RXDV必须围绕着帧,开始不能晚于开始帧分隔符,不包括任何结束帧分隔符RXER(接收错误)转变与RXCLK同步,RXER将被置位在一个或更多的时钟周期当检测到任何一个错误在从PHY到物理层的被传输过程中。-33- CRS(载波感应)当传输或者接收中继没有空闲时有效(置高),当传输或者接收空闲时无效(置底),100Base-TX发射机接收4位数据在25M,输出一个5位编码MLT-3信号到媒介在100M,芯片把25M在内部变成125M供内部使用。图4.13DM9161标准协议框图100Base-TX发射器如上图:把MII提供的数据4位同步数据转换后到SCRAMBLER,MLT-3.一百万个符号每秒。4.4本章小结本章详细介绍了本设计所要用到的硬件模块STM32107作为主控制器,DM9161作为网络控制模块,用串口传输数据。-33- 5以太网协议5.1TCP/IP协议TCP/IP协议是由一系列网络协议组成的协议族,从名字可以看出TCP/IP协议族中最重要的且基本的两个协议为TeP(肠ansmissionControlprotoeol,传输控制协议)和IP(InternetProtoeol,网络互联协议)"TCP/IP协议是当今互联网的基石"最早的TCP/IP由文顿#瑟夫(VintonCerf)和罗伯特#卡恩(RobertKahn)开发出来,由于其优越的性能,应用范围逐渐扩大,20世纪90年代中期,由于HTML(Hyper介xtMarkupLanguage,超文本描述语言)技术以及浏览器的出现,使得互联网飞速发展起来"TCP/IP对于低层(物理层与数据链路层)协议的支持非常好,常用的低层协议几乎都支持TeP/IP,如以太网!端对端协议(point一to一pointprotoeol,ppp)#光纤分布式数据接口!令牌环网等"TCP/IP协议并不完全遵循传统051参考模型的七层结构"它包括应用层!传输层!网络层!链路层,每一层都调用它的下一层所提供的网络来完成自己的需求"TCP/IP协议通常被看作是一个四层结构的网络,如图5.1所示。图5.1TCP/IP四层结构应用层:该层包含与应用程序协同工作的各种协议,这些协议利用底层网络来传输应用程序发送与接收的数据"应用层的处理过程如下:数据从应用程序开始传送,开始时数据格式为这个应用程序的内部格式,然后数据被编码为协议的标准格式,编码完成后,数据便被传输到TCP/IP协议栈中应用层的下一层"。-33- 传输层:传输层的协议,能够解决端到端可靠性(即数据是否已经到达目的地)!保证数据按照正确的顺序到达此类的问题"在通用的TCP/IP协议族中,传输层协议也包括所给数据应该送给哪个应用程序"常用的传输层协议有TCP和UDP"其中TCP是一个可靠的!面向连接的传输机制,它能保证数据完整!无损并且按顺序到达"而UDP是一个无连接的不可靠的数据报协议"它既不检查数据包到达目的地与否,也不保证它们到达的顺序"。网络层:网络层也称作IP层或互联网层,它负责处理数据分组的选路等数据分组在网络中的活动"在TCP/IP协议栈中,网络层的协议有IP!ICMP(InterneteontrolMessageProtoeol,互联网控制报文协议)和IGMp(IntemetGroupManagementprotocol,互联网组管理协议)"Ip是TeP/lP协议族中最为核心的协议"所有的TCP!UDP!ICMP及IGMP数据都是以IP数据报的格式传输的"。链路层:链路层有时也称作数据链路层或网络接口层"它是数据包在几个设备的网络层间传输所用的方法"这个方法由网络设备驱动程序及网络接口卡实现。5.2嵌入式TCP/IP协议栈要在嵌入式系统中实现上述TCP八P协议,主要有两种方案:一种是硬件实现,将TCP/IP协议栈固化在芯片中,对外提供协议栈的编程接口,如博控自动化公司的TCP/IP协议栈芯片WS100"使用时将芯片连接到微处理器CPU上,在应用程序中直接调用协议栈的API(却licationInterface,应用程序接口)函数,这种方案的优点是应用简单,缺点是价格昂贵;另一种是软件实现,即在嵌入式系统中加入TCP江P协议栈代码"这种方式的优点是可定制性强!成本低,缺点是开发阶段工作量较大"本文选用软件实现方案"大多数PC操作系统如WindowS及Linux操作系统都内置完整的TCP/IP协议栈"而对于小型嵌入式系统,由于资源有限,通常不能直接使用通用TCP/IP协议栈"利用嵌入式系统实现嵌入式以太网通信的技术难点是:如何利用嵌入式系统有限的资源对信息进行处理,使之变成可以在互联网上传输的数据包"为了实现这个目的,很多人做了大量的工作"具有代表性意义的嵌入式TCP/IP协议栈是Bso4.4(BerkeleysoftwareoistributionVersion4.4,伯克利软件套件)的TCP/IP源代码进行裁剪或与移植得到的TCP/IP协议栈"以下是对几种常用的嵌入式协议栈的分析。LinuxTCP/IP协议栈:它的特点是与Linux系统的关系密切,只能在Linux系统或与Linux系统兼容的系统如协cLinux中使用"它体积比较大,功能完善,支持BsD的套接字,应用广泛,有大量资料可供参考[25,261"但它的兼容性与体积都使得它在本项目中的应用成为不可能。-33- pc/IP协议栈:pe/IP是Mierium公司为协C/05系统专门设计的TCP/IP协议栈,体积也同pC/OS一样比较小,是可裁减的协议栈"它的缺陷是它只能部分实现TCP/IP协议,对网络应用的支持不足,功能不够完善"而且这是一个付费的TCP/IP协议栈"对本文来说也同样不合适。ulP协议栈:ulP不同于LinuxTCP/IP协议栈及pc/lP协议栈的一点是它的操作系统无关性,可以在没有操作系统的情况下运行,也可以移植到各种操作系统中"缺点是移植过程复杂,应用程序接口也较复杂,而功能却比较简单,甚至不支持BSD套接字"在专变采集终端中,对网络性能的要求较高,所以也不适合采用ulP协议栈"LwIP(LightweightTeP/xP,轻量级TCP/xp)协议栈:与uIP协议栈一样,LwIP也具有操作系统无关性跟可移植性"但与uIP协议栈相比,LwIP移植过程简单,应用层接口方式多种多样,且支持BSD套接字"同时,它还有体积小,内存小的特点"虽然它也只能部分地实现TCP/IP议栈,但能满足本文中专变采集终端以太网通信的全部要求"由以上比较可知,针对微处理器STM32F107,采用LwIP协议栈是比较合适的。5.3LwIP设计LwIP是瑞士计算机科学院的AdamDunkelS等人开发的一套TCP八P协议栈,它主要关注的是怎么样减少内存的使用和代码的大小,这样就可以让lwIP适用于资源有限的嵌入式系统"LwIP是一种可以在前后台系统(无操作系统)中运行的协议栈"同时,依赖它提供的操作系统模拟层,也可以容易地将其移植到各种操作系统中"另外,这个协议栈是开放源码的,对于TCP/IP协议栈的研究很有帮助。LwIP能实现大多数TCP/IP协议栈的常用功能,它还支持IP片,TCP中提供阻塞控制!快速恢复等功能,支持IPv6(IntemetProtoeolversion6,网际网络通信协议第6版)"它还提供了丰富的应用程序接口。5.3.1LwIP与应用程序接收到的数据暂存在分开的较小的内存块中,但是许多应用程序都需要在一块连续的内存区域内处理数据,因此就需要一个专门的函数来负责从这些不连续的缓冲区内复制数据到一个连续的内存区。LwIP的进程模型:所有的TCP/IP协议独立于操作系统内核之外,驻留在同一个进程的方式,TCP/IP协议栈和操作系统内核分开了,应用层程序既可以是单独的进程也可以是驻留在LwIP的进程中。应用程序与LwIP协议栈一般使用两种方式通信,而如上述所说的,应用程序驻留在LwIP的进程中时,一般是采用函数调用的方式,而另一种是使用API。5.3.2LwIP与底层网络设备驱动是底层硬件和整个软件部分的接口,需要对外部的PHY进行控制,尤其是寄存器的配置,来实现数据的发送和接收,并为上层协议提供访问的方法。主要的工作包括初始化,设备的打开和关闭,数据包的发送和接收,中断处理等。而其中LwIP提供了一些网络驱动的模型。-33- 使用LwIP提供的API做一些网络驱动时,需要对LwIP协议栈进行初始化,用一个网络接口的初始化函数来完成底层网络的初始化功能做,添加并配置底层网络接口,建立底层的接收或发送线程,创建TCP/IP线程等。LwIP的底层接口初始化其实就是对数据链路层和物理层功能的实现。需要做几个方面的动作:LwIP的初始化、网络层设备的初始化、以太网控制器的初始化等。如图5.2所示,网络模块的初始化函数的流程是首先是LwIP协议栈的初始化,再进行数据链路层发送接收线程的创建,之后进行网络层设备的初始化。图5.2LwIP底层接口初始化而进行LwIP协议栈初始化时,先初始化LwIP统计信息,初始化操作系统的仿真层,再进行初始化存储管理结构,最后创建TCP/IP线程。LwIP协议栈的初始化中可以调用LwIP协议栈所提供的API来实现。以太网控制器的初始化中,对于STM32F107,需要在初始化中进行设定网卡的MAC地址,初始化网卡,建立稳定的物理层和数据链路层。然后开始向LwIP注册链路层发送函数,创建接受线程。而网卡初始化过程中需要进行几个步骤:关闭FEC模块关闭中断注册中断向量和中断处理函数开启中断设置MAC地址和Flash寄存器设置发送控制寄存器和接收控制寄存器-33- 初始化发送函数和接收函数开启FEC模块在硬件模块完成了物理层和数据链路层的构建,这时,需要一方面从MAC中提取数据部分,然后传送给LwIP协议栈线程进行处理,一方面要把上层中的IP数据包传送给硬件模块,通过硬件模块把数据封装成MAC帧发送到物理网络上。这个过程中为了减少中断处理程序的反复使用,可以将底层数据到LwIP协议栈的数据传送工作独立出来,独立出一个接收线程和一个发送线程来完成。接收线程和发送线程与底层驱动中数据收发的同步可以利用信号量的机制来实现。5.4本章小结本章介绍了本设计中所涉及的相关网络协议,通过对这些网络协议的学习和理解将为后续的程序编写打下基础。-33- 6软件设计系统软件总体结构如图6.1所示,整个程序是围绕stm32f107单片机设计的,软件程序采用模块化设计,更容易理解和调试。整个程序除主程序之外还有5个部分:系统初始化子程序、RS232通讯子程序、网口通讯子程序、I/O数据采集子程序和RS485通讯子程序。主程序RS232通讯子程序网口通讯子程序I/O口数据处理子程序系统初始化子程序图6.1LwIP系统软件总体结构6.1主程序设计主程序流程图如图6.2所示。系统运行后进入主程序,首先对系统硬件进行初始化,而后再对网络进行初始化,然后检查网络连接是否正常,在连接正常的情况下进行周期运行显示。部分代码如下所示:图6.2主程序流程图-33- intmain(void){System_Setup();//系统的时钟、以太网、I/O口、中断和外设设置Show_Msg();TIMConfiguration();LwIP_Init();//网络初始化IP地址分配Check_ETH_PHY();//检查以太网连接ETH_To_UART_init();httpd_init();USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);while(1){System_Periodic_Handle();//系统周期运行显示delay_ms(200);USART3_Put_Char(0x21);}}6.2系统初始化子程序系统初始化子程序主要完成系统上电后,硬件初始化,时钟频率的设置,中断初始化和中断优先级的设置,串行通讯口的初始化配置。同时,在这个子程序中对本设计所涉及的I/O口进行了总体配置。系统初始化子程序的代码如下所示:voidSystem_Setup(void){RCC_ClocksTypeDefRCC_Clocks;SystemInit();USART_COM1_Init();USART_COM3_Init();RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC|RCC_AHBPeriph_ETH_MAC_Tx|RCC_AHBPeriph_ETH_MAC_Rx,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);-33- NVIC_Configuration();GPIO_Configuration();Ethernet_Security();}6.3RS232通讯子程序RS232子程序完成了串口最基本的设置,就是波特率的设置。其中包括对端口的使能复位和控制,具体代码如下所示:USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;STM_EVAL_COMInit(COM1,&USART_InitStructure);6.4网口通讯子程序STM32在使用LwIP栈编程的时候,sequentialAPI为我们提供了一种通用的方法,它与BSD标准的socketAPI非常相似,程序的执行过程同样是基于"open-read-write-close"模型的。从本质上讲,TCP/IP协议栈的通信过程是事件驱动的,因此,TCP/IP的代码和用户应用程序的代码,应该在不同的线程里面。具体代码如下所示:if((localtime-TCPTimer)>=TCP_TMR_INTERVAL){TCPTimer=localtime;tcp_tmr();}/*ARPperiodicprocessevery5s*/if((localtime-ARPTimer)>=ARP_TMR_INTERVAL){ARPTimer=localtime;etharp_tmr();}-33- 6.5本章小结本章介绍了本设计软件编程中所涉及的相关子程序的编写,其中分别对主程序,串口通讯子程序,网口通讯子程序进行简略的分析。-33- 7结论6个多月的毕业设计即将结束了,我深刻感受到专业知识的缺乏,同时,在整个设计过程中我也感受到自身知识的进步,特别是在单片机控制系统方面。LwIP是TCP/IP协议栈的一种实现,LwIP的主要目的是减少内存使用率和代码尺寸,使得LwIP适用于资源有限的处理器,如嵌入式系统。为了简化处理过程和内存的要求,LwIP对API进行了裁剪,可以不需要复制一些数据。在STM32F107上实现基于LwIP的WEB服务器,客户端可以通过访问服务器对网络终端进行控制。为了使用户能够通过互联网对嵌入式设备进行实时控制,嵌入式WEB服务器的设计符合了嵌入式设备和网络技术的发展要求。因为作为本科生的毕业设计,所以本文设计的系统以功能性作为首要的考虑问题,并在此基础上最大程度的降低成本。本文主要描述LwIP的设计和实现,并在此基础上实现嵌入式WEB服务器的通讯应用。叙述了STM32F107的硬件结构,以太网功能,以及LwIP在TCP/IP协议栈的实现中的操作系统,应用程序,底层网络中使用的数据结构和算法。在做这次毕业设计的过程中,让我对ARM体系有了更好的了解,STM32F103和STM32F107的区别上,以太网端口的配置,使STM32F107更加强大。本论文基本实现了TCP/IP协议栈,实现了TCP协议和IP协议,对数据接收,缓存,内存的管理,对嵌入式系统也更加体会深刻。除了实现了TCPIP协议栈的功能外,也论述了LwIP协议栈的支持模块,如操作系统模拟层、缓冲、以及存储管理、网络接口函数,还有一些处理联网上的校验,以及校验函数的具体实现。这次毕业设计给我提供了宝贵的实践经验,我相信对我将来的生活、工作都会有很大的帮助。-33- 致谢在这几个月的时间里,从对课题的理解,方案的设计,到电路的制作,再到论文的写作,中间有着自己的努力,更有着老师和同学的关心和巨大的帮助。毕业设计是我大学学习生活的最后一项学习任务,是对我大学四年学习的一个综合考核。通过设计的工程提升了我的综合素质。这次毕业设计,我选择了周磊老师所带的这个比较具有实用性的有意思的课题——基于stm32无线数据基站的设计和实现。在为期两个多月的毕业设计过程中,我较为系统的复习了以前学的知识,也根据课题需求学习了许多新知识,使我的知识结构更加系统化,也更加完善。同时,也提高了我独立分析问题、解决问题的能力。在整个设计制作过程当中,我感觉收获非常大,我获得的不仅是理论上的收获,还有实践中的丰收,同时还有的就是同学们之间的合作精神。在此,祝愿我校日后蓬勃发展,成为一所独具风格的综合性大学。祝愿母校的将来更美好!这是本人初次单独完成系统的整体设计,难免会出现错误和不足之处,恳请批评指正!-33- 参考文献[1]赵巍,冯娜.单片机基础及应用[M].北京:清华大学出版社.2009:94-103.[2]高慧芳.单片机原理及系统设计[M].杭州:杭州电子科技大学.2008:124-174.[3]杜春雷.ARM体系结构与编程.清华大学出版社,2003.[4]李宁.ARM开发工具ReaIViewMDK使用入门[M].北京航空航天大学出版社,2008.[5]李宁.基于MDK的STM32处理器开发应用[M].北京航空航天大学出版社,2008.[6]刘黎明等.单片机与嵌入式系统应用[J].英文刊名MICROCONTROLLER&EMBEDDEDSYSTEM.2002(7).[7]周立功等.ARM嵌入式系统实验教程[M].北京:北京航空航天大学出版社,2005.1.[8]唐清善.ProtelDXP高级实例教程[M].中国水利水电出版社,2004.4.[9]罗浩等.一种新的基于ARM的数据采集系统设计[J].信阳师范学院学报(自然科学版),2006.4.[10]赵亮,侯国锐.单片机C语言编程与实例[M],第一版.人民邮电出版社,2003.9.[11]K.Mandai,K.Miyauchi,M.Sugimoto,Y.NatsumeandK.Ookubo.ANADVANCEDINFRAREDREMOTECONTROLSENSOR[J].IEEE,1990.6,36(3).[12]MichaelA.Miller.DataandNetworkCommunications[M].第一版,科学出版社,2002.[13]徐向民.AltiumDesigner快速入门[M].北京:北京航空航天大学出版社,2008.[14]传感器电路设计手册,中国计量出版社,1994.5-33- 附录实物照片:-33-'