嵌入式综合实验报告.docx

上传人:李医生 文档编号:6120020 上传时间:2020-09-11 格式:DOCX 页数:25 大小:226.49KB
返回 下载 相关 举报
嵌入式综合实验报告.docx_第1页
第1页 / 共25页
嵌入式综合实验报告.docx_第2页
第2页 / 共25页
嵌入式综合实验报告.docx_第3页
第3页 / 共25页
嵌入式综合实验报告.docx_第4页
第4页 / 共25页
嵌入式综合实验报告.docx_第5页
第5页 / 共25页
点击查看更多>>
资源描述

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

1、.嵌入式系统综合实验报告学号 :姓名 :Shanghai University of Engineering Science School of Electronic and Electrical Engineering.基于 STM32的 GPS信息显示系统嵌入式系统综合实验报告班级: 0211112姓名:褚建勤学号: 021111228班级: 0211112姓名:于心忆学号: 021111216班级: 0211112姓名:乐浩奎学号: 021111232一、产品设计要求(产品规格描述)1 、嵌入式产品名称 GPS 信息显示系统2 、嵌入式产品目的在学校的生活中,你经常可能需要联系不是同一间

2、宿舍的同学,但是你不能确定他现在在什么地方,这时候全球定位系统(GPS)就可以发挥作用了,但是传统的GPS系统只能提供经纬度信息, 不能直观的显示你想要找到人在何处,我们的系统就在传统的GPS的基础上添加了对应位置显示的功能,方便你更方便更快捷的找到你想找的同学3 、嵌入式产品功能使用 GPS 输入用户位置信息GPS 将相关经纬度信息反馈给主处理器主处理器处理相关位置信息并将信息转换为对应位置在LCD 上显示出来在 LCD 上输出用户状态信息4 、嵌入式产品的输入和输出输入设备: GPS系统输出设备: LCD二、产品方案设计(产品设计方案)1 、产品架构设计GPS 模块stm32LCD2 、产

3、品硬件设计1 )处理器选择本系统选用基于ARMCortex-M3 内核的 STM32F103RB嵌入式微控制器作为处理器。选用原因A 技术因素工作频率 : 最高 72MHz。内部和外部存储器: 128K字节的闪存程序存储器,用于存放程序及数据;多达20K 字节的内置SRAM, CPU能以 0 等待周期访问 ( 读 / 写) 。.定时器和中断:包含1 个高级控制定时器、3 个普通定时器,以及2 个看门狗定时器和1 个系统嘀嗒定时器;内置嵌套的向量式中断控制器,能够处理多达43 个可屏蔽中断通道和 16 个优先级。IO 接口:通用输入输出接口(GPIO) 。每个GPIO 管脚都可以由软件配置成输出

4、( 推拉或开路 ) 、输入 ( 带或不带上拉或下拉) 或其它的外设功能口。多数 GPIO管脚都与数字或模拟的外设共用。所有的GPIO 管脚都有大电流通过能力。在需要的情况下,I/O管脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O 寄存器。在 APB2上的 I/O 脚可达 18MHz的翻转速度。通用同步 / 异步接受发送器(USART):USART1接口通信速率可达4.5 兆位 / 秒,其他接口的通信速率可达2.25 兆位 / 秒。 USART接口具有硬件的CTS和 RTS信号管理、支持IrDA SIRENDEC传输编解码、兼容ISO7816 的智能卡并提供LIN 主 / 从功能

5、。所有USART接口都可以使用 DMA操作。环境要求: -40 C 至 +85 C 温度范围。B 非技术因素开发及调试工具: Keil MDK参考资料: STM32F103RBT6官方资料操作系统: Windows XP / Windows 7 / Windows 8内部 AHB时钟频率 : 72 MHz。内部 APB1时钟频率: 36 MHz。内部 APB2时钟频率: 72 MHz。标准工作电压 VDD: 2.0V 3.6V 。模拟部分工作电压 ( 未使用 ADC):必须与 VDD相同,最大 3.6V 。模拟部分工作电压 ( 使用 ADC):必须与 VDD相同, 2.4V 3.6V 。备份部

