SHANDONGUNIVERSITY OF TECHNOLOGY
毕业设计说明书
基于STM32的WIFI无线网络应用设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得
及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作 者 签 名: 日 期: -
指导教师签名: 日 期:
使用授权说明
本人完全了解
大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电
子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。
作者签名: 日期: 年 月 日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名: 日期: 年 月 日
导师签名: 日期: 年 月 日
摘 要
随着无线局域网技术的快速发展,无线终端已经融入了我们的生活,无论是智能手机还是笔记本,WiFi功能几乎是必不可少的。目前WiFi技术主要的应用还在手持终端,但随着用户需求的越来越广泛,WiFi技术也需要应用到不同的方面如工业控制,移动办公等,这就需要不同形式的终端。
本文开发并实现基于一种嵌入式开发平台的STM32的WiFi模块,使一些嵌入式设备也能够使用无线资源。论文首先讨论了基ARMCortex-M3的嵌入式开发技术,介绍了WiFi网络的发展现状及前景,利用STM32F103VCT6串口连接WiFi模块,介绍了UCGUI在STM32平台上的移植,最后,在此基础上进行基于uCGUI的多窗口应用界面的设计,实现了WiFi热点接入界面的开发。
关键词:STM32,WiFi,UCGUI,LCD
ABSTRACT
Today with the rapid development of wireless LAN technology, wireless
terminals gradually integrated into our lives. WiFi function is almost essential
whether it is a smart phone or a laptop. Currently the main application of WiFi
technology still embedded development platform based on the STM32 WiFi
module, and enable some embedded devices to use the wireless resources. Firstly,
we discuss the embedded development technology based on ARM Cortex-M3 ,
introduced a WiFi network development situation and prospects, using the serial
port using the STM32F103VCT6 WiFi module, introduced in the STM32
platform UCGUI transplant, finally, on this basis, based uC GUI application of
multi-window interface design, to achieve a WiFi (void);设置波特率,中断类型等,在本项目中设置波特率为115200bps,接收和发送都产生中断以保证其既能发送数据又能接受数据。WiFi开发模块为开发者提供了一个数据结构NetParaBuffer来统一每个参数的格式,其具体结构如下:
typedef struct NetParaBuffer
{
unsigned char M_id; 参数名称
unsigned char cLength; 参数长度
unsigned char cInfo[64]; 具体的参数内容
}
在配置到WiFi的相关参数后,调用WiFi_Para_set_auto()使WiFi处在自动模式并联网,这就可以通过AP连上网了。之后的数据直接调用SendDataToWiFi就可以通过USART1将数据发送到WiFi模块,根据之前设置的服务器IP地址通过AP发送出去。具体程序流程图如下:
图5-2 串口初始化流程图
5.2.2 TFT-LCD底层驱动设计
5.2.2.1 与读取写入相关的寄存器
由ILI9325数据手册可知,索引寄存器(Index Register)存储指令或显示数据即将被写入的寄存器的地址,寄存器选择信号(RS)、读写信号和数据总线用来读写ILI9325内部的指令或数据。因此,要访问9325内部的寄存器或显示RAM,首先要通过IR索引寄存器设置目标寄存器的地址。
除了IR寄存器,与读写访问有关的寄存器如图5-2所示:
图5-3 与读写有关的寄存器
表5-1说明了每个寄存器的具体用途:
表5-1 与读写有关的寄存器说明
R20h,R21h(GRAM水平垂直地址设置寄存器) 此寄存器用来设置地址计数器(AC)的初始值。随着数据被写入内部GRAM,地址计数器按照之前所述的AM、ID位的设置自动更新。当从内部GRAM读取数据时,AC不自动更新。
R22h(GRAM写数据寄存器) 这个寄存器是GRAM访问接口。当通过这个寄存器更新显示数据时,地址计数器(AC)自动增加或减少。
R22h(GRAM读数据寄存器) 此寄存器用来从GRAM中读出显示数据。
5.2.2.2 读取写入数据的过程
ILI9325内部具有一个16位的索引寄存器(IR),一个18位的写数据寄存器(WDR)和一个18位读数据寄存器(RDR)。WDR寄存器用来临时存储即将被写入控制寄存器或者内部GRAM的数据,RDR寄存器用来临时存储从GRAM读出的
数据。来自MPU的将被写入内部GRAM的数据首先被写入WDR,然后再被自动写入GRAM。MPU通过RDR寄存器读取内部GRAM的数据。因此,在读取9325内部GRAM的数据时,第一次读出的是无效数据,从第二次开始读取有效数据。当读取GRAM的地址改变时,第一次读取的仍为无效数据。读取数据的流程如图4-3所示:
图5-4 ILI9325读内部显示数据流程图
首先,根据在初始化时设置的GRAM地址刷新方式(由ID、AM位的组合值确定)以及窗口地址区域的起止坐标(由HSA、HEA和VSA、VEA联合确定)设置填入地址计数器AC的初始地址值M。
由于第一次读出的显示数据是RDR读数据锁存器中的无效数据,因此需要进行第二次数据读取,以得到真正有效的显示数据。
由于在读取GRAM显示数据时地址计数器AC的值不会自动更新,因此在希望读取另一地址处的显示数据时需要重新设置AC的初值并重复以上过程。
5.2.3 具体程序实现
由前面的时序图得之,读写ILI9325内部的寄存器或显示RAM的过程是先在索引寄存器写入地址,然后写入命令数据或颜色值,读写内部寄存器或GRAM的具体流程如图5-5所示:
图5-5
5.3 网络数据传输报文设计
所选WiFi模块在自动模式下始终工作在透明数据传输状态,因此用户只需把它看做一条虚拟的串口线。为了能够保证数据能够在网络上顺利传输以及平台的兼容性,需将发送至串口的报文制定统一的数据结。一个好的数据结构是模块稳定的保证,是系统提供模块类型的体现,除了可以保证模块的可扩性,还可以为系统的扩展提供保障。
本项目中,WiFi模块所在的系统架构为CS架构,这就要求数据报文除了需要模块能够正确的处理,同时要求服务器能够解析。对于服务器端,主要由项目中其他人解决,这里根据数据数据格式的用途及服务器和客户端的特点,可以将数据包分为两类,一类与信令相关的结构,一类与数据相关的结构。
对于与信令相关的数据包主要包括注册请求报文,注册应答报文,呼叫请求报文,呼叫通报报文,被叫端呼叫应答报文,服务器呼叫应答报文,报文格式如图5-6至图5-11。
图5-6注册请求报文
图5-7注册应答报文
图5-8 呼叫请求报文
图5-9 呼叫通报报文
图5-10被叫端呼叫应答报文
图5-11服务器呼叫应答报文
对上图中各数据报文中字段含义如下:
总长度:8bit,表示报文的总长度。
类型:8bit,表示报文的类型,在这个字节的不同值代表不同的数据报文类型,其中0x10:注册报文请求,0x12:注册报文失败,0x20:呼叫请求,0x22被叫通报,0x21:呼叫成功,0x23呼叫失败。
标长:8bit,标号的长度,标号类似于该用户的用户名。
能力:8bit,能力主要用于该用户使用资源的权利,服务器可以根据用户的能力判断用户是否对资源有实用的权限。本项目中默认用户都有发送报文和接受报文的能力,并用0x00表示。
Random:16bit,Random是客户端产生的一个16位的随机数,服务器返回的应答报文应是Random+1。Random在一些协议中,主要作用是保证信息的新鲜性,防止重放攻击。
CRC:8bit,CRC的全拼是Cyclic Redundancy Check,又称之为循环冗余校验。在本项目中,使用一个简单的CRC,将数据包前面的所有数据以八位为一