【完整版】基于STM32的WIFI无线网络应用设计毕业论文设计说明书

更新时间:2023-04-29 03:13:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SHANDONGUNIVERSITYOFTECHNOLOGY

毕业设计说明书

基于STM32的WIFI无线网络应用设计

I

毕业设计(论文)原创性声明和使用授权说明

原创性声明

本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期: -指导教师签名:日期:

使用授权说明

本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:

学位论文原创性声明

本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。

作者签名:日期:年月日

学位论文版权使用授权书

本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名:日期:年月日

导师签名:日期:年月日

摘要

随着无线局域网技术的快速发展,无线终端已经融入了我们的生活,无论是智能手机还是笔记本,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 与读写有关的寄存器说明

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,将数据包前面的所有数据以八位为一

个分组进行异或,将最后的结果存入最后的八位中。

源标长:8bit,主叫端用户名的用户名。

目的标长:8bit,接受方标号的长度。

目的标号:8bit,目的端用户名的用户名。

上述五种数据报文中,注册请求和应答请求主要在用户登录系统时注册使用,呼叫请求,呼叫通报,客户端呼叫应答和服务器呼叫应答主要在呼叫请求的过程中。具体过程为主叫方将呼叫请求发送至服务器,服务器收到请求后解析数据包产生呼叫通告报文发给被叫方,等待被叫方的呼叫应答报文,然后将结果传递给主叫方,同时,如果被叫方长时间没有反应,则服务器会产生呼叫失败报文给主叫方。

对于数据类型的报文,其主要目的是承载通信双方的数据以及相对于数据的应答。主要包括数据报文、应答报文和数据结束报文。报文格式如图所示:

图5-11 数据报文

图5-13 应答报文

图5-14 结束报文

从图中可以看出数据类报文结构和信令类相比,有了包号,数据长度和数据字段,其中数据长度和数据主要表示传输的数据,而对于包号,主要作用是中断可以根据包号重组收到的数据包,保持数据包的完整性。

5.4 uCGUI的移植

5.4.1 uCGUI的目录结构

uCGUI推荐的目录结构如图4-7所示,在工程文件夹中保持uCGUI程序文件(包括头文件)的独立性和完整性可以使uCGUI的升级更加简单(仅需简单的替换GUI子文件夹)。

图5-15 uCGUI目录结构

各个子文件夹的内容说明如下表所示:

表5-2 uCGUI文件结构及说明

5.4.2 在目标系统上应用uCGUI的配置过程

uCGUI的移植过程如图5-15所示:

图5-16 uCGUI移植过程

1.底层驱动程序,使其可以正常显示。

2.在工程项目中加入uCGUI程序包。

3.修改有关的配置头文件(在将uCGUI程序包加入到工程项目文件中后,首先要做的就是要对uCGUI进行相关的配置,以使其与自己所采用的具体硬件环境相适应。

具体步骤如下:

编写TFT-LCLCDConf.(); LCD控制器

初始化函数#endif

5.4.4 GUIConf. ((U32)(OSTCBCur->OSTCBPrio)); }

void GUI_X_InitOS(void) { DispSem = OSSemCreate(1); }

void GUI_X_Unlock(void) { OSSemPost(DispSem); }

void GUI_X_Lock(void) { INT8U err;

OSSemPend(DispSem, 0, &err);} 5.4.5 ILI9235的初始化

ILI9325的初始化需要配置众多的寄存器,用于配置电源模块、工作模式、伽马校正等等,具体每个参数的含义可以查阅ILI9325数据手册,其中最重要的用于配置工作模式的寄存器之前已经介绍过。一般在购买液晶屏时会附赠屏幕所用液晶控制器的初始化程序,我们可以在稍加修改使其满足自己的特定需要后直接调用这些初始化程序。

本文所用程序中ILI9325液晶控制器的初始化函数原型如下:

void LCD_9325_Init(void);

ILI9325液晶控制器在开始配置之前首先要进行复位。由之前的LCD转接板原理图可知ILI9325 RST复位引脚连接的是STM32的PC1引脚,且RST引脚是低电平有效,所以为了产生有效的复位信号,需要将PC1引脚电平拉高——拉低——再拉高,具体实现的程序代码如下:

GPIO_SetBits(GPIOC, GPIO_Pin_1 );