6、分工作电压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

7、,模块采用UBLOX NEO-M6模组,体积小,性能优异。2,模组自带陶瓷天线及MAXIM公司 20,5dB 高增益 LNA芯片,搜星能力强。3,模组可通过串口进行各种参数设置,并可以保存在EEPROM,使用方便。4,模组自带IPX 接口,可以连接各种有源天线,适应能力强。5 模组兼容3.3V/5.5V电平,方便连接各种单片机系统。6,模组自带可充电后备电源,可以掉电保持星历数据注 :在主电源断电后, 后备电池可以维持半小时左右的 GPS星历数据的保存, 以支持温启动或者热启动,从而实现快速定位 。GPS 模块图3 )开发环境选择本系统选用KEIL 作为开发环境。KeiL uVision4完美

8、支持Cortex-M 、 Cortex-R4 、 ARM7和 ARM9系列器件;拥有业行领先的 ARM C/C+编译工具链;提供带标准驱动类的USB 设备和USB 主机栈;为带图形用户接口的嵌入式系统提供了完善的GUI 库支持; ULINKpro 可实时分析运行中的应用程序,且能记录 Cortex-M 指令的每一次执行;执行分析工具和性能分析器可使程序得到最优化等特征。4 )开发语言选择.1-1011-1515-3031-4546-6061-7576-90.产品软件开发语言:C语言C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统

9、应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上, 而且各类科研都需要用到 C 语言,适于编写系统软件, 具体应用比如单片机以及嵌入式系统开发。主要优点如下:简洁紧凑、灵活方便;运算符丰富;数据类型丰富;表达方式灵活实用; 允许直接访问物理地址,对硬件进行操作;生成目标代码质量高,程序执行效率高;可移植性好;表达力强。由于大一刚进校时就接触C 语言,所以C语言相对我们而言比较熟悉,在编写中更加容易。4 、项目组成员分工姓名现有工作基础项目中项目中预计总共任务工作时间(小时)组长褚建勤C 语言基础GPS90组员于

10、心忆初学串口90组员乐浩奎初学LCD905 、产品开发计划时间任务计划制定嵌入式系统综合实验计划。查阅相关书籍,到官方网站下载GPS使用说明。了解熟悉AT指令、串口通信的知识。了解熟悉GPS相关知识完成 GPS初始化及基础设置添加对应位置显示功能撰写嵌入式系统综合实验报告6 、产品成本分析1 )硬件成本清单产品中硬件材料(如元器件芯片、开发板、仿真器、编程器和测量仪器等)及开发费用(如制板及焊接等费用)类别型号参数单价数量合计供应商联系人及方式CPUSTM32f103RB1381138正点原子GPSNeo-6m-v1285185青岛达英电信器材有限公司LCDTFTLCD 2.81 要求供应商必

11、须是专业公司非淘宝个人用户并能开立正规的产品发票2 )软件成本清单产品中所用软件 (如嵌入式开发环境、嵌入式操作系统、 GUI 支持包和 TCPIP 协议栈等)费用类别名称单价数量合计供应商联系人及方式开发环境Keil uVsion4010无无 要求供应商必须是专业公司非淘宝个人用户并能开立正规的产品发票.3 )人工成本清单人工成本 = 50 小时 *10 元 / 小时 *3 人=1500 元4 )其他成本无本5 )产品总成本及分析产品总成本硬件成本软件成本人工成本其他成本=138+三、产品实现1 、硬件实现(必须)嵌入式处理器的最小系统图GPS 模块原理图嵌入式处理器与GPS模块间的具体连接

