毕业论文-基于STM32单片机的串口转网络设计.doc_第1页
毕业论文-基于STM32单片机的串口转网络设计.doc_第2页
毕业论文-基于STM32单片机的串口转网络设计.doc_第3页
毕业论文-基于STM32单片机的串口转网络设计.doc_第4页
毕业论文-基于STM32单片机的串口转网络设计.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计(2015届)题 目基于STM32单片机的串口转网络设计学 院电子信息学院专 业电子信息工程班 级学 号学生姓名指导教师完成日期2015年1月诚 信 承 诺我谨在此承诺:本人所写的毕业论文基于STM32的串口转网络设计均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。 承诺人(签名): 年 月 日杭州电子科技大学本科毕业设计摘 要 本毕业设计主要研究串口转网络技术,继而实现串口与网络之间的数据传输。本串口转网络模块将串口接收的串行数据通过LwIP轻型协议栈构造的TCP服务器向外部TCP/IP网络传输网络数据。串口数据进行网络化处理过程是整个模块的关键。串口转网络模块主要包括以太网接口模块、嵌入式微控制器模块和串口数据处理模块三部分。嵌入式微控制器模块主要实现在串口数据与以太网IP数据之间创建数据连接通道,以读写以太控制器相关寄存器的形式来实现对IP报文的接收与发送。串口数据处理模块主要实现对串口输出数据电平以及相关格式的转换功能,并确定串口接收数据的起停位,获取数据和校验位。以太网接口部分模块由以太网接口子模块和以太网控制子模块构成。以太网接口子模块实现协议的转换以及控制以太网控制器附属电路的功能。整个模块结构紧凑,不易受外接环境干扰,拥有较高性价比,在工业等应用现场有较高的使用价值。关键词:串口转网络;LwIP;TCP/IP;TCP服务器ABSTRACTThe graduation project is mainly to research the UART-network protocol converter, which achieve a two-way data transmission system based on serial and ethernet data. The UART-network protocol converter module transforms the serial network data into TCP server transmissing network date into external TCP/IP by Light-Weight Internet Protocol. The process of serial data-networking is the key to the whole module.UART-network protocol converter module consists of three parts: processor module, serial data processing module and ethernet interface module. Processor module mainly used to set up a data link layer between ethernet data and serial data. It achieves the reception and transmission of IP data packets by controlling ethernet physical layer transceiver. Serial data processing module mainly used to do a level switch of the serial data stream, processing the data format, estimating the start and stop bit of serial data extracting the resultsfrom the data and parity bit as well. The ethernet interface module consists of ethernet interface part and ethernet control part. The ethernet interface module finish the convert protocol meanwhile control ethernet interface circuit. The whole module structure is compact and it has a strong anti-interference ability, high cost performance. Thus, it has a high practical application value in industrial filed.Key words:UART-network protocol converter;Light Weight Internet Protocol;TCP/IP;TCP server目 录1 引言12 概述22.1 串口转网络系统概述22.2 本设计方案思路22.3 研发方向和技术关键22.4 主要技术指标33 总体设计43.1 协议栈部分43.2 服务器部分53.3 其他说明54 硬件设计64.1 总体硬件设计64.2 电源电路与电源接口电路64.3 微处理器外围电路设计74.4 以太网控制器外围电路设计115 软件设计175.1 总体方案175.2 LwIP协议栈的移植175.3 串口通信软件设计215.4 TCP服务器设计236 制作与调试256.1 硬件电路的布线与焊接256.2 调试267 结论30致谢31参考文献32附录331 引言随着嵌入式系统与网络的联系逐日密切,以及TCP/IP网络的快速普及,使得TCP/IP网络在工业领域的一些工业现场具有很好的应用前景。与以往在工业领域应用较为广泛的串口传输相对比,TCP/IP网络具有更好的带宽、更快的传输速度、更远的传输距离以及更加广泛的通信业务等特点。并且,基于多样化环境所设计的TCP/IP网络由于具有强大的自动修正错误能力,其传输的数据基本不会发生错误,外部环境也很难干扰到它的通信。串口通信由于传输方式为共地传输,容易发生共模干扰,所以其抗干扰能力差,传输容易出现错误。而且串口传输数据的速率即波特率大小与传输的长度、内部时钟频率有关,提升的空间并不大。在实际应用中,在不超过最大传输长度的条件下,串口传输的最大速率为每秒115200比特。如今的工业领域普遍存在大量的数据采集、控制与监视任务。伴随着数据量的快速增加,传统的单级结构数据采集系统也面临越来越严厉的考验。尤其遇到多个串口设备需要共享一台主机的情况时,要求采集大量数据的同时,又要求较高的通信速率,如果此时需要处理的数据较为复杂,那么系统整体的质量和性能便会急剧地下降。因为PC作为一个桌面系统,避免不了串口I/O适应能力差的短板,而同时使用多个串口进行数据传输会耗费很大的一部分系统资源,从而使系统的整体性能受到严重影响。为了规避串口传输使用中传输距离受限、抗干能力差、传输速率低等的局限性,使用功能强大的TCP/IP网络来替代串口进行数据传输便成为了首选。现在一些常见的工业微控制器芯片也都集成了相应的以太网控制器,方便系统设计时选用更加灵活的数据传输方式。但是,在大量的工业现场依然存在着对外只能进行串口通信的设备,这类系统普遍的缺点是无法周密、系统、精准而实时地对数据进行监控。很显然,将这些设备都进行替换,从而实现TCP/IP网络通信是不实际,也是不利于成本的控制的。在这种情况下,通过嵌入式串口转网络模块,来将串口的串行数据转换成网络数据包以实现入网便是一种很好的选择。本设计主要研究在不改变原有设备结构的前提下,为只具备串口通信能力的现有嵌入式应用设备提供入网的能力,为已存在的系统提供一种低成本的升级方案与技术。通过向意法半导体的32位嵌入式微处理器STM32F107VCT6上移植精简协议栈LwIP,并在LwIP轻型协议栈的基础上搭建简易的TCP服务器,从而实现嵌入式系统与网络互相连接的目的。2 概述2.1 串口转网络系统概述串口转网络系统的工作原理是采用TCP服务器来进行串口接收数据的变换和发送。该系统一般包括串口数据处理部分、处理器转换数据部分、以太网控制芯片传输数据部分。如图2-1所示,当串口接收到外界发送给串口转网络系统的串行数据时,串口数据处理部分就从处理器串口接收缓冲区读取数据,并将读得的数据发送给处理器转换数据部分。处理器转换数据部分实际上是搭建在LwIP上的一个微型TCP服务器,TCP服务器将数据发送至以太网控制芯片传输数据部分,由专用的以太网控制芯片将数据传输至TCP/IP网络上。 串口数据处理 以太网芯片传输数据处理器转换数据图2-1 串口转网络系统原理图串口转网络系统采用移植轻型协议栈来实现入网的方式,是如今低速串口设备接入网络的一种常见形式。随着TCP/IP网络技术的发展与普及,在传统的安全防护、机房监控、工业监测、医疗器械、智能家居等领域当中,大量的传感器、可编程逻辑控制器 、MCU、监控器、读卡设备等依赖串口传输与计算机进行数据交换的设备能够使用一种更加快速、安全的通信方式与计算机通信。这也是满足在社会需求快速发展的今天,各个领域需要更大数据流量、更加稳定的系统的一种方案。2.2 本设计方案思路本设计的主要设计目的是实现让使用串口进行数据传输的设备得以入网;主要涉及内容包括串口数据通信,嵌入式微控制器驱动,协议栈的移植和服务器的搭建。在串口数据通信方面的编码选用以系统中断进行数据接收,轮询方式进行数据发送的方案;在以太网驱动方面,要解决以太网与处理器的时钟同步、通信方式问题(详见第二章的硬件设计部分4.4小节);在协议栈移植选择上,采用轻型开源网络协议栈LwIP;在搭建服务器方面采用数据传输更加安全的TCP协议,并以此搭建TCP服务器。2.3 研发方向和技术关键(1)微处理器与以太网芯片的外围电路设计与PCB的绘制;(2)与串口设备进行串口通信,接收并推送采集的数据;(3)LwIP协议栈的移植;(4)TCP服务器的搭建。2.4 主要技术指标(1)波特率: 115200b/s(2)以太网传输速率: 10Mb/s-100M/s(3)电源接口: 3.3V、5V(4)模块电流: 最大180mA(5)模块输出数据格式: TCP报文(6)模块接收数据电平: RS232电平3 总体设计串口转网络系统是一种集数据接收和转换为一体的系统,其工作步骤可细分为如下几部分:1、将从串口设备接收的串行数据进行电平转换,并存储至串口缓冲区;2、对应的串口程序从缓冲区中获取数据;3、将获取的数据推送给TCP服务器转换成网络数据包;4、由TCP服务器将转换完成的网络数据包传送至网络上。因此,可以很方便地在联网的计算机上通过TCP客户端软件查看从串口设备发出的数据。串口转网络系统的组成架构如图3-1。该系统包括以太网接口模块、嵌入式微控制器模块和串口电平转换模块三大部分。以分层模型来划分本设计的结果如图3-2所示,处在第一层的是硬件模块,第二层是驱动程序,第三层是提供接口的中间层,第四层是用户编写的应用层。串口电平转换模块处理 器模块以太网接口模块通用计算机串口设备TTLRS232TCP/IP图3-1 系统总体结构框图应用层 网络数据收发程序软件 串口数据收发程序串口中间件I/O系统中间层TCP/IP协议栈硬件驱动层UART驱动以太网芯片驱动定时器驱动驱动硬件 定时器硬件层以太网芯片UARTGPIO图3-2 系统总体层次框图3.1 协议栈部分协议栈部分是本系统的一个重点部分,它关系着网络传输的效率以及整个系统的稳定性。本设计采用了瑞典计算机科学院(SICS)的Adam Dunkels开发的一个小型开源的TCP/IP协议栈。LwIP是轻型IP协议,在无操作系统的裸机上也能够正常运行。其设计的初衷是在保留TCP协议基本功能的原则上较少地占用珍贵的随机存取存储器和只读存储器。因此,它能够在只拥有几十KB的随机存取存储器和只读存储器的微控制器上流畅地运行。这也让LwIP在对成本相对敏感的嵌入式应用中很受欢迎。LwIP主要的特性有如下几点:(1) 支持多网络接口下的IP转发;(2) 包括用户数据报协议(UDP);(3) 包括往返时间估算、堵塞控制、传输控制协议(TCP);(4) 拥有基于回调函数的Raw API,可大幅度提升程序处理速度;(5) 多线程运行环境下提供了Berkeley API;(6) 支持点对点协议、IP分片功能;(7) 支持IP地址的动态分配功能。3.2 服务器部分在LwIP协议栈上主要考虑实现两种服务器中的一个:TCP服务器或UDP服务器。TCP是基于连接的可靠协议,在开始传输用户数据前,必须与目的IP确立稳定的连接状态。一个TCP连接的建立需要进行“三次握手”这一步骤。TCP具有的优势有基于连接的传输、数据传输精确可靠、端到端传输、全双工模式、以字节为单位通信;其缺点是传输的速度较UDP慢。UDP是基于非连接的协议,也就是说在开始传输用户数据前不需要与目的IP确立连接状态,不管对方是否准备好接收就直接传送,每个数据包的最大限制为64KB。UDP具有的优势有传输速度快、效率高;其缺点是用户发送的数据包有一定几率会丢失,需要用户自己保证传输的可靠性。在本设计中,相对于串口的最高传输速率,TCP的传输速度已经是非常高了,且结合实际环境,本系统对传输数据的精确度要求更加高一些,所以采用TCP服务器。由于没有采用嵌入式操作系统,所以采用LwIP的基于底层回调的Raw API实现一个简易的循环服务器。3.3 其他说明系统分为硬件部分和软件部分。本论文主要设计制作硬件部分、微处理器上的嵌入式软件部分。微处理器软件部分包括LwIP轻型协议栈的移植、TCP服务器的搭建、微控制器驱动程序以及串口通信程序。本设计涉及的内容全部由本人完成。4 硬件设计4.1 总体硬件设计硬件设计是整个系统关键的组成部分,其质量的优劣直接决定整个系统的功能是否可靠。此串口转网络硬件系统主要分为三个部分,分别为微处理器部分、以太网控制芯片部分、电源电路部分。其中,以太网芯片DP83848与微控制器芯片STM32F107之间采用MII接口,电源电路部分包含了微控制器芯片STM32F107所引出的两个串口。硬件系统整体的连接框图如图4-1所示。图4-1 总体硬件原理框图4.2 电源电路与电源接口电路 串口转网络系统能在工业现场中稳定地运行,前提之一就是要拥有一个能保证系统可靠运行的电源。考虑各类环境因素,具有反应速度快、工作噪声低、输出纹波小等特点的线性稳压电源是一个不错的选择。为了给串口转网络设计提供一个稳定工作电源,系统电源电路采用了LM1117稳压芯片。图4-2 电源电路原理图电源模块主要组成部分为LM1117芯片和电源指示灯。LM1117是一个低压差电压调节器,它的稳压调节管由一个PNP驱动的NPN管构成,可将5V直流稳压电源转换到3.3V。芯片内部由过温断路电路提供过载和过温防护,以免环境温度使芯片产生太高的结温。在LM1117输出引脚连接一个10uf的钽电容以便改善芯片过渡过程并增强芯片稳定性。电源指示灯串联了200大小的电阻,能够限制电流大小,提高红色LED的工作寿命。电路如图4-2所示。此系统提供了通用圆头5V插口,并可接5V与3.3V两种类型的电源。引出的串口TXD、RXD与电源接口在同一排排针上,方便与外界串口设备相连接。电路如图4-3所示。图4-3 电源接口原理图4.3 微处理器外围电路设计为了使电路设计尽量简单,同时能更好地实现高速网络通信,应尽量选择内部集成MAC控制器的嵌入式微控制器,本设计选择现在低端嵌入式网络应用较为广泛的STM32F107VCT6。STM32F107VCT6是意法半导体设计的基于ARM Cortex-M3内核的32位微控制器,其内部数据总线、寄存器组织和存储器接口都是32位的,最高工作频率为72MHz。芯片内置256K高速程序存储器(Flash)与64K数据存储器(SRAM)。之所以可以让STM32F107VCT6的取指和数据访问同时进行,是由于Cortex-M3内核采用了先进的哈弗架构,其指令总线和数据总线都是相互独立的。也正因为Cortex-M3的这种构架设计,相关处理器的性能才得到了极大地提升。Cortex-M3内部配有数条能够并行工作的总线接口,而且通常这些总线结构为专门的应用环境优化过。虽然这两条总线的可寻址空间有8GB,但是这两条总线是共用一个存储空间的。图4-4 STM32F107VCT6内部结构框图STM32F107VCT6具有极其丰富的内部资源,其中包含十个16位定时器、两个每秒可采样1M次的12位ADC(模数转换器)、两个12位DAC(数模转换器)、两个I2C接口、五个通用同步/异步串行收发器 、三个串行外设接口及十二条直接内存存取通道等。其中STM32F107VCT6集成了以太网MAC控制器,其对外提供MII和RMII两种连接方式。另外,微控制器还能根据自身频率产生25MHz或50MHz的时钟输出,以便给外部以太网控制芯片提供信号源。STM32F107VCT6内部结构框图如图4-4所示。其中,STM32F107VCT6以太网MAC控制器支持的主要功能如下所示:(1)通过外接PHY物理层控制器,可提供10Mb/s-100Mb/s的数据传输速率;(2)接收IPV4、以太网帧格式的IP数据包并进行校验与封装的拆除;(3)支持IPV4的报头检验和IPV4或IPV6数据格式封装数据的检验、检查;(4)自带2KB发送和接收的FIFO,且能够基于传输数据的大小配置阀值;(5)支持在传输以太网数据帧时,DMA控制器产生中断。4.3.1 微控制器启动方式设计STM32系列微控制器都自带3种启动方式,如表格4-1所示。表4-1 BOOT0、BOOT1启动模式表BOOT0BOOT1启动方式详细注解0XFLASH从FLASH获取启动与执行指令10系统存储器通常作为串口下载模式11SRAM启动通常用来在SRAM中调试代码按照表4-1,通常情况下,假如要利用串口进行机器执行指令的下载,则需要设置BOOT0为高电平,BOOT1为低电平;而如果想让STM32微控制器一按复位键就开始执行代码,则需要配置BOOT0为低电平,BOOT1可任意设置。因为本系统采用JTAG方式下载,所以只需配置BOOT0为低电平,BOOT1任意配置即可。这部分电路如图4-5所示。实际操作采用短路帽短接实现。图4-5 启动电路原理图4.3.2 时钟电路设计在STM32F107VCT6内部有五个时钟源,分别为高速内部时钟(HSI)、高速外部时钟(HSE)、低速内部时钟(LSI)、低速外部时钟(LSE)、PLL锁相环倍频输出。其中高速外部时钟(HSE)可接外部晶体/陶瓷谐振器(晶振)。在微控制器内部的高速外部时钟源(HSE)中,存在一个晶振震荡器,其输入端为芯片引脚OSC_IN,其输出端为芯片引脚OSC_OUT。将微控制器芯片的这两个引脚连接上晶体/陶瓷谐振器和两个起振电容,就产生了反馈电路,形成了一个平稳的反馈震荡系统。具体原理图如图4-6所示。图4-6 时钟电路原理图根据芯片手册,起振电容通常取20pf左右,以帮助晶振起振。在本串口转网络系统中使用的是25MHz晶振,以便和以太网芯片的频率相匹配。STM32F107VCT6内部拥有高速锁相环(PLL),可将外部输入的时钟进行倍频后作为CPU的时钟,倍频可选择为2-16倍,但最大频率不可超过72MHz。经过倍频后的系统时钟再由内向外进行分频,提供给内部总线、外部总线及外设作为时钟信号。4.3.3 复位电路设计在某些情况下,许多微处理器上电时并不稳定,不能按照预期的想法执行指令。为了规避不稳定因素所带来的影响,所有的微处理器都有一个复位入口,它控制微处理器在特定情况下变为某个初始的状态。左侧RESET引脚是微处理器的复位信号输入引脚,工作电平为低电平。此引脚必须在最大0.8V的电压下,持续至少300ns才能使系统复位。右侧RESET引脚是PHY芯片的复位信号输入引脚。复位电路如图4-7所示。图4-7 复位电路电路图这个复位电路采用按键方式进行复位,同时支持上电复位功能。在工作时,由于电容的隔直作用,复位引脚上的电平是高电平,所以微处理器不会进行复位。当系统刚上电时,图中的0.1uf电容进行充电,在10K电阻上就出现了电压,使得复位引脚上的电压被拉为低电平。同理,当按下按键KEY1时,复位引脚便和GND相导通,也被拉为了低电平,芯片就会进行复位。4.3.4 RS232电平转TTL电平设计RS232电平与TTL电平的转换采用MAX3232芯片。MAX3232不管在什么条件下都能够确保120kbps的通信速率,一般条件下能够提供235kbps的通信速率,这符合本设计的要求。图4-8 RS232电平转TTL电平电路电路图MAX3232的外围电路原理图如图4-8所示,图中的电容C5,C6,C7,C8及V+,V-所组成的部分电路是电源电压转换电路的一部分。在现实环境中,MAX3232很容易受电源噪声的干扰,所以V3.3需要增加0.1uf的去耦电容C9。C5,C6,C7,C8选用0.1uf的非极性瓷片电容,在具体设计电路时,考虑到抗干扰能力,这4个电容应尽量靠近MAX3232芯片。图4-8中下半部分为双通道收发电路。USART1_TX,UASRT1_RX可直接连接RS232的RXD与TXD。其数据传输过程如下:MAX3232的10脚T2IN连接微控制器的USART_TX引脚,TTL电平从嵌入式微控制器的USART_TX引脚发出,通过MAX3232进行电平转换后,以RS232电平的形式从电平转换芯片7脚T2OUT输出,再传送到外部串口设备的RXD引脚,然后外部设备从TXD引脚发送数据逆向流入嵌入式微控制器的USART_RX引脚。4.3.5 JTAG下载调试电路设计JTAG是一种所谓的边界扫描技术,因为支持进行扫描链的I/O的检测,所以能够做到去除或很大程度上降低对电路板上实际检测点的需求,能够使PCB板布局更加简单,测试更加方便。STM32F107VCT6微控制器通过一个4比特位的指令寄存器和5个数据寄存器实现了标准的JTAG状态机,从而支持JTAG调试。图4-9 JTAG调试电路电路图具体原理图如图4-9所示。其中TRST为检测复位端口,TDI为检测数据输入端口,TDO为检测数据输出端口,TCK为检测时钟端口,TMS为检测模式裁决端口。4.4 以太网控制器外围电路设计由于STM32F107VCT6只提供了以太网MAC层控制器,并没有内置PHY接口,所以必须通过外接一个以太网PHY接口器件的方式才能实现网络通信。本设计选择德州仪器生产的10/100Mb/s以太网控制器DP83848作为以太网物理层接口芯片。该芯片具有功耗低、单路高速、性价比高等特点,拥有的可简化软硬件开发流程的通用网络接口。它能够实现CSMA/CD(载波监听多路访问)的一些功能,侦测有没有数据在网络上传输,假如有则延迟发送,假如网络上无数据传输则再等待一个任意时间值后传送数据。在侦测到网络上已有数据在传输时,等待一个任意时间值再一次传送数据,增强了数据传输的可靠性。以太网接入标准IEEE802.3标准阐明了链路层中的媒体访问子层和物理层的实现方法。图4-10 OSI参考模型MAC层和PHY层与标准OSI模型的对应关系如图4-10所示。OSI标准模型中的链路层由逻辑链路控制子层(LLC)和媒体访问子层(MAC)构成,而链路层最重要的功能是为网络层提供精确的和稳定的数据传送基本接口 。DP83848还同时支持MII、RMII以及SNI接口模式,可根据实际资源情况灵活选用接口方式。DP83848的典型应用结构如图4-11所示。在最左边的一般为微控制器或计算机处理单元,它们通常自带媒体访问控制器(MAC),然后通过MII/RMII/SNI中的一种连接方式与DP83848连接并进行通信。在DP83848右边的通常为带有电磁隔离的RJ-45母座。图4-11 DP83848典型应用结构4.4.1 以太网控制器接口设计DP83848I的引脚图如图4-12所示,为48引脚的LQFP封装。本设计采用的MII接口,结合引脚功能图,解释MII接口相关引脚的具体功能。MII即Medium Independent Interface(介质独立接口),是IEEE-802.3声明的以太网行业规范。它囊括一个数据传输端口,以及一个介质访问控制层与物理层之间的管理端口。数据传输接口包含用于收发的两条独立通信通道,每条通信通道都有各自的数据、时钟和控制信号。MII接口方式一般需要16个信号引脚。图4-12 DP83848引脚功能图1、DP83848引脚描述本设计主要使用到的引脚功能如下:(1)MAC数据接口TX_CLK:发送数据信号时钟。在外部时钟为25MHz的情况下,100Mb/s模式下的发送时钟频率为25MHz;10Mb/s模式下的发送时钟频率为2.5MHz。TX_EN:发送数据使能信号。当此引脚为高电平时,在TXD3:0引脚发送的数据才有效。TXD3:0:发送数据。TXD3:0发送数据的时钟同步于TX_CLK引脚时钟(100Mb/s模式为25MHz;10Mb/s模式为2.5MHz)。RX_CLK:接收数据时钟信号。在外部时钟为25MHz的情况下,100Mb/s模式下的接收时钟频率为25MHz;10Mb/s模式下的接收时钟频率为2.5MHz。RX_DV:接收数据有效位。当此引脚为高电平时,在数据接收引脚接收的数据才有效,芯片内部默认为低电平。RX_ER:接收传输错误。时钟与RX_CLK同步,产生高电平时表示在100Mb/s模式下获得的数据包中,监测到了无效的数据。RXD3:0:接收数据。RXD3:0接收数据的时钟同步于RX_CLK引脚时钟(100Mb/s模式为25MHz;10Mb/s模式为2.5MHz)。CRS/CRS_DV:载波监听引脚,引脚高电平表明接收介质的状态为繁忙。COL:冲突检测。产生高电平表示在10Mb/s或100Mb/s半双工模式下检测到了冲突的情况,在全双工模式下,这个引脚始终被拉为低电平。(2)串行管理接口MDC:元数据控制器。管理接口时钟,同步非周期时钟信号给MDIO管理数据传输串行接口。时钟速率上限为25MHz,并且没有下限。MDIO:传输MAC层控制信息和物理层状态信息。它是一根双向数据线,在元数据控制器时钟信号的上升沿有效。(3)LED接口LED_LINK:在不同模式下有不同的含义,本设计为模式1,即此引脚表示连接的状态。当连接良好时,连接至此引脚的LED会开启。LED_SPEED:此引脚不受模式影响,在100Mb/s通信速度下开启,在10Mb/s通信速度下关闭。LED_ACT/COL:在不同模式下有不同的含义,本设计为模式1,即当以太网控制器处于传输或者接收状态时,连接至此引脚的LED会开启。根据以上引脚定义可以获得其与STM32F107VCT6的接线方式:以太网控制器的RX_CLK、TX_CLK端口分别连接至STM32F107VCT6微控制器的PA1、PC3端口。以太网控制器的TXD3、TXD2、TXD1、TXD0端口分别连接至STM32F107VCT6微控制器的PB8、PC2、PB13、PB12端口。以太网控制器的RXD3、RXD2、RXD1、RXD0端口分别连接至STM32F107VCT6微控制器的PD12、PD11、PD10、PD9端口。以太网控制器的TX_EN、RX_DV端口分别连接至STM32F107VCT6微控制器的PB11、PB8端口。以太网控制器的RX_ER端口连接至STM32F107VCT6微控制器的PB10端口。以太网控制器的MDIO、MDC端口分别连接至STM32F107VCT6微控制器的PA2、PC1端口。以太网控制器的COL、CRS端口分别连接至STM32F107VCT6微控制器的PA0、PA3端口。综上,可设计如图4-13以太网接口原理图。图4-13 DP83848接口电路原理图2、 DP83848时钟源为了产生TX_CLK和RX_CLK时钟信号,DP83848需要外部提供25MHz的时钟源。提供时钟源有两种方式,由嵌入式控制器STM32F107的HSE时钟信号通过MCO引脚提供,或者在外部灵加时钟源。本设计采用了第二种方案。外部添加25MHz晶振,附加两个22pf的电容辅助晶振起振。时钟电路如图4-14所示。图4-14 DP83848时钟源原理图3、网络插座输出电路以太网PHY芯片DP83848采用HR911105A以太网转接头与网络相连接,其采用内置网络变压器、状态显示灯和电阻,可减小外部电路对电路板空间的占用。并且内置网络的变压器具有信号耦合、电器隔离、阻抗匹配、抑制干扰等作用。HR911105A通过一对差分接收数据线和一对差分发送数据线与DP83848以太网PHY芯片相连接。具体原理图如图4-15所示。图4-15 网络插座接口原理图5 软件设计5.1 总体方案串口转网络系统涉及软件方面的工作主要有:LwIP协议栈的移植,基于LwIP协议栈的TCP服务器的编写,基于嵌入式微控制器的串口通信程序编写,以太网控制器驱动程序的移植与编写。其中由于LwIP协议栈的移植并没有附加操作系统,所以主要工作为修改三个底层文件ethernetif.c、lwipopts.h、opt.h。TCP服务器的编写遵循常用网络服务器编程模型,即先绑定地址,再进行连接监听,当有客户端主动发起连接请求时则建立稳定连接,然后进行连接的处理,如数据的获取和发送,最后断开连接。串口通信程序编写有两种方式,轮询和中断模式,因为STM32F107VCT6具有强大的中断系统,所以采用中断与轮询结合的模式具有更高的效率。对于STM32F107VCT6的程序设计,因为需要完成的功能相对复杂,所以采用C语言的形式来进行编写。编译器采用Keil uVision4 IDE,该编译器是为ARM系列单片机编码的常用软件,可进行汇编和C语言编译。并且集成了在线调试功能,支持JLINK下载与在线调试。5.2 LwIP协议栈的移植与大多数别的TCP/IP协议栈设计一致,LwIP同样以分层模型作为参考。LwIP协议栈可按照其实现方式划分为四层:数据链路层、网络层、传输层以及应用层。与其他协议栈的分层方式不同的是,LwIP不在层与层之间实行严格的界定,不同层级之间能够执行一些简要的读写,即上层能够获取到下层协议所采取的缓存管理方式。也正因为这个分层方式,系统缓冲区能够被各协议层更加合理地利用。并且用户应用程序可以和协议栈代码共同使用一块内存,所以应用程序能够直接在协议栈内部的缓存中存取数据,省略了一般网络协议栈拷贝用户数据到栈内的步骤,节省了整个系统的性能开销。STM32F107VCT6有针对以太网的专用直接内存存取控制器(DMA)。直接内存存取控制器拥有一个数据接收模块和一个数据发送模块,另外还有相应的状态寄存器和控制寄存器。其中,承担将接收队列中的数据读至芯片内存的任务模块为接收模块,发送模块负责把芯片内存中获取的数据传送至发送队列。直接内存存取控制器以描述符的形式来完成数据在不同内存地址之间的转移,以降低CPU的负担。其中与DMA相关的两个LwIP底层驱动函数需要做相应的修改。首先,函数ETH_RxPkt_ChainMode检查已经接收数据的描述符是否被DMA占用,如果不是则CPU就读取DMA缓冲区的数据。其接收报文具体的伪代码如下所示:FrameTypeDef ETH_RxPkt_ChainMode(void) if(描述符被DMA占用) if (接收到缓存可用状态) 清除以太网DMA接收缓存不可用标志位 恢复DMA接收功能 if(校验和正确并且数据没有到达帧头或者帧尾) 获取接受到的数据帧长度 获取实际数据缓存地址 用下一个接收数据描述符更新以太网DMA全局接收描述符 返回接收的数据帧报文发送函数ETH_TxPkt_ChainMode首先检查DMA的发送标志位是否被清零,如已被清零,则说明DMA控制器的发送缓冲区中已置入CPU要发送的数据帧,可以开始发送报文了。函数先设置数据帧的长度,然后置位发送描述符的标志位,如果发送的缓冲区可用,则发送数据帧,最后清除发送数据的标志位。其报文发送的具体伪代码如下所示:u32 ETH_TxPkt_ChainMode(u16 FrameLength) if(描述符没有被DMA占用) 设置数据帧长度设置首段和尾段的标志位设置描述符标志位,将缓冲区重新还给以太网DMAif(发送缓冲区不可用) 回退以上赋值,标志位置为等待发送缓冲区可用用下一个发送数据描述符更新以太网DMA全局发送描述符5.2.1 网络协议栈LwIP驱动层移植LwIP的作者为了方便协议栈的移植,做了大量的工作。他将与网络最底层取决于使用的是何种网络接口芯片的模块封装在ethernetif.c文件中,并且作者已经根据整个协议栈的框架向移植者提供了简要的代码框架,我们只需要根据自己使用的微处理器及以太网控制器,在作者提供的框架代码里修改相应功能就可以实现网络初始化,一些中断的处理及报文收发等常用操作。本设计中ethernetif.c文件是STM32F107VCT6嵌入式微控制器以太网驱动程序与轻型协议栈LwIP之间的接口。移植需修改在此文件中的实现涉及如下几个函数:low_level_init()、low_level_output()、low_level_input()、ethernetif_input()、ethernetif_init()。low_level_init()函数为网络控制器初始化函数,其功能为赋值网络接口管理结构体指针netif中和网络控制器规格密切关联的成员,并处理网络控制器的复位以及初始化。针对netif结构体成员结合相应硬件,low_level_init()函数的伪代码为:static void low_level_init(struct netif *netif)设置MAC硬件地址长度与硬件地址设置最大传输单元设置状态标志位,允许网络控制器广播和ARP功能并允许硬件链路连接初始化传输描述符链表与接收描述符链表使能以太网接收中断与校验和的自动插入使能MAC和DMA传输和接收ethernetif_input()函数为网络层接收函数,它将从网络控制器数据包接收函数中获取的一个报文解析出来,然后将解析后的数据包发送至相应的上层函数。以太网控制器获取的数据包格式如表5-1所示。表5-1 以太网帧格式目标物理地址源物理地址报文类型有效数据部分循环冗余校验码6Bytes6Bytes2Bytes461500Bytes4BytesLwIP定义了eth_hdr这个结构体来表示以太网数据帧帧头的14个字节。网络控制器报文接收函数low_level_input()获取以太网控制器从网络上接收到的数据帧,并将从底层获得的数据拷贝至新开辟的pbuf指向的结构体内存中,以上获取的以太网数据包就存储在pbuf结构体的payload字段所指向的内存中。pbuf结构体的定义如下所示:struct pbuf struct pbuf *next; /下一个缓冲结构指针 void *payload;/存储数据缓冲的起始地址指针 u16_t tot_len;/当前缓冲和它后面所有缓冲的有效数据长度 u16_t len; /当前缓冲的有效数据长度 u8_t type; /缓冲的数据类型 u8_t flags;/缓冲的数据类型,和上一个成员类似 u16_t ref;/缓冲被引用的次数;结合DMA操作,low_level_input()函数的伪代码如下所示:static struct pbuf * low_level_input(struct netif *netif) 获取报文 根据报文获取数据帧长度与数据帧 在内存池中申请pbuf结构体内存将数据帧内容拷贝至pbuf的payload字段设置接收描述符状态将内存还给以太网DMAif (发送缓冲区不可用) 回退以上赋值,标志位置为等待发送缓冲区可用返回pbuf指针ethernetif_init()函数用于初始化网络接口结构体netif中的主机名和网卡字段,并固化物理地址,然后调用low_level_init()函数进行初始化操作。与此同时,此函数还将发送数据报文的函数的地址赋值给了网络接口结构netif中的报文输出函数指针成员。其具体伪代码如下:err_t ethernetif_init(struct netif *netif) 设置主机名设置网卡接口使用驱动设备类型种类 设置接受数据报文函数设置硬件MAC地址网络底层初始化low_level_output()函数一般为ethernetif_init()函数初始化时设置为发送数据报文的函数,其主要功能为发送DMA缓冲区里的数据。其伪代码如下所示:static err_t low_level_output(struct netif *netif, struct pbuf *p) 获取DMA发送数据内存地址 将p指向的内存中要发送的数据拷贝至获取的DMA内存地址中设置DMA发送数据的长度等属性并发送数据帧5.3 串口通信软件设计STM32F107VCT6拥有5路通用同步/异步串行收发器(USART)。USART进行双向数据传输至少要有RXD(接收数据输入引脚)和TXD(发送数据输出引脚)。RXD接收串行数据输入,采用应用采样技术的方式进行区分数据与噪音信号,以便得到真实数据;TXD进行发送的数据,如果发送器没有被启用,对应输出端口配置变为I/O模式。如果发送器状态被置为启用但没有传送数据,则发送数据输出端口变为高电平。STM32F107VCT6的USART通信有如下几个特点:(1)在传输数据前需要先确认总线上没有正在传输的数据;(2)拥有一个起始位,8位或9位最高有效位在后的数据字;(3)拥有一个存储串口通信状态的状态寄存器(USART_SR),一个存储通信数据的数据寄存器(USART_DR),一个存储波特率的波特率寄存器(USART_BRR)(使用12位整数和4位小数组合的方式)。表5-2 串口工作模式(表示支持,NA为不支持)串口模式串口1串口2串口3串口4串口5异步通信方式硬件流支配NANA多缓冲传输(DMA)多控制器传输SYNNANASmart CardNANA半双工IrDALINSTM32F107VCT6串口通信具有多种模式:异步通信模式、硬件流支配、多缓冲传输(DMA)、多控制器传输、SYN模式、Smart Card模式、半双工模式、IrDA模式、LIN模式。具体串口是否支持以上所有模式见表5-2,本设计所用的模式为异步模式。5.3.1 串口通信数据格式STM32F107VCT6能够用改变USART_CR1(控制寄存器1)中的M位的方式来决定传输数据字长是8或者9位。在起始位时,TXD端口保持低电平状态,在停止位时就变换成高电平。空闲帧为完全由1组成的一个完整的数据帧,紧跟着后面包含了下一帧数据的起始位,其中空闲帧中1的位数也包含了通信数据的停止位。断开帧为完全由0组成的一个完整帧,在断开帧结束时,串口发送器再加入一或两个停止位(1)来与起始位相呼应。串口通信的收发由一个共用的波特率产生装置驱动,如果串口发送器和接收器开启,波特率产生装置就会为其提供时钟信号。本设计使用的是8位字长,1个停止位的传输数据,具体格式如图5-3所示。由于使用人工操作寄存器较为繁琐和复杂,意法半导体官方还发布了基于STM32系列的库函数,一些对于底层寄存器的操作被封装在函数接口中。串口通信相关操作主要和结构体USART_InitType

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论