基于STM32的GPS定位信息显示终端设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于STM32的GPS定位信息显示终端设计
【摘要】基于STM32F103微控制器、GPS模块和TFT显示屏的硬件平台,介绍了一种利用串口DMA(Direct Memory Access,直接内存存取,STM32F103内部外设的一种)的GPS定位信息解析和显示设计方案。
本方案详细介绍了STM32F103串口DMA初始化过程以及GPS定位信息中GPRMC字符帧的解析和存储。
【关键词】GPS;STM32;DMA;USART;GPRMC
STM32-based GPS Positioning Information Display Terminal
CAO Wen-tao
(Mechanical & Electrical Engineering College of Jiaxing University,Jiaxing Zhejiang 314033)
【Abstract】Based on the STM32F103 MCU,GPS module and TFT display hardware platform,a USART DMA(Direct Memory Access)based for positioning information analysis and display design was introduced. The design details STM32F103 USART DMA initialization process and GPS positioning information GPRMC character frame analysis and storage.
【Key words】GPS;STM32;DMA;USART;GPRMC
0 前言
现今,我们对移动定位的需求越来越重视。
GPS作为经典的定位手段已广泛应用于智能手机、交通导航、军事武器、智慧物流、安防监控等领域。
本文介绍GPS原始定位信息的解析和显示,作为高层应用的基础。
1 硬件平台简介
1.1 微控制器
微控制器选用STM32F103VET6。
STM32F103xC、STM32F103xD和STM32F103xE增强型产品系列集成了工作频率为72MHz的高性能ARM?誖CortexTM-M3 32位RISC内核、高速嵌入式存储器(Flash存储器和SRAM的容量分别高达512K字节和64K字节),和大量连至2条APB总线的增强型I/O与外设。
所有产品均带有3个12位ADC、4个16位通用定时器和2个PWM定时器,以及标准与高级通信接口:2个I2C、3个SPI、2个I2S、1个SDIO、5个USART、1个USB和1个CAN。
[1]STM32F103VET6含有2路DMA:12通道DMA控制器支持外设:timer,ADC,DAC,SDIO,I2S,SPI,I2C and USART。
1.2 GPS模块
GPS模块选用以串口为通讯接口的通用型模块,波特率为9600,数据位为8位,无检验位,1个停止位,数据是以ASCLL码形式传输,完整帧传输间隔时间为1秒。
1.3 TFT LCD屏
TFT LCD屏选用3.2英寸(320*240分辨率)的彩色电阻触摸屏(便于功能扩展)。
图1 终端硬件模块组成框图
2 程序设计
本程序基于KEIL MDK4.7 的IDE集成开发环境,调试器使用ULINK2,固件库使用ST的官方固件库,版本为V3.5.0。
程序整体设计思路如图 2 所示,DMA控制器从GPS模块的串口读入数据到内存缓存区,由于DMA设置成循环工作方式,故内存缓存区的数据也会不断更新。
为此,先把数据从内存缓存区读到一个数组中,然后解析数组中的数据,保证了数据解析过程中数据的稳定性。
数据通过解析函数GPS_Data_Analysis解析到结构体,最后在LCD上输出显示。
图2 程序整体设计思路
2.1 main函数概览
int main(void)
{
TP_Init();//触摸控制器初始化
delay_init();//延时计数器初始化
LCD_Initializtion();//显示屏初始化
TouchPanel_Calibrate();//触摸屏校正
Rcc_Configuration();//开启功能模块时钟
usart_Configuration();//串口初始化
DMA_Configuration();//DMA初始化
delay_ms(5000);//延时
Static_GUI();//静态控件显示
while(1)
{
strcpy((char *)GPS_Data,(char *)GPS_String_Buffer);//从DMA缓存区读取一帧备份
GPS_Data_Analysis(GPS_Data,&GPS_Data_Structure);//解析GPS定位信息中的GPRMC短帧
GPS_Data_Display_Adj(&GPS_Data_Structure);//显示调整
GPS_Data_Structure_GUI();//显示GPRMC短帧中解析出来的数据
}
}
2.2 串口DMA初始化
DMA(直接存储器存取)可以提供外设和存储器之间或者存储器和存储器之间的高速数据传输。
无须CPU任何干预,通过DMA可以实现数据快速移动,这就节省了CPU的资源。
[3]在本方案中应用DMA可以使GPS的数据解析更方便,可以直接从内存中读取,然后处理。
unsigned char R_D_Direction[10];//相对位移方向,000.00
unsigned char Date[10];//日期,日日月月年年
} GPS_Data_T;//声明结构体类型
2.4 GPRMC短帧解析函数
void GPS_Data_Analysis(unsigned char * GPS_Data,GPS_Data_T * GPS_Data_Structure)
{
uint8_t * p1=GPS_Data;//定义指针p1指向内存中GPS_Data数组的首地址
uint8_t * p2=(uint8_t *)GPS_Data_Structure;//定义指针p2指向存储解析数据结构体的首地址
uint32_t i=0;//定义计数变量i
GPS_Data_Structure_DeInit(GPS_Data_Structure);//初始化存储解析数据结构体为’\0’
i=0;
while(!((*p1==‘$’)&&(*(p1+1)==‘G’)&&(*(p1+2)==‘P’)&&(*(p1+3)==‘R’)&&(*(p1+4)==‘M’)&&(*(p1+5)==‘C’)))//检测帧头”GPRMC”
{
i++;
if(i>1023)break;//如在内存GPS_Data数组中找不到帧头”GPRMC”就跳出循环
p1++;
}
p1=p1+7;
p2=GPS_Data_Structure->UTC_Time;
i=0;
while(*p1!=‘,’)//解析国际协调时间,东八区加8,时时分分秒秒.00
{
i++;
if(i>9)break;
*p2=*p1;
p1++;
p2++;
}
……//此处省略了定位状态(A/V)、纬度(0000.0000)、纬度类型(N/S)、经度(00000.0000)、经度类型(W/E)、相对位移速度(000.00)、相对位移方向(000.00)的解析代码。
p1++;//,
p2=GPS_Data_Structure->Date;
i=0;
while(*p1!=‘,’)//解析日期,日日月月年年
{
i++;
if(i>6)break;
*p2=*p1;
p1++;
p2++;
}
}
3 测试结果
LCD显示效果如图3 所示。
图3 LCD显示效果
4 总结
本方案利用高性能微控制器STM32F1103解析GPS定位信息,利用了微控制器的DMA功能,使得GPS定位信息的解析更方便且稳定性大大提高。
显示部分选用电阻触摸屏LCD,方便高层应用扩展,比如用于参数输入等。
【参考文献】
[1]STMicroelectronics.STM32F103VE[EB/OL].2013.
http:///web/cn/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164491.
[2]李秀真.基于GPS的车载终端定位系统的软件设计[J].上海电气技术,2012,5(2):45-49.
[3]李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008:288-296.。