12、连线图硬件连接:.STM32开发板 -ATK-NEO-6M GPS模块PA9 -RXDPA10-TXDGND -GND5V/3.3V-VCC2 、软件实现(必须)软件编程中设计思路(main 主程序流程图)GPS 模块主要函数:u8 NMEA_Comma_Pos(u8 *buf,u8 cx);功能:分析GPS 接收到的数据,采用逗号取值法参数:数据缓存区数据首地址、逗号位置标号:返回值:两个逗号之间的数据int NMEA_Str2num(u8 *buf,u8*dx);功能:把获取到的字符串转换为数字参数:数据缓存区数据首地址、小数点位置返回值:转换后的数值.void NMEA_GPGSV_An

13、alysis(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) 可见卫星总数( 0012,前面的 0 也将被传输)(4)卫星编号( 0132,前面的 0 也将被传输)(5)卫星仰角( 0090 度,前面的0 也将被传输)(6)卫星方位角(0003

14、59 度,前面的0 也将被传输)(7)信噪比( 0099dB,没有跟踪到卫星时为空)void NMEA_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

15、.mmmmm 度分格式 );(3) 纬度半球 N 或 S(北纬 或南 );(4) 经度,格式为 dddmm.mmm 度分格式;(5) 经度半球 E 或 W (东经 或西);(6) GPSGPS 状态 ,0= 未定位, 1= 非差分定位 , 2= 差分定位 ;(7) 正在使用的于定位卫星数量( 0012)(8) HDOP 水平精确度 因子( 0.599.9 )(9) 海拔 高度 ( -9999.9 到 9999.9 米)(10 ) 大地水准面高度(-9999.9到 9999.9 米)(11 ) 差分时间(从最近一次接收到差分信号开始的秒数,非定位此项为空)(12 ) 差分参考基站标号( 0000

16、 到 1023 ,首位0 也将传送,非差分定位此项为空void NMEA_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)正在用于定位的卫星号(0032)(

17、4)PDOP 综合位置精度因子(0.599.9)(5)HDOP 水平精度因子(0.599.9)(6)VDOP 垂直精度因子(0.599.9).void NMEA_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(时分秒)(

18、2) A= 有效定位, V= 无效定位 无效定(3) ddmm.mmm (度分) (度分)(4) 纬度半球 N (北半球)或 S(南半球)(5) 经度 dddmm.mm (度分(度分)(6)经度半球E(东经)或W (西经)(7)地面速率000.0999.9 节)(8) 地面航向( 000.0359.9 度 ,以 真北方 为参考基准)(9) UTC 日期, 日期, ddmmyyddmmyy (日月年)(10)磁偏角( 000.0180.0 度,前导位数不足则补0)(11)磁偏角方向,E(东)或W (西)(12) 模式指示( A= 自主定位 D= 差分 E= 估算, N= 数据无效)void NM

19、EA_GPVTG_Analysis(nmea_msg *gpsx,u8 *buf);功能:获取地面航向、地面速率等信息参数:结构体gpsx 的首地址、数据缓存区首地址返回值:无格式如下:$GPVTG,(1),T,(2),M,(3),N,(4),K, (5)*hh(CR)(LF)( 1) 以真北为参考基准的地面航向(000359 度,前面的0也将被传输)( 2) 以磁北为参考基准的地面航向(000359 度,前面的0也将被传输)( 3)地面速率( 000.0999.9 节,前面的 0 也将被传输)( 4)地面速率( 0000.01851.8 公里 /小时,前面的 0 也将被传输)( 5)模式指示

20、( A= 自主定位, D= 差分, E= 估算, N= 数据无效)四、用户使用说明该产品是一个基于 STM32的校园定位系统,在你接通电源、按下电源后系统能够精确的显示出你当前的坐标、时间、以及海拔等信息。由于室内GPS无法接收到信号,该产品只能在室外进行定位五、产品开发小结1 、产品完成情况(必须)本产品最初的目的是实现一个个人定位系统、并且实现位置信息的跟踪,但是由于技术问题只完成了当前位置的定位。花费的时间: 60 小时费用:2 、产品存在问题(必须)该产品的定位并不完善,仅仅是能够获取到当前位置,当然如果你是在我们本校园的话、.还可以显示具体的校园地址信息,比如图书馆、实训楼、教学楼等

