嵌入式综合实验报告.docx

上传人:b****9 文档编号:26198155 上传时间:2023-06-17 格式:DOCX 页数:30 大小:488.91KB
下载 相关 举报
嵌入式综合实验报告.docx_第1页
第1页 / 共30页
嵌入式综合实验报告.docx_第2页
第2页 / 共30页
嵌入式综合实验报告.docx_第3页
第3页 / 共30页
嵌入式综合实验报告.docx_第4页
第4页 / 共30页
嵌入式综合实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

嵌入式综合实验报告.docx

《嵌入式综合实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式综合实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

嵌入式综合实验报告.docx

嵌入式综合实验报告

 

 

《嵌入式系统综合实验》报告

 

学号:

姓名:

 

ShanghaiUniversityofEngineeringScience

SchoolofElectronicandElectricalEngineering

基于STM32的GPS信息显示系统

——嵌入式系统综合实验报告

班级:

0211112姓名:

褚建勤学号:

021111228

班级:

0211112姓名:

于心忆学号:

021111216

班级:

0211112姓名:

乐浩奎学号:

021111232

一、产品设计要求(产品规格描述)

1、嵌入式产品名称

GPS信息显示系统

2、嵌入式产品目的

在学校的生活中,你经常可能需要联系不是同一间宿舍的同学,但是你不能确定他现在在什么地方,这时候全球定位系统(GPS)就可以发挥作用了,但是传统的GPS系统只能提供经纬度信息,不能直观的显示你想要找到人在何处,我们的系统就在传统的GPS的基础上添加了对应位置显示的功能,方便你更方便更快捷的找到你想找的同学

3、嵌入式产品功能

使用GPS输入用户位置信息

GPS将相关经纬度信息反馈给主处理器

主处理器处理相关位置信息并将信息转换为对应位置在LCD上显示出来

在LCD上输出用户状态信息

4、嵌入式产品的输入和输出

输入设备:

GPS系统

输出设备:

LCD

二、产品方案设计(产品设计方案)

stm32

LCD

GPS模块

1、产品架构设计

 

2、产品硬件设计

1)处理器选择

本系统选用基于ARMCortex-M3内核的STM32F103RB嵌入式微控制器作为处理器。

①选用原因

A技术因素

工作频率:

最高72MHz。

内部和外部存储器:

128K字节的闪存程序存储器,用于存放程序及数据;多达20K字节的内置SRAM,CPU能以0等待周期访问(读/写)。

定时器和中断:

包含1个高级控制定时器、3个普通定时器,以及2个看门狗定时器和1个系统嘀嗒定时器;内置嵌套的向量式中断控制器,能够处理多达43个可屏蔽中断通道和16个优先级。

IO接口:

通用输入输出接口(GPIO)。

每个GPIO管脚都可以由软件配置成输出(推拉或开路)、输入(带或不带上拉或下拉)或其它的外设功能口。

多数GPIO管脚都与数字或模拟的外设共用。

所有的GPIO管脚都有大电流通过能力。

在需要的情况下,I/O管脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O寄存器。

在APB2上的I/O脚可达18MHz的翻转速度。

通用同步/异步接受发送器(USART):

USART1接口通信速率可达4.5兆位/秒,其他接口的通信速率可达2.25兆位/秒。

USART接口具有硬件的CTS和RTS信号管理、支持IrDASIRENDEC传输编解码、兼容ISO7816的智能卡并提供LIN主/从功能。

所有USART接口都可以使用DMA操作。

环境要求:

-40°C至+85°C温度范围。

B非技术因素

开发及调试工具:

KeilMDK

参考资料:

STM32F103RBT6官方资料

操作系统:

WindowsXP/Windows7/Windows8

内部AHB时钟频率:

72MHz。

内部APB1时钟频率:

36MHz。

内部APB2时钟频率:

72MHz。

标准工作电压VDD:

2.0V~3.6V。

模拟部分工作电压(未使用ADC):

必须与VDD相同,最大3.6V。

模拟部分工作电压(使用ADC):

