基于STM32+ucGUI的北斗导航定位系统设计
2014-03-21罗卫兵胡健生
罗卫兵,胡健生
(武警工程大学 信息工程系,陕西 西安710086)
1 引 言
随着导航模块的小型化,在手持设备上实现导航定位的应用越来广泛。目前,对于带有界面显示功能的手持定位设备,主要都是使用GPS系统,并且基于“嵌入式处理器+嵌入式操作系统+GUI”实现的[1-3]。然而,随着我国自行研制的“北斗卫星导航定位系统”不断完善,目前已经逐步得到应用,将来应用前景必将更加广阔[4-6]。同时对于某些只需实现简单显示功能,对人机界面要求不高的应用场合,基于上述复杂嵌入式构架进行设计,不仅是对资源的浪费,也提高了开发难度,同时对于成熟产品的扩展也不太适用。
本文从某款手持设备用户需求出发,只需要提供简单的定位信息,而不需要复杂的导航界面,同时兼顾设备已用的其他功能模块,提出一种基于STM32+ucGUI构架的手持北斗显示终端系统,用于实现北斗(BD2)信号的接收和解析,并实现简单导航界面显示。本文重点研究系统的总体结构、北斗定位数据接收解析和电子罗盘界面设计等内容。
2 系统总体结构与设计思路
系统在硬件上以STM32嵌入式微处理器为核心,扩展了LCD、GPS模块、存储器、温湿度传感器和气压传感器,实现了对经纬度、高度、速度和温湿度信息的实时采集,根据用户需求,可对特定的应用领域进行精确化管理和科学预测。如图1所示。
图1 系统组成结构Fig.1 Structure of system
系统处理器采用STM32F103BE,使用高性能的ARM Cor-texTM-M3 32 位的RISC 内核,工作最高频率可达72 MHz,内置高速存储器(512K 的Flash 和64K 的SRAM),不 需 要 使 用专门的外部Flash 或ROM 固化代码,具有丰富IO 端口,以及ADC、I2C、SPI、TIMER、UART 等模块[7],通过科学的复用可以满足应用需要。
系统存储器包括串行Flash 和大容量TF卡,均通过SPI总线与CPU 进行数据传输。串行Flash使用W25X16,用于存储系统的中英文字库、触摸屏校验参数等。TF 卡用于存储系统图标、应用图片和文本等大容量数据;LCD 模块是由一块真彩液晶屏(240×320)和LCD 控制器集成,LCD 控制器位ILI9320,通过16位的8080总线与CPU 进行数据交换,同时提供4线电阻采样端与触摸屏的AD 芯片ADS7843 相连;CPU 使用4 个IO 端 口,模 拟SPI 总 线 与 触 摸 屏ADS7843进行通信;CPU 通过IIC 总线,与温湿度传感器STH1X 进行通信。
在软件上,系统采用“驱动层+GUI”的形式,即在底层硬件驱动的基础上,直接移植ucGUI图形用户接口。系统对实时性要求不高,且任务量相对较少,完全可以使用CPU 中的定时器和中断实现简单的任务调动;同时为了保证GPS信息的可视化显示,应该使用图形用户接口(GUI),而ucGUI又是最合适本系统的,可为任何使用LCD图形显示的应用,提供高效的独立于处理器及LCD 控制器的图形用户接口,可独立于操作系统,直接使用,支持丰富的图形库、字体和窗口管理器[8]。
本文重点阐述BDII定位信息的接收、解析和显示等内容的设计。
3 北斗定位模块控制与数据解析
3.1 UM220模块及其初始化
UM220是北斗联星公司针对车辆监控、气象探测和电信电力授时等应用推出BD2/GPS双系统模块。UM220是市场上尺寸最小的BD2/GPS模块,集成度高,功耗低,非常适合北斗系统大规模应用的需求。这里只研究其中北斗定位信息的提取和显示。产品具有尺寸小、重量轻、功耗低等优点,同时支持BD2 和GPS 的但系统独立定位和多系统联合定位,支持UART,SPI,1PPS 和I2C等多种接口。
UM220模块正常工作前,要通过指令对其进行初始化。主要配置如下信息;
(1)设置串口指令,对模块输出数据的端口和协议 进 行 配 置,指 令 如 下$CFGPRT,1,0,115200,3,2。这里使用串口1,数据长度为8bit,波特率为115 200,模块输入的数据格式为和芯星通软件接口协议,即对模块进行配置,输出的数据格式为NMEA 协议。
(2)设置卫星系统配置,接收机收到该指令后会自动复位,设置的开启卫星频点在复位后生效.$CFGSYS,h10。这里为了验证北斗系统的定位效果,仅启动北斗定位系统。
(3)设置输出NMEA 配置,$CFGNMEA,h30.输出的NMEA 版本为在version3基础上扩展的BD2相关语句。
(4)设置消息输出频度。通过该指令可设置模块NMEA 消息类中各条指令的输出频率,也可屏蔽不需要指令。$CFGMSG,0,1,0,$CFGMSG,0,2,0,$CFGMSG,0,3,0,$CFGMSG,0,5,0,关闭GLL,GSA,GSV,VTG 等4条指令,指令输出频率保留默认设置,即1Hz。
3.2 BD2数据的接收
UM220每条NMEA 指令都是一串以“$”开始,以“*”结束的字符串,不同指令的数据长度也不同,正确的存储BDGGA 和BDRMC 指令是正确解析所需的经纬度、高度、速度和角度信息的前提。在硬件电路上,UM220模块与STM32的UART2相连,每隔2s两条指令发送一次,因此将使用STM32的UART2中断函数来处理接收的数据更为方便。需要设置的变量如表1所示。
表1 BD2数据获取函数所需变量Tab.1 Variables of getting BD2data function
BD 数据获取函数分成3个部分,即BD 指令类型的识别,按照类型存储两种指令数据和BD指令接收结束。
(1)BD 指令类型识别,在BD_RX_EN==1时,如果收到指令开始符号“$”,则表明一条完整的指令开始,设置BD_BUF_FLAG 为1,GPS_RX_STA 为0,BD_RX_LEN 为0,即允许更新BD 数据缓存,开始接收指令报头。
(2)按照类型存储两种指令,紧随“$”开始符后的是指令报头字符串,即“BDGGA”或“BDRMC”,若BD_RX_STA 为0,即正在接收报头字符串时,则将接收到的指令字符串存储在HEADER_BUF[]中,由于设置模块仅输出“BDGGA”和“BDRMC”两种指令,因此根据第3位判断当前输出指令的类型,若HEADER_BUF
[2]为‘G’,则表明当前为BDGGA 指令,设置BD_RX_STA 为1,若HEADER_BUF[2]为‘R’,则表明当前为BDRMC指令,设置BD_RX_STA 为2。在此过程中,执行BD_RX_LEN++,当BD_RX_LEN==5时,则根据BD_RX_STA 的值,将指令的其余字符串存储到相应的缓存中,即BD_GGA_BUF[]或BD_RMC_BUF[]。
(3)BD 指令接收结束,当串口接收到‘*’后,则表明一条指令的结束,另BD_CMD_NUM加1,当BD_CMD_NUM 为2时,表明分别接收到1 条BDGGA 和1 条BDRMC 指 令,此 时 令BD_RX_EN 为0,停止接收模块发送的指令,保护指令缓存,等待对指令的解析,并将计数器BD_RX_LEN 清零。
这里需要重点强调是,BD_RX_EN 和BD_CMD_NUM 两个变量实际上完成了BD 数据接收程序和BD 数据解析程序之间的信号量通信功能,保证了接收缓存在同一时刻只能被一个任务占用,避免了缓存读写冲突的发生。
3.3 BD 数据的解析
为了便于应用程序调用各类信息参数,系统必须对正确接收到的两条指令进行解析,即提取出用户需要的时间、经(纬)度、高度、速度和方向等信息,故需要定义如下变量。每条NMEA 中包含的不同信息之间以“,”相间隔,这里以对BDGGA 为 例。 $BD2GGA, 063952.000,4002.2299,N,11618.0968,E,1,4,2.788,37.254,M,0,M,*71是一条典型的GGA 指令,各 段 依 次 含 义 为 时 间(063952.000)、纬 度(4002.2299)、南 纬 或 北 纬 指 示(N)、经 度(11618.0968)、东经或西经指示(E)、定位状态标识(1)、参与定位的卫星数(4)、水平精度因子(2.788 3)、椭球高(37.254)、椭球高单位(M)、海平面分离度(0)、海平面分离度单位(M)、差分校正时延(空)、参考ID(空)、结束符合和校验和(71)。
当BD_CMD_NUM 为2,停止对BD2指令的接收,依次对进行解析。通过变量seg的值确定各信息段,再根据各段信息的长度即可提取出所需的信息,函数流程如图2所示。
表2 BD2数据解析函数所需变量Tab.2 Variables of resolution function
图2 BD2数据各段信息提取函数流程图Fig.2 Flow of the information extraction of BD2data
4 显示界面设计
4.1 ucGUI的移植
ucGUI作为一种精简、高效的嵌入式图形支持系统,在使用过程中主要完成两个工作,一是要将其移植到自己的硬件平台上,二是要根据需求编写图形应用程序。
由于ucGUI可以支持任意型号的LCD 控制器和CPU,即可独立运行也可与ucOS操作系统配合使用,因此关于ucGUI移植相关的参考文献很多[8-10],但是在具体移植步骤也有所不同,主要体现在对配置文件的修改和底层LCD 驱动控制程序的编写。
本系统在移植ucGUI时,结合LCD 控制器的型号,在编写驱动函数和修改配置文件时主要参考了文献[10],但是由于是独立运行ucGUI,没有系统系统支持,因此需要在移植进行修改。具体的修改内容和移植过程,前期已撰写并发表于网上。
4.2 自动设备对象(Auto device object)
根据要求,系统的导航定位信息应以电子罗盘的形式直观形象地提供给用户。电子罗盘是在2-D 图形的基础上,对几何图形进行静态(表盘)或动态(指针旋转)的显示。由于定位信息的实时更新,界面中的部分几何图形也需要实时刷新,而ucGUI中的自动设备对象(Auto device object)就是针对需要实时更新或改变显示内容的需求场合,尤其是像指针这样屏幕中的小部分实时更新的场合,它基于内存设备(memory devices),可以自动区分由固定对象组成的静止区域和由移动变化对象组成的动态更新区域,不需要更新整个界面,因此节约CPU 计算时间,有效地避免屏幕抖动[8]。使用对象的主要过程及关键代码如下:
(1)定义绘制路径信息的结构体变量。
5 图片显示及界面效果
图3 系统最终效果图Fig.3 Final effect of sysetm
系统对BMP或JPG 格式的图片显示,主要针对以下两种应用:一是复杂图形界面的显示,如主界面的背景及按键LOGO;二是简易电子地图的预览及缩放功能,对大范围高分辨率的电子地图,根据需要,按照地图上的像素位置与实际地理坐标位置的对应关系,对图片上的指定区域进行剪裁显示,以及缩小和放大显示。
上述功能的实现,需要调用ucGUI的位图显示功能,这里需要使用如下API函数,由于篇幅限制,具体调用方法这里不再叙述。
系统的主界界面、电子罗盘界面以及电子地图界面最终效果如图3所示。
6 结 论
本文研究的系统,硬件上以STM32 嵌入式处理器和北斗II模块UM220为核心,软件设计上以ucGUI为核心实现了电子罗盘界面,实现了精确定位及信息的可视化显示。分别在静止,步行(1~2m/s)和车载(60~100m/s)等三种环境下对系统性能进行测试,结果表明系统冷启动时的定位时间小于2 min,热启动时的定位时间小于1min,经度纬度不受运动速度影响,误差小于3m,而由于GPS定位原理的局限性,实际运动速度越快,定位结果越精确。同时,与其他同类定位终端相比,该系统的最大优点是成本低,功耗小,可单独应用于定位领域,也可以此系统为平台,进行二次开发和扩展,应用于更多领域。
[1] 吴红兰,黄圣国.嵌入式GPS数据采集与分析系统设计[J].实验室研究与探索,2011,30(1):54-57.WU H L,Huang S G.Design of embedded GPS data receiving and analysis system[J].Research and Exploration in Laborary,2011,30(1):54-57.(in Chinese)
[2] 魏强,王晓浩,周兆英,等.GPS的微型系统及其制导[J].光学精密工程,2009,17(7):1660-1664.Wei Q,Wang X H,Zhou Z Y,et al.Guidance and implement of micro system based on GPS[J].Optics and Precision Engineering,2009,17(7):1660-1664(in Chinese)
[3] 张洋溢,王忠.基于ARM 的GPS/GPRS多功能手持终端的设计与实现[J].计算机测量与控制,2011,19(12):3050-3053.Zhang Y Y,Wang Z.Design and implementation of an embedded GPS/GPRS multi-function handheld terminal based on Linxu[J].Computer Measurement &Control,2011,19(12):3050-3053.(in Chinese)
[4] 沈鹏,徐景硕,张建忠.北斗导航系统及其在无人机上的应用[J].航空电子技术,2007,38(2):5-9.Shen P,Xu J S,Zhang J Z.BeiDou navigation positioning system and its application to unmanned aerial vehicle[J].Electronics for Aeronautics and Astronautics,2007,38(2):5-9.(in Chinese)
[5] 钱成越,薛原.基于北斗导航系统的移动导航定位终端设计[J].现代计算机,2010,6:165-169.Qian C Y,Xue Y.Design of a mobile navigation terminal based on Beidou(COMPASS)navigation satellite systems[J].Modern Computer,2010,6:165-169.(in Chinese)
[6] 张晓安,逯亮清,杨彪.应用延长基线法实现北斗双星的快速定向[J].光学精密工程,2010,18(11):2461-2466.Zhang X A,Lu L Q,Yang B.Fast orientation of Beidou bi-satellite by extending baseline[J].Optics and Precision Engineering,2010,18(11):2461-2466.(in Chinese)
[7] STMicroelectronic.STM32Reference Manual[EB/OL].http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164485.
[8] uc-GUI Manual v4.www.micrium.com[EB/OL].http://micrium.com/rtos/ucgui/overview.
[9] 北京翔宇星通.UM220接口协议,2011.[EB/OL].http://download.csdn.net/download/snowdrinker/5508139.BeiJing xiangyuxingtong.UM220interface protocol,2011[EB/OL].http://download.csdn.net/download/snowdrinker/5508139.(in Chinese)
[10] Code_HXH.基于STM32的ucGUI移植和优化[EB/OL].http://www.haogongju.net/art/73074.2011/7/27.Code_HXH.The transplant and optimization of ucGUI based on STM32[EB/OL].http://www.haogongju.net/art/73074.2011/7/27.(in Chinese)
[11] 张洋,刘军,严汉宇.原子教你玩STM32[M].北京:北京航空航天大学出版社,2013.Zhang Y,Liu J,Yan H Y.YUAN Zi teach you how to play STM32[M].Beijing:BEIHANG University Press,2013.(in Chinese)