21、信息。但是有一个问题就是没有实现将数据传输到手机端或者PC端,无法进行位置信息的跟踪。3、产品开发过程中的经验和体会(必须)在这次嵌入式的实验过程中学习到了好多以前没有接触过的东西,比如 STM32 开发板的使用,GPS 模块的使用,在这过程中学会了如何点亮LCD 、 LED ,如何让一个GPS 开始工作、并且把获取的数据显示在LCD 上等等。如果要自己编写所有的代码以我们目前的水平还是有一定的难度的,所以这次试验基本上是在原有的代码上进行了一定的修改来实现自己的目标程序。通过对代码的反复读写与研究基本上理解了 GPS 的实现过程。附 2:所有源程序代码(必须)#include gps.h#i

22、nclude led.h#include delay.h#include usart1.h#include stdio.h#include stdarg.h#include string.h#include math.h/ 从 buf 里面得到第 cx 个逗号所在的位置/ 返回值 :00XFE, 代表逗号所在位置的偏移./ 0XFF,代表不存在第 cx 个逗号u8 NMEA_Comma_Pos(u8 *buf,u8 cx)u8 *p=buf;while(cx)if(*buf=*|*bufz)return 0XFF;/遇到 *或者非法字符 , 则不存在第cx 个逗号if(*buf=,)cx-;b

23、uf+;return buf-p;./mn 函数/ 返回值 :mn 次方 .u32 NMEA_Pow(u8 m,u8 n)u32 result=1;while(n-)result*=m;return result;/str转换为数字 , 以,或者 *结束/buf:数字存储区/dx:小数点位数 , 返回给调用函数/ 返回值 : 转换后的数值int NMEA_Str2num(u8 *buf,u8*dx)u8 *p=buf;u32 ires=0,fres=0;u8 ilen=0,flen=0,i;u8 mask=0;int res;while(1) /得到整数和小数的长度if(*p=-)mask|=