必须与VDD相同,2.4V~3.6V。

备份部分工作电压VBAT:

1.8V~3.6V。

电流:

睡眠时与工作时差异较大,还与打开的外设多少有关,范围大约为4mA~50mA。

存储温度:

-65至+150度。

工作温度:

-40至+85度。

3、产品软件设计

1)操作系统选择

无操作系统

2)其他重要器件选择

LCD模块:

功能:

主要特性:

GPS模块:

该GPS模块选用的是型号为ATK-NEO-M6_V12的GPS模块,是ALIENTEK生产的一款高性能GPS模块,模块核心采用UBLOX公司的NEO-M^模组,具有50个通道,追踪灵敏度高达-161dBm,测量输出频率最高可达5HZ。

功能:

实现当前系统位置的定位

主要特性:

1,模块采用UBLOXNEO-M6模组,体积小,性能优异。

2,模组自带陶瓷天线及MAXIM公司20,5dB高增益LNA芯片,搜星能力强。

3,模组可通过串口进行各种参数设置,并可以保存在EEPROM,使用方便。

4,模组自带IPX接口,可以连接各种有源天线,适应能力强。

5模组兼容3.3V/5.5V电平,方便连接各种单片机系统。

6,模组自带可充电后备电源,可以掉电保持星历①数据

注①:

在主电源断电后,后备电池可以维持半小时左右的GPS星历数据的保存,以支持温启动或者热启动,从而实现快速定位。

GPS模块图

3)开发环境选择

本系统选用KEIL作为开发环境。

KeiLuVision4完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件;拥有业行领先的ARMC/C++编译工具链;提供带标准驱动类的USB设备和USB主机栈;为带图形用户接口的嵌入式系统提供了完善的GUI库支持;ULINKpro可实时分析运行中的应用程序,且能记录Cortex-M指令的每一次执行;执行分析工具和性能分析器可使程序得到最优化等特征。

4)开发语言选择

产品软件开发语言:

C语言

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。

它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,具体应用比如单片机以及嵌入式系统开发。

主要优点如下:

简洁紧凑、灵活方便;运算符丰富;数据类型丰富;表达方式灵活实用;允许直接访问物理地址,对硬件进行操作;生成目标代码质量高,程序执行效率高;可移植性好;表达力强。

由于大一刚进校时就接触C语言,所以C语言相对我们而言比较熟悉,在编写中更加容易。

4、项目组成员分工

姓名

现有工作基础

项目中

任务

项目中预计总共

工作时间(小时)

组长

褚建勤

C语言基础

GPS

90

组员

于心忆

初学

串口

90

组员

乐浩奎

初学

LCD

90

5、产品开发计划

时间

任务计划

1-10

制定嵌入式系统综合实验计划。

11-15

查阅相关书籍,到官方网站下载GPS使用说明。

15-30

了解熟悉AT指令、串口通信的知识。

31-45

了解熟悉GPS相关知识

46-60

完成GPS初始化及基础设置

61-75

添加对应位置显示功能

76-90

撰写嵌入式系统综合实验报告

6、产品成本分析

1)硬件成本清单

产品中硬件材料(如元器件芯片、开发板、仿真器、编程器和测量仪器等)及开发费用(如制板及焊接等费用)

类别

型号∕参数

单价

数量

合计

供应商

联系人及方式

CPU

STM32f103RB

138

1

138

正点原子

GPS

Neo-6m-v12

85

1

85

青岛达英电信器材有限公司

LCD

TFTLCD2.8

1

★要求供应商必须是专业公司非淘宝个人用户并能开立正规的产品发票

2)软件成本清单

产品中所用软件(如嵌入式开发环境、嵌入式操作系统、GUI支持包和TCPIP协议栈等)费用

类别

名称

单价

数量

合计

供应商

联系人及方式

开发环境

KeiluVsion4

0

1

0

★要求供应商必须是专业公司非淘宝个人用户并能开立正规的产品发票

3)人工成本清单

人工成本=50小时*10元/小时*3人=1500元

4)其他成本

无本