Delay(0xAFFF);

GPIO_ResetBits(GPIOC, GPIO_Pin_1);

Delay(0xAFFF);

GPIO_SetBits(GPIOC, GPIO_Pin_1 );

Delay(0xAFFF);

5.4.6 LCD底层API的编写

在将uCGUI用于具体的液晶显示器时需要提供TFT-LCD的底层驱动函数。由于uCGUI本身提供了很多液晶控制器的驱动,很多时候只要在LCDConf.)。

然后,按照uCOS-II系统初始化的要求,创建了一个优先级最高(优先级为2)的起始任务:App_TaskStart( ),接着调用系统函数OSStart()开始多任务管理。

在起始任务中,我们创建了3个用户任务,分别是:

1._Task_0,优先级为5,用来维护_Task_0窗口;

2._Task_1,优先级为4,用来维护_Task_1窗口;

3._GUI_Task,优先级为3,用来维护背景区域。

下面简要介绍一下_Task_0任务的工作流程,_Task_1与_GUI_Task的工作过程与_Task_0类似。_Task_0的工作流程图如图5-2所示:

首先:调用函数FRAMEWIN_Create( )和WM_CreateWindowAsChild( )分别创建了框架父窗口和子窗口,然后调用函数WM_SelectWindow()

和GUI_SetFont( )选择了子窗口为其并设置了显示字体。

接下来进入任务主循环:计算滚动文字移动范围并调用函数

WM_InvalidateWindow()使子窗口失效,然后通过调用回调函数cbCallbackT0(WM_MESSAGE * pMsg)来重绘窗口并最终实现滚动文字效果。_Task_1与_GUI_Task的工作流程与_Task_0类似,只不过_Task_1移动的是窗口,_GUI_Task用来维护显示背景。

图5-18 _Task_0任务工作流程图

以上三个任务实现了滚动文字及移动窗口的动态显示效果。

在所有任务创建完毕后,系统进入了正常的多个任务同时运行的状态。

第六章结论

本文在嵌入式系统和WiFi无线网络技术的基础之上,介绍了WIFI-M03模块的参数和操作流程,重点分析了网络数据传输协议的报文设计和以及无线热点接入图形界面的开发等问题,以达到一个精简的目的。

全文分为三大板块:

1.详细介绍了嵌入式系统及WiFi无线网络的基础知识。

2.详细介绍了嵌入式系统的硬件平台,其中包括芯片的选择,32位的

STM32F103微处理器主要特点,以及WiFi模块的操作流程。

3.在软件设计部分,首先给出了该系统软件设计的分层框图,详细介绍了LCD 驱动程序、串口初始化程序、WiFi参数配置程序的编写,重点分析了网络数据传输协议报文的设计,简述了UCGUI在STM32嵌入式平台的移植,并在此基础上进行了WiFi无线热点接入图形界面的开发。

本设计方案在性能方面超过了传统8位或者16位微处理器,提高了系统的性能,实现了更多的功能;在价格方面,由于32位ARM微处理器价格的不断下降,相对于那些大型服务器其成本已经非常便宜。

参考文献

[1]沙占友等. 单片机外围电路设计. 北京:电子工业出版社,2003

[2]美Berger,A.著吕骏译《嵌入式系统设计》电子工业出版社,2002.9

[3]《嵌入式系统设计教程》,马洪连等,电子工业出版社,2006.6

[4]周立功著.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版

社,2005.5

[5]杨刚主编,《32位嵌入式系统与SoC设计导论(第2版)》,电子工业出版

社,2011.1

[6]李宁.《基于MDK的STM32处理器开发应用》北京航空航天大学出版社.

2008年

[7]Duckmyung, Yuseong, Daejeon. Modified multilevel inverter employing

to photovoltaic power generation. 2010:305-719

[8]KONSTANTIN TURITSYN ;PETR SULC ;SCOTT BACKHAUS ;MICHAEL CHERTKOV.

Options for Control of Reactive Power by Distributed Photovoltaic Generators.2011, 99(6)

[9]H. El Fadil ;F. Giri. Climatic sensorless maximum power point tracking in

PV generation systems.Control engineering practice :2011, 19

本文来源:https://www.bwwdw.com/article/5y3q.html

Top