24、0X02;p+;/是负数if(*p=,|(*p=*)break;/遇到结束了if(*p=.)mask|=0X01;p+;/遇到小数点了else if(*p9|(*p0)/ 有非法字符ilen=0;flen=0;break;.if(mask&0X01)flen+;else ilen+;p+;if(mask&0X02)buf+;/ 去掉负号for(i=0;i5)flen=5;/ 最多取 5 位小数*dx=flen;/ 小数点位数for(i=0;isvnum=NMEA_Str2num(p1+posx,&dx);for(i=0;ilen;i+)p1=(u8*)strstr(const char *)p

25、,$GPGSV);for(j=0;jslmsgslx.num=NMEA_Str2num(p1+posx,&dx);/ 得到卫星编号else break;posx=NMEA_Comma_Pos(p1,5+j*4);if(posx!=0XFF)gpsx-slmsgslx.eledeg=NMEA_Str2num(p1+posx,&dx);/得到卫星仰角else break;posx=NMEA_Comma_Pos(p1,6+j*4);if(posx!=0XFF)gpsx-slmsgslx.azideg=NMEA_Str2num(p1+posx,&dx);/得到卫星方位角else break;posx=

26、NMEA_Comma_Pos(p1,7+j*4);if(posx!=0XFF)gpsx-slmsgslx.sn=NMEA_Str2num(p1+posx,&dx);/ 得到卫星信噪比else break;slx+;p=p1+1;/切换到下一个GPGSV信息/ 分析 GPGGA信息/gpsx:nmea信息结构体/buf:接收到的 GPS数据缓冲区首地址void NMEA_GPGGA_Analysis(nmea_msg *gpsx,u8 *buf).u8 *p1,dx;u8 posx;p1=(u8*)strstr(const char *)buf,$GPGGA);posx=NMEA_Comma_P

27、os(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数据缓冲区首地址v

28、oid NMEA_GPGSA_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p1,dx;u8 posx;u8 i;p1=(u8*)strstr(const char *)buf,$GPGSA);posx=NMEA_Comma_Pos(p1,2);/ 得到定位类型if(posx!=0XFF)gpsx-fixmode=NMEA_Str2num(p1+posx,&dx);for(i=0;ipossli=NMEA_Str2num(p1+posx,&dx);else break;posx=NMEA_Comma_Pos(p1,15);/ 得到 PDOP位置精度因子if(posx!

29、=0XFF)gpsx-pdop=NMEA_Str2num(p1+posx,&dx);.posx=NMEA_Comma_Pos(p1,16);/ 得到 HDOP位置精度因子if(posx!=0XFF)gpsx-hdop=NMEA_Str2num(p1+posx,&dx);posx=NMEA_Comma_Pos(p1,17);/ 得到 VDOP位置精度因子if(posx!=0XFF)gpsx-vdop=NMEA_Str2num(p1+posx,&dx);/ 分析 GPRMC信息/gpsx:nmea信息结构体/buf:接收到的 GPS数据缓冲区首地址void NMEA_GPRMC_Analysis(

30、nmea_msg *gpsx,u8 *buf)u8 *p1,dx;u8 posx;u32 temp;float rs;p1=(u8*)strstr(const char *)buf,GPRMC);/$GPRMC,经常有 &和 GPRMC分开的情况 , 故只判断GPRMC.posx=NMEA_Comma_Pos(p1,1);/ 得到 UTC时间if(posx!=0XFF)temp=NMEA_Str2num(p1+posx,&dx)/NMEA_Pow(10,dx);/ 得到 UTC时间 , 去掉 msgpsx-utc.hour=8+temp/10000;if(gpsx-utc.hour=24)gp

31、sx-utc.hour=gpsx-utc.hour-24;gpsx-utc.min=(temp/100)%100;gpsx-utc.sec=temp%100;.posx=NMEA_Comma_Pos(p1,3);/ 得到纬度if(posx!=0XFF)temp=NMEA_Str2num(p1+posx,&dx);gpsx-latitude=temp/NMEA_Pow(10,dx+2);/ 得到rs=temp%NMEA_Pow(10,dx+2);/ 得到 gpsx-latitude=gpsx-latitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx)/60;/转换

32、为posx=NMEA_Comma_Pos(p1,4);/ 南纬还是北纬if(posx!=0XFF)gpsx-nshemi=*(p1+posx);posx=NMEA_Comma_Pos(p1,5);/ 得到经度if(posx!=0XFF)temp=NMEA_Str2num(p1+posx,&dx);gpsx-longitude=temp/NMEA_Pow(10,dx+2);/ 得到rs=temp%NMEA_Pow(10,dx+2);/ 得到 gpsx-longitude=gpsx-longitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx)/60;/转换为posx

33、=NMEA_Comma_Pos(p1,6);/ 东经还是西经if(posx!=0XFF)gpsx-ewhemi=*(p1+posx);posx=NMEA_Comma_Pos(p1,9);/ 得到 UTC日期if(posx!=0XFF)temp=NMEA_Str2num(p1+posx,&dx);/ 得到 UTC日期gpsx-utc.date=temp/10000;gpsx-utc.month=(temp/100)%100;gpsx-utc.year=2000+temp%100;./ 分析GPVTG信息/gpsx:nmea信息结构体/buf:接收到的 GPS数据缓冲区首地址void NMEA_G

34、PVTG_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p1,dx;u8 posx;p1=(u8*)strstr(const char *)buf,$GPVTG);posx=NMEA_Comma_Pos(p1,7);if(posx!=0XFF)/ 得到地面速率gpsx-speed=NMEA_Str2num(p1+posx,&dx);if(dxspeed*=NMEA_Pow(10,3-dx);/ 确保扩大1000 倍/ 提取NMEA-0183信息/gpsx:nmea信息结构体/buf:接收到的 GPS数据缓冲区首地址void GPS_Analysis(nmea_msg *gpsx,u8 *buf)NMEA_GPGSV_Analysis(gpsx,buf);/GPGS

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1