5)产品总成本及分析

产品总成本=硬件成本+软件成本+人工成本+其他成本=138+

三、产品实现

1、硬件实现(必须)

嵌入式处理器的最小系统图

GPS模块原理图

嵌入式处理器与GPS模块间的具体连接连线图硬件连接:

STM32开发板-->ATK-NEO-6MGPS模块

PA9-->RXD

PA10-->TXD

GND-->GND

5V/3.3V-->VCC

2、软件实现(必须)

软件编程中设计思路(main主程序流程图)

GPS模块主要函数:

u8NMEA_Comma_Pos(u8*buf,u8cx);

功能:

分析GPS接收到的数据,采用逗号取值法

参数:

数据缓存区数据首地址、逗号位置标号:

返回值:

两个逗号之间的数据

intNMEA_Str2num(u8*buf,u8*dx);

功能:

把获取到的字符串转换为数字

参数:

数据缓存区数据首地址、小数点位置

返回值:

转换后的数值

voidNMEA_GPGSV_Analysis(nmea_msg*gpsx,u8*buf);

工能:

用来获取可见卫星的总数、卫星编号、卫星仰角、卫星方位角、信噪比等信息

参数:

结构体gpsx的首地址、数据缓存区首地址

返回值:

无.

$GPGSV语句的基本格式如下:

$GPGSV,

(1),

(2),(3),(4),(5),(6),(7),...,(4),(5),(6),(7)*hh(CR)(LF)

(1)GSV语句总数

(2)本句GSV的编号

(3)可见卫星总数(00~12,前面的0也将被传输)

(4)卫星编号(01~32,前面的0也将被传输)

(5)卫星仰角(00~90度,前面的0也将被传输)

(6)卫星方位角(000~359度,前面的0也将被传输)

(7)信噪比(00~99dB,没有跟踪到卫星时为空)

voidNMEA_GPGGA_Analysis(nmea_msg*gpsx,u8*buf);

功能:

用来获取UTC时间、经纬度、海拔高度等信息

参数:

结构体gpsx的首地址、数据缓存区首地址

返回值:

$GPGGA的语句格式如下:

$GPGGA,$GPGGA,$GPGGA,$GPGGA,

(1),

(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,,M,(11),(12)*hh(CR)(LF)

(1)UTC时间,格式hhmmss.ss

(2)纬度ddmm.mmmmm度分格式);

(3)纬度半球N或S(北纬或南);

(4)经度,格式为dddmm.mmm度分格式;

(5)经度半球E或W(东经或西);

(6)GPSGPS状态,0=未定位,1=非差分定位,2=差分定位;

(7)正在使用的于定位卫星数量(00~12)

(8)HDOP水平精确度因子(0.5~99.9)

(9)海拔高度(-9999.9到9999.9米)

(10)大地水准面高度(-9999.9到9999.9米)

(11)差分时间(从最近一次接收到差分信号开始的秒数,非定位此项为空)

