搜档网
当前位置:搜档网 › 基于STM32开发板的GPS定位模块设计

基于STM32开发板的GPS定位模块设计

基于STM32开发板的GPS定位模块设计
基于STM32开发板的GPS定位模块设计

生产实习设计报告

设计题目:基于GPS模块的定位装置

生产组长:王海昕

设计组长:孙振邦

小组成员:王洪振、唐政亮、帖小龙、宋劲草、宋晓林苏刚、孙晓龙、史俊、赵若曦

实习日期:2012年8月27日-9月15日

一、概述

本设计基于STM32F107开发板,结合iTrax03-02 型GPS 接收机,实现GPS模块与STM32的通信;通过GPS模块实现定位,STM32对GPS 模块传入的数据进行读取和处理,将得到定位信息在OLED显示。

该定位装置还有如下附加功能:SD卡数据存储功能,定位状态显示(卫星颗数等);可通过RS232串口传输坐标和时间至PC机,并通过上位机软件实现路径计算和网络地图定位。

二、总体设计

1.总体系统结构

2.功能实现

⑴.经纬度测定,海拔高度测定

⑵.速度计算与方向指示

⑶.SD卡定时存储信息

⑷.上位机制作及路径计算

3.人员分工

孙振邦、王海昕完成源程序的编写,以及代码的修改、编译、下载、调试等工作;

宋劲草、宋晓林、苏刚负责GPS数据编码转换编程;

王洪振、帖小龙、唐政亮负责串口数据传输、SD卡定时存储设置;史俊、赵若曦、孙晓龙负责上位机界面设计和各项功能的验证。三、关键模块设计

⑴.GPS模块

iTrax03-02 型GPS 接收机是根据芬兰FASTRAX公司的GPS模块进行了电平转换、通信接口等电路设计后生产的一款GPS(OEM)接收机产品。该产品通过底板上9pin排线与计算机串口直接通信,定位后即可输出载体的经纬度信息、时间信息、速度信息等。

(2)GPS定位数据格式解析

数据形式:

$GPGGA,hhmmss.dd,xxmm.dddd,,yyymm.dddd,,v,ss,d.d,h.h,M,g.g, M,a.a,xxxx*hh

⑵.OLED显示模块

OLED使用的控制器为SSD1305,可通过写入不同的命令字来设置对比度、显示开关、电荷泵、页地址等。

OLED被配置为使用I2C的方式。I2C的地址二进制位为0111100X,16进制为0x78(写地址),0x79(读地址)。OLED的Reset平时应该拉高,在初始化的时候,应该有一个从低电平到高电平的跳变。

使用的MCU端口为

PB6 CLK I2C

PB7 SDA I2C

PE6 RESET (低有效)

(3)距离计算功能

公式、原理什么的

(4).串行通信模块

RS232的电平转换芯片为MAX232CE。外部接口为DB9。有两个LED指示灯,TXD用来显示接受到数据,RXD用来显示正在发送数据。对外接口为DB9接口,定义为:2RXD,3TXD,5GND。因此,基板可以通过串口线直接连接到PC机,和PC机进行通信。

使用的MCU端口为:

PD5 UART2_TX(Remap)

PD6 UART2_RX(remap)

四、测试结果

1.开机上电后在数据有效的情况下进入定位信息显示模式;

2.进入定位信息显示模式后,OLED显示出当前位置经度、纬度、海拔高度、移动速度、移动方向、卫星显示颗数

3.设定中断时间后,数据会自动存储至SD卡;

4.通过RS232串口与PC通讯后可以通过上位机软件打开该位置的谷歌地图显示,并且计算路径长度。

定位测试数据

保存数据如下:

$GPGSV,3,1,10,01,35,047,32,04,30,244,24,08,12,207,27,09,06,318,12*71 $GPGSV,3,2,10,11,20,063,36,17,54,320,39,20,54,099,23,27,10,309,26*7F $GPGSV,3,3,10,28,78,225,29,32,34,062,26*75

