




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
shandong 毕业设计说明书 基于 stm32 的 wifi 无线网络应用设 计 学 院: 专 业: 学生姓名: 学 号: 指导教师: 2013 年 6 月 中文摘要 i 摘 要 随着无线局域网技术的快速发展,无线终端已经融入了我们的生活,无 论是智能手机还是笔记本, wifi 功能几乎是必不可少的。目前wifi 技术 主要的应用还在手持终端,但随着用户需求的越来越广泛,wifi 技术也 需要应用到不同的方面如工业控制,移动办公等,这就需要不同形式的终端。 本文开发并实现基于一种嵌入式开发平台的 stm32 的 wifi 模块,使一些 嵌入式设备也能够使用无线资源。论文首先讨论了基 armcortex-m3 的嵌入式 开发技术,介绍了 wifi 网络的发展现状及前景,利用 stm32f103vct6 串口 连接 wifi 模块,介绍了 ucgui 在 stm32 平台上的移植,最后,在此基础上 进行基于 uc/gui 的多窗口应用界面的设计,实现了 wifi 热点接入界面的开发。 关键词:关键词:stm32,wifi,ucgui,lcd abstract ii abstract today with the rapid development of wireless lan technology, wireless terminals have been 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 handheld terminal, but with the users needs more and more widely, wifi technology needs to be applied to different areas such as industrial control, mobile office, etc., which require different forms of terminals. this paper developed and implemented an 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 hotspot access interface development. key words : stm32, wifi, lcd,uc/gui 目录 iii 目 录 摘摘 要要i abstract ii 第一章第一章 引引 言言 .1 1.1 arm 的发展趋势1 1.2 wifi 的发展背景2 第二章第二章 arm 系统的硬件平台系统的硬件平台.3 2.1 概述.3 2.2 嵌入式处理器的选择.3 2.3 stm32f103 的 usart 接口4 2.3.1 usart 接口的引脚描述4 2.3.2 usart 主要的特性5 2.3.3 数据发送与接收过程.5 第三章第三章 wifi 技术及模块概述技术及模块概述.7 3.1 wifi技术概述.7 3.1.1 wifi 网络基本结构7 3.1.2 wifi 网络的操作模式7 3.2 wifi模块介绍.8 3.2.1 模块硬件结构 .9 3.2.2 模块工作模式 .10 第四章第四章 硬件模块设计硬件模块设计 .11 4.1 系统硬件结构.11 4.1.1 wifi 模块工作流程11 4.2 模块电路.12 4.2.1 电源设计 .12 4.2.2 复位电路设计 .13 4.2.3 晶振电路设计 .13 4.2.4 调试接口 .14 4.3 lcd 模块14 目录 iv 4.3.1 原理图 .14 4.4 存储模块.15 4.4.1 原理图 .15 4.4.2 功能描述 .15 第五章第五章 软件设计软件设计 .16 5.1 系统软件设计框图.16 5.2 驱动设计.16 5.2.1 串口驱动设计 .16 5.2.2 tft-lcd 底层驱动设计17 5.2.3 具体程序实现 .19 5.3 网络数据传输报文设计.20 5.4 uc/gui 的移植.23 5.4.1 uc/gui 的目录结构23 5.4.2 在目标系统上应用 uc/gui 的配置过程.24 5.4.3 lcdconf.h 的配置(低层配置)25 5.4.4 guiconf.h 的配置(高层配置)25 5.4.5 ili9235 的初始化27 5.4.6 lcd 底层 api 的编写27 5.5 wifi热点接入管理界面开发.27 第六章第六章 结论结论 .31 参考书目参考书目 .32 致谢致谢 .33 附录附录 最小系统原理图最小系统原理图 .34 第一章 引言 1 第一章 引 言 随着信息技术的飞速发展,人类进入了后 pc 时代,嵌入式系统与互联网络 已经无所不在,它们一起深刻地影响着我们的生活,而这两者的融合已经是大 势所趋,如何让嵌入式系统接入网络已经成为信息领域研究和应用的热点,越 来越受到人们的重视。 1.1 arm的发展趋势 arm(advanced risc machines),既可以认为是一个公司的名字,也可以认 为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991 年 arm 公司成立于英国剑桥,主要出售芯片设计技术的授权。公司正 式成立以来,在 32 位 risc 开发领域中不断取得突破,其结构已经从 v3 发展 到 v6。arm 公司一直以 ip(intelligence property)提供商的身份向各大半 导体制造商出售知识产权,而自己从不介入芯片的生产销售,加上其设计的芯 核具有功耗低,成本低等显著优点,因此获得了众多的半导体厂家和整机厂商 的大力支持,在 32 位嵌入式应用领域获得了巨大的成功,目前已经占有 75%以 上的 32 位 risc 嵌入式产品市场。在低功耗,低成本的嵌入式应用领域确立了 市场领导地位。 90 年代初,arm 率先推出 32 位 risc 微处理器芯片系统 soc 知识产权公开 授权概念,从此改变了半导体行业。arm 通过出售芯片技术授权,而非生产或 销售芯片,建立起新型的微处理器设计,生产和销售商业模式。更重要的是 arm 开创了电子新纪元:采用 arm 技术的微处理器遍及各类电子产品,在汽车、 消费娱乐、成像、工业控制、网络、储存、安保和无线等市场,arm 技术无处 不在。 现在采用 arm 技术知识产权(ip)核的微处理器,即我们通常所说的 arm 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系 统等各类产品市场。arm 技术正在逐步渗入到我们的生活的各个方面。世界各 大半导体生产商从 arm 公司购买其设计的 arm 微处理器,根据各自不同的应用 领域,加入适当的外围电路,从而形成了自己的 arm 微处理器芯片进入市场。 第一章 引言 2 目前,全世界有几十家大的半导体公司都使用 arm 的授权,因此既使得 arm 技术获得更多的第三方的工具、制造、软件的支持,又使整个系统的成本 降低,使产品更容易进入市场被消费者所接受,更具有竞争力。国内的中兴和 华为也已经购买了 arm 公司的芯核用于通讯专用的芯片设计。 1.2 wifi的发展背景 wifi 是 ieee 定义的一个无线网络通信的工业标准(ieee 80211)自从 1997 年无线局域网标准诞生以来,wifi 的发展已经近十年了随着数据业务 需求的不断增加,以 ieee 80211 协议为基础的无线局域网(wlan)的研究正 逐渐为人们研究的热点。最初开发 wlan 主要用于企业和家庭网络,通过有线 lan 进行无线扩展,通过无线通信的方式实现有线 lan 的功能,并以比有线网 络更加低廉的价格和更加便、灵活的方式进行网络安装和维护。但是,随蜂窝 移动通信产业的成功和 wlan 技术的发展,出现了与电信网络融合提供公共 wlan 服务的趋势,使人们可以通过 wlan 非常方便地享受高速的无线数据服, 这也极大地拓展了 wlan 的应用空间。 现在 wifi 正在进入一个快速发展的阶段。其中,作为 802.1lb 发展的后继 标准 802.16(wimax)虽然采用了与 802.11b 不同的频段(10-66ghz),但作为一 项无线城域网(wman)技术,它可以和 802.11b/g/a 无线接入热点互为补充,构 筑一个完全覆盖城域的宽带无线技术。由于移动运营商数目的增加,语音业务 带来的 arpu 必然呈现下降趋势,如何提供更多的数据多媒体业务也是移动运 营商一直在思考的问题。在这样的背景下,wlan 在部署上取得了实质性的进展: wifi 和 volp 的结合给固网运营商带来了契机;wlan 的热点覆盖计划也正作为 3g 的补充成为移动运营商新的利润点。 未来 wifi 的发展方向将包括:网络技术上覆盖更大的范围,从热点到热区 再到整个城市;推广 wifi 手持终端和 vowlan 业务成为应用模式;基于 ip 的 wifi 交换技术和开放的业务平台,使 wlan 网络更智能、更易于管理;基于多 层次的安全策略(wep、wpa、wpa2、aes、vpn 等)提供不同等级的安全方案,以 确保无线通信的安全。 第二章 arm 系统的硬件平台 3 第二章 arm系统的硬件平台 2.1 概述 嵌入式硬件平台包括中央处理器、外围的控制电路、只读存储器、可读写 存储器、外围设备和网络控制单元。由于嵌入式系统芯片的多样性,各模块芯 片都有较大的选择空间。在选择上述硬件平台模块的具体芯片时,通常需要考 虑它们的功能、功耗、封装、体积、成本、可靠性、电磁兼容性等方面,并在 尽量满足应用需求的同时尽量减少冗余功能,以节约成本。本文根据实时监控 的需要选择实验平台各模块的芯片。 2.2 嵌入式处理器的选择 目前嵌入式系统中 32 位微控制器(mcu)的使用率正逐年增长,32 位 arm 体系结构己经成为一种事实上的标准,随着高端 32 位嵌入式微处理器价格的 不断下降和开发环境的成熟,使得 32 位嵌入式处理器正日益挤压原先由 8 位 微控制器主导的应用空间。随着 arm 处理器在全球范围的流行,32 位的 risc 嵌入式处理器已经开始成为高中端嵌入式应用和设计的主流。使用 32 位 架构不仅能提升性能,还能降低相同成本下的系统功耗和节约总成本以及缩短 产品上市时间。并使得嵌入式系统可随着产品的性能和需求不断扩展而升级。 本文选用了一款基于 arm cortex-m3 内核芯片由意法半导体(st)推出的 stm32f103 芯片。stm32f103 系列微处理器是首款基于 armv7-m 体系结构的 32 位标准 risc(精简指令集)处理器,很高的代码效率,在 8 位和 16 位系统的 存储空间上发挥了 arm 内核的高性能。该系列微处理器工作频率为 72mhz,内 置高达 128k 字节的 flash 存储器和 20k 字节的 sram,具有丰富的通用 i/o 端 口。 作为最新一代的嵌入式 arm 处理器,它为实现 mcu 的需要提供了低成本的 平台、缩减的引脚数目、降低的系统功耗,同时提供了卓越的计算性能和先进 的中断响应系统。丰富的片上资源使得 stm32f103 系列微处理器在多种领域如 电 第二章 arm 系统的硬件平台 4 机驱动、实时控制、手持设备、pc 游戏外设和空调系统等都显示出了强大的发 展潜力。 stm32f103 系列微处理器主要资源和特点如下: 1.多达 51 个快速 i /o 端口, 所有 i/o 口均可以映像到 16 个外部中断, 几乎所有端口都允许 5v 信号输入。每个端口都可以由软件配置成输出(推挽 或开漏)、输入(带或不带上拉或下拉)或其它的外设功能口。 2.2 个 12 位模数转换器,多达 16 个外部输入通道,转换速率可达 1mhz,转 换范围为 0-36v,具有双采样和保持功能。内部嵌入有温度传感器,可方便的 测量处理器温度值。 3.灵活的 7 路通用 dma 可以管理存储器到存储器、设备到存储器和存储器 到设备的数据传输,无须 cpu 任何干预。通过 dma 可以使数据快速地移动 cpu 的资源来进行其他操作。dma 控制器支持环形缓冲区的管理,避免了控制器传 输到达缓冲区结尾时所产生的中断。它支持的外设包括:定时器、 adc、spi、i2c 和 usart 等。 4.调试模式:支持标准的 20 脚 jtag 仿真调试以及针对 cortex- m3 内核的 串行单线调试(swd)功能。通常默认的调试接口是 jtag 接口。 5.内部包含多达 7 个定时器。 6.含有丰富的通信接口,三个 usart 异步串行通信接口、两个 i2c 接口、 两个 spi 接口、一个 can 接口和一个 usb 接口,为实现数据通信提供了保证。 除工业可编程逻辑控制器(plc)、家电、工业及家用安全设备、消防和暖气 通风空调系统等传统应用,智能卡和生物测定等消费电子应用外,新的 stm32 系列还特别适合侧重低功耗的设备,如血糖和血脂监测设备。 2.3 stm32f103的usart接口 2.3.1 usart 接口的引脚描述 表 2.1 usart 的引脚描述 第二章 arm 系统的硬件平台 5 引脚 名称 类型描述 rx输入端口串口数据流入 tx输出端口串口数据流出 2.3.2 usart 主要的特性 1.3 全双工的,异步通信。 2. nrz 标准格式。 3. 分数波特发生器系统。 4. 可编程数据字长(8 位或 9 位)。 5. 可配置的停止位-支持 1 或 2 个停止位。 6. lin 主发送同步断开符的能以及 lin 从检测断开符的能。 7. 单独的发送器和接收器使能位。 8. 检测标志。 9. 校验控制。 10. 四个错误检测标志。 11. 10 个带标志的中断源。 12. 多处器通信-如果地址匹配,则进入静默模式。 13. 从休眠模式中唤醒。 2.3.3 数据发送与接收过程 在接收时,接收到的数据被存放在一个内部的接收缓冲器中;在发送时, 在被发送之前,数据将首先被存放在一个内部的发送缓冲器中。 对 spi_dr 寄存器的读操作,将返回接收缓冲器的内容写入 spi_dr 寄存器。 第二章 arm 系统的硬件平台 6 处理数据的发送与接收,当数据从发送缓冲器传送到移位寄存器时,设置 txe 标志(发送缓冲器空),它表示内部的发送缓冲器可以接收下一个数据;如果在 spi_cr2 寄存器中设置了 txeie 位,则此时会产生一个中断;写入 spi_dr 寄存 器即可清除 txe 位。 注:在写入发送缓冲器之前,软件必须确认 txe 标志为1,否则新的数 据会覆盖已经在发送缓冲器中的数据。 第三章 wifi 技术及模块概述 7 第三章 wifi技术及模块概述 3.1 wifi技术概述 80211 协议是 ieee 802-r 作组定义的第一个被国际认可的无线局域网协议。 跟传统的有线局域网相比,基于 wifi 协议的无线局域网具有可移动性,动态拓 扑结构和易搭建的特点因此用户可以根据需求和环境选择合适的局域网技术 来构造自己的网络。 3.1.1 wifi 网络基本结构 80211协议的规定了wifi的基本网络结构包括物理层、介质访入控 制层(1iac层)及逻辑链路控制层(lljc层)。其三层结构可如图21所示。 802.2llc(logical link control) 802.11 mac 802.11phy fhss 802.11phy dsss 802.11 phy ir/dsss 802.11 phy ofdm 802.11 phy dsss/ofdm 802.11b 11mbit/s 2.4ghz 802.1a 54mbit/s 5ghz 802.11g 54mbit/s 5ghz 3.1.2 wifi 网络的操作模式 ieee 802.11 标准定义了两种基本操作模式:infrastructure 模式和 adhoe 自组网络模式。 (1)infrastructure 模式 infra,也称为基础网,是由 ap 创建,众多 sta 加入所组成的无线网络,这 种类型的网络的特点是 ap 是整个网络的中心,网络中所有的通信都通过 ap 来 第三章 wifi 技术及模块概述 8 转发完成。 图 3-1 infrastructure模式的结构 (2)ad hoc 自组网络模式 adhoc,也称为自组网,是仅由两个及以上 sta 自己组成,网络中不存在 ap,这种类型网络是一种松散的结构,网络中所有的 sta 都可以直接通信。 图 3.4 ad hoc 模式 3.2 wifi模块介绍 wi-fi 技术的公开,厂商进入该领域门槛较低,目前市场上有很多品牌的 wifi 开发模块。为了实现方便,我选择了一个开发文档丰富的 wifi 模块。该 模块由成都比特电子科技设计有限公司生产,型号为 wifi-m03。该模块是一款 专为带有 uart 接口平台设计的网卡模块,符合 802.11b 标准,可采用插针借口 的方式与主机相连。wifi-m03 网卡模块应用于带有 uart 接口的设备环境中, 符合 stm32 接口的要求。目前该产品已经广泛地应用于无线 pos 机、公交卡等 系统中。 第三章 wifi 技术及模块概述 9 wifi-m03 接口特性如下: a. 双排(2 x 4)插针式接口 b. 支持波特率范围:1200115200bps c. 支持硬件 rts/cts 流控 d. 单 3.3v 供电 3.2.1 模块硬件结构 图 3-2 wifi 与串口硬件连接图 模块提供双列直插 8 针引脚,其中外侧一排(58)引脚为必须连接,如上 图所示,而且这些引脚完全兼容单排 4 针接口。内侧一排(14)为可选功能引 脚,连接如上图所示。其各端口功能如下: 第三章 wifi 技术及模块概述 10 3.2.2 模块工作模式 wifi-m03 模块内置无线网络协议、ieee802.11 协议栈以及 tcp/ip 协议栈, 具有两种工作模式,分别是正常启动模式和配置启动模式。 a. 正常启动模式 在正常启动模式下,模块的串口始终工作在透明数据传输状态,因此用户 只需把它看做一条虚拟的串口线,按照使用普通串口的方式发送和接收数据就 可以了。所有通过串口接收到的数据都转发到网络上,同样,从网络上接收到 的数据,模块也都原样从发送到串口上。 模块的 ncts/mode/gpio 引脚进行了内部下拉,当用户将其悬空,模块即可 自动进入正常启动模式。在正常启动模式下,系统根据配置参数中预设的工作 模式(自动/命令模式)运行。该引脚(引脚 2)在模块上电复位阶段用来进行 启动模式选择,时序如下图所示。 图 3-3 正常启动模式 b. 配置模式 在启动配置模式下,系统忽略配置参数中预设的工作模式参数,强制 进入 at+命令模式,此模式通常用于使用配置管理程序进行参数修改及功能测 试。此工作模式下,模块根据用户通过串口下发的指令进行工作,用户可以通 过指令对模块进行完全的控制,包括修改配置参数、控制联网、控制 tcp/ip 连接、数据传输等。这是一高级的使用方式,也是对用户来说最为灵活的使用 方式。用户可以通过指令任意控制无线网络的连接、断开,也可以同时创建多 个不同类型的 tcp/ip 连接,并保持通信。ncts/mode/gpio 引脚(引脚 2)在 模块上电复位阶段用来进行启动模式选择,时序如下图所示。 图 3-4 配置模式 第四章 硬件模块设计 11 第四章 硬件模块设计 4.1 系统硬件结构 系统模块包括两个个部分分别为 stm32 开发平台和 wifi 模块。相互之间 的。联系及架构如下图所: stm32 串口wifi 模块 lcd 显示 无线 ap 天线 天线 sst25vf080 图 4-1 系统模块框图 4.1.1 wifi 模块工作流程 模块的工作流程包括注册和数据的发送请求等,发送数据和接受数据的工 作流程如图所示: 从图中,对于发送数据的流程,模块开启后,首先通过 wifi 模块寻找、 连接网络,当连接到网络时,主动向服务器发送注册请求,注册完后便可以根 据上层的需要进行呼叫亲求了,建立呼叫链接后,移动开发平台就会开始等待 上层的数据,直到接收到数据,由 stm32 将数据封装后由 wifi 模块发送给服 务器。重复等待动作直到通信结束为止。对于接收过程,与发送送过程相似, 只是对于数据的处理,与发送过程正好相反。 第四章 硬件模块设计 12 图 4-1 数据发流程 图 4-2 数据接收流程 4.2 模块电路 4.2.1 电源设计 电源引脚连接图如下: c8 103 c9 103 c10 103 c11 105gnd 3v3 battery cr1220 holder c7 1uf c12 104 nc 73 vdd_1 50 vdd_2 75 vdd_3 100 vdd_4 28 vdd_5 11 vdda 22 vss_1 49 vss_2 74 vss_3 99 vss_4 27 vss_5 10 vssa 19 vbat 6 u1bstm 32f103vct6 第四章 硬件模块设计 13 图 4-3 电源引脚连接图 vdd1/2/3/4/5,vdda 供电电源范围在 2.0-3.6v,vbat (备份操作电压)在 1.8v-3.6v 之间。采用稳压芯片 ams1117,该器件固定输出版本电压输出值有 1.8v,2.85v,3.3v,5.0v 本设计选用 3.3v。vdd 引脚必须连接外部未定电容器 (五个 100nf 的陶瓷电容器和一个钽制电容器 min4.7uf,typ.10uf)。 备份寄存器的电源采用 cr1220 电池单独供电,防止板子掉电时,备份寄存 器中的数据丢失。 4.2.2 复位电路设计 引脚连接如右图: r11 10k 5% c17 105 reset nrst vcc gnd 图 4-4 复位引脚图 复位电路的功能是完成系统的上电复位和系统运行时的按键复位功能。复 位电路采用简单的、常见的 rc 复位电路即可实现复位功能。当复位按键为按 下时,电容将电路断开,此时 nrst 线接的是高电平。不能复位。当按键按下 以后,电容放电,电容两端的电压逐渐降低为零,实现复位功能。 4.2.3 晶振电路设计 需要提供的外部时钟源有 hse 和 lse。hse 采用 8mhz 的外部晶振,有点在 于能产生非常精确的主时钟。lse 是 32.768khz 的低速外部晶体或陶瓷共鸣器。 能为实时时钟提供低速,精确的时钟源。 第四章 硬件模块设计 14 4.2.4 调试接口 j100 1 3 5 7 9 2 4 6 8 10 1112 1314 1516 1718 1920 vcc33 pb4_trst pa15_tdi pa14_tck pa13_tms pb3_tdo +5vgnd nrst 图 4-5 trst:测试复位输入信号,低电平有效。 tdi:jtag 指令和数据寄存器器的串行数据输入 tms:tap 控制气的模式输入信号 tdo:jtag 指令和数据寄存器器的串行数据输出 tck:jtak 调试时钟 4.3 lcd模块 4.3.1 原理图 12 34 56 78 910 1112 1314 1516 1718 1920 2122 2324 2526 2728 2930 3132 3334 3536 3738 3940 j102 lcd pd9_db16pd10_db17 pd7_lcd_cspd11_lcd_rs pd5_lcd_wr pd6_busy pd12_nand_ale pe0_tc_spe1 pe2pe3 pd4_lcd_rd pd13_lcd_int0 pe10_db07 pe12_db11 pe14_db13 pd8_db15 pe8_db05 vcc33 gnd pd3_lcd_bl pd14 _db00pd15_db01 pd0_db02 pe7_ db04 pe9_db06 pe11_db08 pe13_db10 pe15_db14 pd15 db03 pd2_lcd_rst tft+口口口口口 pb14_spi2_m iso pb15_spi2_m osi pb13_spi2_sck 图 4-6 图 4-6 中液晶显示模块引脚功能描述: db00-db17 数据线 cs 片选信号线 rs:命令/数据标志 rst 硬复位 tftlcd 第四章 硬件模块设计 15 rd:从 tftlcd 读数据 wr:向 tftlcd 写入数据 4.4 存储模块 4.4.1 原理图 flash 芯片采用的是 sst25vf080,其引脚连接如图 u301 pb8_spi2_cs pb13_spi2_sck pb14_spi2_miso pb15_spi2_mosi vcc33_mem gnd vcc33_mem/ce so wp gndsi sck /hold vcc 图 4-7 ce:芯片使能端si:串行数据输入 so:串行数据输出 wp:写保护 hold:保持 vdd:电源 2.7-3.6v vss:接地端 4.4.2 功能描述 存储从串口读取的数据,用作 tftlcd 的缓冲区。flash 容量 1mbyte, 因字库装载在 flash 中占用前 756kbyte。可以读写的区域只有 244kbyte。可 以将 0x40000h-0xfffffh 作为报文存储空间。 第五章 软件设计 16 第五章 软件设计 5.1 系统软件设计框图 应用程序:wifi 热点接入管理界面 wifi 模块 tcp/ip 协议 uc/os实时操作系统 uc/gui 用户图形界面 串口驱动lcd 液晶驱动 网络数据传输设计 图 5-1 系统软件设计框图 5.2 驱动设计 5.2.1 串口驱动设计 wifi 与 stm32 之间用 usart1 相连,因而初始化 stm32 时,需要开放 usart1,可在函数 uart_configuration(void);设置波特率,中断类型等,在 本项目中设置波特率为 115200bps,接收和发送都产生中断以保证其既能发送 数据又能接受数据。wifi 开发模块为开发者提供了一个数据结构 netparabuffer 来统一每个参数的格式,其具体结构如下: typedef struct netparabuffer unsigned char m_id; /参数名称 unsigned char clength; /参数长度 tcp/ip 协议 串口驱动lcd 液晶驱动 第五章 软件设计 17 unsigned char cinfo64; /具体的参数内容 在配置到 wifi 的相关参数后,调用 wifi_para_set_auto()使 wifi 处在自 动模式并联网,这就可以通过 ap 连上网了。之后的数据直接调用 senddatatowifi 就可以通过 usart1 将数据发送到 wifi 模块,根据之前设置的 服务器 ip 地址通过 ap 发送出去。具体程序流程图如下: 开始 串口初始化完成 uart_configuration() 设置串口波特率、中断类 型,初始化串口 void wifisetnetpara() senddatatowifi() 发送命令给 wifi 模 块,设置 wifi 图 5-2 串口初始化流程图 5.2.2 tft-lcd 底层驱动设计 5.2.2.1 与读取/写入相关的寄存器 由 ili9325 数据手册可知,索引寄存器(index register)存储指令或显 示数据即将被写入的寄存器的地址,寄存器选择信号(rs)、读/写信号和数 据总线用来读/写 ili9325 内部的指令或数据。因此,要访问 9325 内部的寄存 器或显示 ram,首先要通过 ir 索引寄存器设置目标寄存器的地址。 除了 ir 寄存器,与读写访问有关的寄存器如图 5-2 所示: 第五章 软件设计 18 图 5-3 与读写有关的寄存器 表 5-1 说明了每个寄存器的具体用途: 表 5-1 与读写有关的寄存器说明 r20h,r21h(gram 水平/垂直 地址设置寄存器) 此寄存器用来设置地址计数器 (ac)的初始值。随着数据被写 入内部 gram,地址计数器按照 之前所述的 am、i/d 位的设置自 动更新。当从内部 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 所示: 第五章 软件设计 19 图 5-4 ili9325 读内部显示数据流程图 首先,根据在初始化时设置的 gram 地址刷新方式(由 i/d、am 位的组合值 确定)以及窗口地址区域的起止坐标(由 hsa、hea 和 vsa、vea 联合确定)设 置填入地址计数器 ac 的初始地址值 m。 由于第一次读出的显示数据是 rdr 读数据锁存器中的无效数据,因此需要 进行第二次数据读取,以得到真正有效的显示数据。 由于在读取 gram 显示数据时地址计数器 ac 的值不会自动更新,因此在希 望读取另一地址处的显示数据时需要重新设置 ac 的初值并重复以上过程。 5.2.3 具体程序实现 由前面的时序图得之,读写 ili9325 内部的寄存器或显示 ram 的过程是先 在索引寄存器写入地址,然后写入命令数据或颜色值,读写内部寄存器或 gram 的具体流程如图 5-5 所示: 第五章 软件设计 20 图 5-5 5.3 网络数据传输报文设计 所选 wifi 模块在自动模式下始终工作在透明数据传输状态,因此用户只 需把它看做一条虚拟的串口线。为了能够保证数据能够在网络上顺利传输以及 平台的兼容性,需将发送至串口的报文制定统一的数据结。一个好的数据结构 是模块稳定的保证,是系统提供模块类型的体现,除了可以保证模块的可扩性, 还可以为系统的扩展提供保障。 本项目中,wifi 模块所在的系统架构为 c/s 架构,这就要求数据报文除了 需要模块能够正确的处理,同时要求服务器能够解析。对于服务器端,主要由 项目中其他人解决,这里根据数据数据格式的用途及服务器和客户端的特点, 可以将数据包分为两类,一类与信令相关的结构,一类与数据相关的结构。 对于与信令相关的数据包主要包括注册请求报文,注册应答报文,呼叫请求报 文,呼叫通报报文,被叫端呼叫应答报文,服务器呼叫应答报文,报文格式如 第五章 软件设计 21 图 5-6 至图 5-11。 图5-6 注册请求报文 图 5-7 注册应答报文 图 5-8 呼叫请求报文 图 5-9 呼叫通报报文 图 5-10 被叫端呼叫应答报文 图 5-11 服务器呼叫应答报文 对上图中各数据报文中字段含义如下: 总长度:8bit,表示报文的总长度。 类型:8bit,表示报文的类型,在这个字节的不同值代表不同的数据报文 第五章 软件设计 22 类型,其中 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-12 括数据报文 第五章 软件设计 23 图 5-14 结束报文 从图中可以看出数据类报文结构和信令类相比,有了包号,数据长度和数 据字段,其中数据长度和数据主要表示传输的数据,而对于包号,主要作用是 中断可以根据包号重组收到的数据包,保持数据包的完整性。 5.4 uc/gui的移植 5.4.1 uc/gui 的目录结构 uc/gui 推荐的目录结构如图 4-7 所示,在工程文件夹中保持 uc/gui 程序 文件(包括头文件)的独立性和完整性可以使 uc/gui 的升级更加简单(仅需 简单的替换 gui 子文件夹)。 图 5-15 uc/gui 目录结构 各个子文件夹的内容说明如下表所示: 表 5-2 uc/gui 文件结构及说明 目录内容 config配置文件 guiantialias抗锯齿支持* guiconvertmono用于灰度级显示的颜色转换程序* guiconvertcolor用于彩色显示的颜色转换程序* guicoreuc/gui 核心文件 第五章 软件设计 24 guifont字体文件 guilcddriverlcd 驱动程序 guimemdev存储设备支持* guiwidget控件库* guiwm窗口管理器* 注释:标注“*”的为可选模块 5.4.2 在目标系统上应用 uc/gui 的配置过程 uc/gui 的移植过程如图 5-15 所示: 图 5-16 uc/gui 移植过程 1.底层驱动程序,使其可以正常显示。 2.在工程项目中加入 uc/gui 程序包。 3.修改有关的配置头文件(在将 uc/gui 程序包加入到工程项目文件中后, 第五章 软件设计 25 首先要做的就是要对 uc/gui 进行相关的配置,以使其与自己所采用的具体硬 件环境相适应。 具体步骤如下: 编写 tft-lclcdconf.h 、guiconf.h 、guitouchconf.h 5.4.3 lcdconf.h 的配置(低层配置) lcdconf.h 中包含与具体型号的液晶显示器硬件相关的宏定义,主要有两大 类: 1.lcd 宏:定义显示分辨率以及其他可选特性(例如镜像等); 2.lcd 控制器宏:定义如何访问你所使用的 lcd 控制器。 本文程序中 lcdconf.h 文件的内容如下: #ifndef lcdconf_h #define lcdconf_h #define lcd_xsize (320) /定义水平分辨率 #define lcd_ysize (240) /定义垂直分辨率 #define lcd_controller (9325) /定义 lcd 控制器的型号 #define lcd_bitsperpixel (16) /定义每个像素的颜色位数 #define lcd_fixedpalette (565) /定义调色板格式,此处采用 565 /颜色格式 #define lcd_swap_rb (1) /交换红蓝基色 #define lcd_init_controller() ili9325_initializtion(); /lcd 控 制器 /初始化函数 #endif 5.4.4 guiconf.h 的配置(高层配置) guiconf.h 头文件中的内容主要用来配置 gui 库的一些可选功能,例如是 否使用窗口管理器(wm)、控件库(widget library)功能以及是否启用多任 务环境支持等选项。 本文程序中 guiconf.h 文件的具体内容如下所示: #ifndef guiconf_h #define guiconf_h #define gui_os (1) /启用多任务环境支持 #define gui_support_touch (0) /不启用触摸屏 第五章 软件设计 26 #define gui_support_unicode (1) /支持 ascii/unicode 字符串 #define gui_default_font u32 gui_x_gettaskid(void) return (u32)(ostcbcur- ostcbprio); void gui_x_initos(void) dispsem = ossemcreate(1); 第五章 软件设计 27 void gui_x_unlock(void) ossempost(dispsem); void gui_x_lock(void) int8u err; ossempend(dispsem, 0, 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 的编写 在将 uc/gui 用于具体的液晶显示器时需要提供 tft-lcd 的底层驱动函数。 由于 uc/gui 本身提供了很多液晶控制器的驱动,很多时候只要在 lcdconf.h 文件中配置好宏 lcd_controller 即可选择相应的驱动程序,但是由于 uc/gui 被没有提供 ili9325 控制器的驱动,所以需要我们自己编写液晶驱动的底层 api,已完成 uc/gui 的移植工作。 5.5 wifi热点接入管理界面开发 本文程序基于 stm32f103vct6 微控制器芯片开发,使用 uc/os-ii 嵌入式实 时操作系统进行任务管理、调度和同步使用 uc/gui 的 api 绘图函数开进行图 形界面开发,实现 wifi 热点接入管理界面应用程序的开发。整个程序执行的 流程图如图 5-16 所示: 第五章 软件设计 28 图 5-17 wifi 热点接入界面流程图 整个应用程序的执行过程说明如下: 首先,分别调用函数 osinit( )、bsp_init( )、gui_init( )初始化整个 系统的工作环境,依次为 uc/os-ii 操作系统初始化、硬件模块初始化(包括 系统时钟、i/o 端口工作模式以及中断系统初始化等)和 uc/gui 图形界面系统 初始化。 其次,为了消除多窗口显示时的闪烁现象,为所有窗口起用了存储设备支 第五章 软件设计 29 持,即通过调用函数 wm_setcreateflags(wm_cf_memdev)来实现;接下来又为 背景窗口设置了回调函数:wm_setcallback(wm_hbkwin, _cbbackgroundwin)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论