(12)差分参考基站标号(0000到1023,首位0也将传送,非差分定位此项为空

voidNMEA_GPGSA_Analysis(nmea_msg*gpsx,u8*buf);

功能:

用来获得卫星号、水平/垂直因子等信息

参数:

结构体gpsx的首地址、数据缓存区首地址

返回值:

$GPGSA的语句格式如下:

$GPGSA,

(1),

(2),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(4),(5),(6)*hh(CR)(LF)

(1)模式,M=手动,A=自动

(2)定位类型,1=为定位,2=2D定位,3=3D定位

(3)正在用于定位的卫星号(00~32)

(4)PDOP综合位置精度因子(0.5~99.9)

(5)HDOP水平精度因子(0.5~99.9)

(6)VDOP垂直精度因子(0.5~99.9)

voidNMEA_GPRMC_Analysis(nmea_msg*gpsx,u8*buf);

功能:

获取UTC时间、UTC日期、地面速度等信息

参数:

结构体gpsx的首地址、数据缓存区首地址

返回值:

$GP$GPRMC语句的基本格式如下:

$GPRMC,

(1),

(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*(CR)(LF)

(1)

(1)

(1)UTC时间hhmmsshhmmss(时分秒)

(2)A=有效定位,V=无效定位无效定

(3)ddmm.mmm(度分)(度分)

(4)纬度半球N(北半球)或S(南半球)

(5)经度dddmm.mm(度分(度分)

(6)经度半球E(东经)或W(西经)

(7)地面速率000.0~999.9节)

(8)地面航向(000.0~359.9度,以真北方为参考基准))

(9)UTC日期,日期,ddmmyyddmmyy(日月年)

(10)磁偏角(000.0~180.0度,前导位数不足则补0)

(11)磁偏角方向,E(东)或W(西)

(12)模式指示(A=自主定位D=差分E=估算,N=数据无效)

voidNMEA_GPVTG_Analysis(nmea_msg*gpsx,u8*buf);

功能:

获取地面航向、地面速率等信息

参数:

结构体gpsx的首地址、数据缓存区首地址

返回值:

格式如下:

$GPVTG,

(1),T,

(2),M,(3),N,(4),K,(5)*hh(CR)(LF)

(1)以真北为参考基准的地面航向(000~359度,前面的0也将被传输)

(2)以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)

(3)地面速率(000.0~999.9节,前面的0也将被传输)

(4)地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)

(5)模式指示(A=自主定位,D=差分,E=估算,N=数据无效)

四、用户使用说明

该产品是一个基于STM32的校园定位系统,在你接通电源、按下电源后系统能够精确的显示出你当前的坐标、时间、以及海拔等信息。

由于室内GPS无法接收到信号,该产品只能在室外进行定位

五、产品开发小结

1、产品完成情况(必须)

本产品最初的目的是实现一个个人定位系统、并且实现位置信息的跟踪,但是由于技术问题只完成了当前位置的定位。

花费的时间:

60小时

费用:

2、产品存在问题(必须)

该产品的定位并不完善,仅仅是能够获取到当前位置,当然如果你是在我们本校园的话、还可以显示具体的校园地址信息,比如图书馆、实训楼、教学楼等信息。

但是有一个问题就是没有实现将数据传输到手机端或者PC端,无法进行位置信息的跟踪。

3、产品开发过程中的经验和体会(必须)

在这次嵌入式的实验过程中学习到了好多以前没有接触过的东西,比如STM32开发板的使用,GPS模块的使用,在这过程中学会了如何点亮LCD、LED,如何让一个GPS开始工作、并且把获取的数据显示在LCD上等等。

如果要自己编写所有的代码以我们目前的水平还是有一定的难度的,所以这次试验基本上是在原有的代码上进行了一定的修改来实现自己的目标程序。

通过对代码的反复读写与研究基本上理解了GPS的实现过程。

附2:

所有源程序代码(必须)

#include"gps.h"

#include"led.h"

#include"delay.h"

#include"usart1.h"

#include"stdio.h"

#include"stdarg.h"

#include"string.h"

#include"math.h"

//从buf里面得到第cx个逗号所在的位置

//返回值:

0~0XFE,代表逗号所在位置的偏移.

//0XFF,代表不存在第cx个逗号

u8NMEA_Comma_Pos(u8*buf,u8cx)

{

u8*p=buf;

while(cx)

{

if(*buf=='*'||*buf<''||*buf>'z')return0XFF;//遇到'*'或者非法字符,则不存在第cx个逗号

if(*buf==',')cx--;

buf++;

}

returnbuf-p;

}

//m^n函数

//返回值:

m^n次方.

u32NMEA_Pow(u8m,u8n)

{

u32result=1;

while(n--)result*=m;

returnresult;

}

//str转换为数字,以','或者'*'结束

//buf:

数字存储区

//dx:

小数点位数,返回给调用函数

//返回值:

转换后的数值

intNMEA_Str2num(u8*buf,u8*dx)