$GPRMC,071738.50,A,3609.4075,N,12029.3426,E,0.00,302.3,090912,5.8,W,A *15

$GPGGA,071738.50,3609.4075,N,12029.3426,E,1,05,2.0,115.0,M,5.5,M,,*50 $PFST,FOM,6*63

$GPGSA,A,3,01,08,11,17,28,,,,,,,,2.9,2.0,2.1*3D

$GPGSV,3,1,10,01,35,047,32,04,30,244,24,08,12,207,27,09,06,318,12*71 $GPGSV,3,2,10,11,20,063,36,17,54,320,39,20,54,099,23,27,10,309,26*7F $GPGSV,3,3,10,28,78,225,29,32,34,062,26*75

$GPRMC,071739.50,A,3609.4075,N,12029.3428,E,0.00,302.3,090912,5.8,W,A *1A

$GPGGA,071739.50,3609.4075,N,12029.3428,E,1,07,2.0,115.0,M,5.5,M,,*5D $PFST,FOM,24*53

$GPGSA,A,3,01,04,08,11,17,27,28,,,,,,2.9,2.0,2.1*3C

$GPGSV,3,1,10,01,35,047,31,04,30,244,24,08,12,207,27,09,06,318,12*72 $GPGSV,3,2,10,11,20,063,36,17,54,320,38,20,54,099,23,27,10,309,25*7D $GPGSV,3,3,10,28,78,225,27,32,34,062,26*7B

$GPRMC,071740.50,A,3609.4074,N,12029.3429,E,0.00,302.3,090912,5.8,W,A *14

$GPGGA,071740.50,3609.4074,N,12029.3429,E,1,07,1.8,115.0,M,5.5,M,,*58 $PFST,FOM,20*57

$GPGSA,A,3,01,04,08,11,17,27,28,,,,,,2.7,1.8,2.0*38

$GPGSV,3,1,10,01,35,047,31,04,30,244,24,08,12,207,27,09,06,318,12*72 $GPGSV,3,2,10,11,20,063,36,17,54,320,38,20,54,099,23,27,10,308,25*7C $GPGSV,3,3,10,28,78,225,27,32,34,062,26*7B

$GPRMC,071741.50,A,3609.4074,N,12029.3431,E,0.00,302.3,090912,5.8,W,A *1C

关键程序代码

Main.c:

#include "includes.h"

#include "led.h"

#include

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

void USART1_Init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |

RCC_APB2Periph_USART1, ENABLE);

// 定义UART1 TX (PA.09)脚为复用推挽输出

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //IO口的第九脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //IO口复用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化串口1输出IO口

// 定义 USART1 Rx (PA.10)为悬空输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //IO口的第十脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//IO口悬空输入

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化串口1输入IO口 //串口参数配置

USART_https://www.sodocs.net/doc/fb3260604.html,ART_BaudRate = 4800; //设置波特率为115200

USART_https://www.sodocs.net/doc/fb3260604.html,ART_WordLength = USART_WordLength_8b; //设置数据位为8位

USART_https://www.sodocs.net/doc/fb3260604.html,ART_StopBits = USART_StopBits_1; //设置停止位为1位

USART_https://www.sodocs.net/doc/fb3260604.html,ART_Parity = USART_Parity_No; //无奇偶校验

USART_https://www.sodocs.net/doc/fb3260604.html,ART_HardwareFlowControl = USART_HardwareFlowControl_None; //没有硬件流控

USART_https://www.sodocs.net/doc/fb3260604.html,ART_Mode = USART_Mode_Rx | USART_Mode_Tx; //发送与接收

//完成串口COM1的时钟配置、GPIO配置,根据上述参数初始化并使能

USART_Init(USART1, &USART_InitStructure);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能串口1接收中断

USART_Cmd(USART1, ENABLE);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

相关主题