{

u8*p=buf;

u32ires=0,fres=0;

u8ilen=0,flen=0,i;

u8mask=0;

intres;

while

(1)//得到整数和小数的长度

{

if(*p=='-'){mask|=0X02;p++;}//是负数

if(*p==','||(*p=='*'))break;//遇到结束了

if(*p=='.'){mask|=0X01;p++;}//遇到小数点了

elseif(*p>'9'||(*p<'0'))//有非法字符

{

ilen=0;

flen=0;

break;

}

if(mask&0X01)flen++;

elseilen++;

p++;

}

if(mask&0X02)buf++;//去掉负号

for(i=0;i

{

ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0');

}

if(flen>5)flen=5;//最多取5位小数

*dx=flen;//小数点位数

for(i=0;i

{

fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0');

}

res=ires*NMEA_Pow(10,flen)+fres;

if(mask&0X02)res=-res;

returnres;

}

//分析GPGSV信息

//gpsx:

nmea信息结构体

//buf:

接收到的GPS数据缓冲区首地址

voidNMEA_GPGSV_Analysis(nmea_msg*gpsx,u8*buf)

{

u8*p,*p1,dx;

u8len,i,j,slx=0;

u8posx;

p=buf;

p1=(u8*)strstr((constchar*)p,"$GPGSV");

len=p1[7]-'0';//得到GPGSV的条数

posx=NMEA_Comma_Pos(p1,3);//得到可见卫星总数

if(posx!

=0XFF)gpsx->svnum=NMEA_Str2num(p1+posx,&dx);

for(i=0;i

{

p1=(u8*)strstr((constchar*)p,"$GPGSV");

for(j=0;j<4;j++)

{

posx=NMEA_Comma_Pos(p1,4+j*4);

if(posx!

=0XFF)gpsx->slmsg[slx].num=NMEA_Str2num(p1+posx,&dx);//得到卫星编号

elsebreak;

posx=NMEA_Comma_Pos(p1,5+j*4);

if(posx!

=0XFF)gpsx->slmsg[slx].eledeg=NMEA_Str2num(p1+posx,&dx);//得到卫星仰角

elsebreak;

posx=NMEA_Comma_Pos(p1,6+j*4);

if(posx!

=0XFF)gpsx->slmsg[slx].azideg=NMEA_Str2num(p1+posx,&dx);//得到卫星方位角

elsebreak;

posx=NMEA_Comma_Pos(p1,7+j*4);

if(posx!

=0XFF)gpsx->slmsg[slx].sn=NMEA_Str2num(p1+posx,&dx);//得到卫星信噪比

elsebreak;

slx++;

}

p=p1+1;//切换到下一个GPGSV信息

}

}

//分析GPGGA信息

//gpsx:

nmea信息结构体

//buf:

接收到的GPS数据缓冲区首地址

voidNMEA_GPGGA_Analysis(nmea_msg*gpsx,u8*buf)

{

u8*p1,dx;

u8posx;

p1=(u8*)strstr((constchar*)buf,"$GPGGA");

posx=NMEA_Comma_Pos(p1,6);//得到GPS状态

if(posx!

=0XFF)gpsx->gpssta=NMEA_Str2num(p1+posx,&dx);

posx=NMEA_Comma_Pos(p1,7);//得到用于定位的卫星数

if(posx!

=0XFF)gpsx->posslnum=NMEA_Str2num(p1+posx,&dx);

posx=NMEA_Comma_Pos(p1,9);//得到海拔高度

if(posx!

=0XFF)gpsx->altitude=NMEA_Str2num(p1+posx,&dx);

}

//分析GPGSA信息

//gpsx:

nmea信息结构体

//buf:

接收到的GPS数据缓冲区首地址

voidNMEA_GPGSA_Analysis(nmea_msg*gpsx,u8*buf)

{

u8*p1,dx;

u8posx;

u8i;

p1=(u8*)strstr((constchar*)buf,"$GPGSA");

posx=NMEA_Comma_Pos(p1,2);//得到定位类型

if(posx!

=0XFF)gpsx->fixmode=NMEA_Str2num(p1+posx,&dx);

for(i=0;i<12;i++)//得到定位卫星编号

{

posx=NM

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1