商城网站作品,wordpress中文百科,网站建好后如何上线,wordpress登录 跳转简介
我们在做一些项目的时候#xff0c;可能需要使用到GPS模块#xff0c;我们可以通过这个模块获得当前的位置以及时间#xff0c;我这里就教大家如何去使用GPS定位模块#xff0c;并且把示例代码开源到评论区下面#xff0c;有需要自取即可#xff0c;我我这里用到的…简介
我们在做一些项目的时候可能需要使用到GPS模块我们可以通过这个模块获得当前的位置以及时间我这里就教大家如何去使用GPS定位模块并且把示例代码开源到评论区下面有需要自取即可我我这里用到的是GPS NEO-6M模块搭配吸盘天线或者陶瓷天线。 实验所需材料
一块 STM32F103C8T6 小系统板、一个下载器、一个 4针 I2C 通讯的 OLED 液晶、一个GPS 驱动板、一套吸盘天线套装吸盘天线可以搁置在窗户外无遮挡的地方或陶瓷天线陶瓷天线必须户外空旷地实验、一个面包板、若干杜邦线。
实验步骤
1、通过 STLINK 下载器给小系统板烧录我开源的GPS示例代码。
2、拔掉小系统板上连接的 STLINK 杜邦线用 4根杜邦线连接系统板和 OLED 液晶屏用 4 根杜邦线连接系统板和 GPS 模块。
最小系统板和 OLED 液晶屏的接线方式
VCC5V/3.3VGNDGNDSCLPB12SDAPB13 最小系统板和 GPS 模块的接线方式
VCC5VGNDGNDRXPA2TXPA
3、连接好后用 USB 数据线给开发板上电
4、可以看到 OLED 液晶屏幕显示“爱学电子的刻刻帝”以及“模块同步中“。
5、等有信号后GPS 模块上的 LED 灯会闪烁获取到数据后OLED 液晶屏幕上会显示 GPS 的经纬度以及时间会按北京时间走动。 模块介绍 引脚介绍 其中PPS引脚同时连接到了模块自带了的状态指示灯PPS该引脚连接在UBLOX NEO-6M模组的TIMEPULSE端口该端口的输出特性可以通过程序设置。PPS指示灯即PPS引脚在默认条件下没经过程序设置有2个状态
1 常亮表示模块已开始工作但还未实现定位。
2 闪烁100ms灭900ms亮表示模块已经定位成功。
指令解析 NMEA-0183 协议简介 NMEA 0183是美国国家海洋电子协会National Marine Electronics Association为海用电子设备 制定的标准格式。目前业已成了GPS导航设备统一的RTCM标准协议。NMEA-0183协议采用ASCII码来传递GPS定位信息我们称之为帧。帧格式形如$aaccc,ddd,ddd,…,ddd*hh(CR)(LF) 1、“$”帧命令起始位 2、aaccc地址域前两位为识别符aa后三位为语句名ccc 3、ddd…ddd数据 4、“*”校验和前缀也可以作为语句数据结束的标志 5、hh校验和check sum$与*之间所有字符ASCII码的校验和各字节做异或运算得到 校验和后再转换16进制格式的ASCII字符 6、(CR)(LF)帧结束回车和换行符 UTC 时间即协调世界时相当于本初子午线(0 度经线)上的时间北京时间比 UTC 早 8 个小时。
指令讲解
1$GPGGAGPS定位信息Global Positioning System Fix Data $GPGGA语句的基本格式如下其中M指单位Mhh指校验和CR和LF代表回车换行下同 $GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF) (1)UTC时间格式为hhmmss.ss (2)纬度格式为ddmm.mmmmm度分格式 (3)纬度半球N或S北纬或南纬 (4)经度格式为dddmm.mmmmm度分格式 (5)经度半球E或W东经或西经 (6)GPS状态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也将传送非差分定位此项为空) 举例如下 $GPGGA,023543.00,2308.28715,N,11322.09875,E,1,06,1.49,41.6,M,-5.3,M,,*7D 2$GPGSA当前卫星信息 $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未定位22D定位33D定位。 (3) 正在用于定位的卫星号01~32 (4) PDOP综合位置精度因子0.5-99.9 (5) HDOP水平精度因子10.5-99.9 (6) VDOP垂直精度因子0.5-99.9 举例如下 $GPGSA,A,3,26,02,05,29,15,21,,,,,,,2.45,1.49,1.94*0E 注1精度因子值越小则准确度越高。 3$GPGSV可见卫星数GPS Satellites in View $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没有跟踪到卫星时为空。 注每条GSV语句最多包括四颗卫星的信息其他卫星的信息将在下一条$GPGSV语句中输出。 举例如下 $GPGSV,3,1,12,02,39,117,25,04,02,127,,05,40,036,24,08,10,052,*7E $GPGSV,3,2,12,09,35,133,,10,01,073,,15,72,240,22,18,05,274,*7B $GPGSV,3,3,12,21,10,316,31,24,16,176,,26,65,035,42,29,46,277,18*7A 4$GPRMC推荐定位信息Recommended Minimum Specific GPS/Transit Data $GPRMC语句的基本格式如下 $GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF) (1) UTC时间hhmmss时分秒 (2) 定位状态A有效定位V无效定位 (3) 纬度ddmm.mmmmm度分 (4) 纬度半球N北半球或S南半球 (5) 经度dddmm.mmmmm度分 (6) 经度半球E东经或W西经 (7) 地面速率000.0~999.9节 (8) 地面航向000.0~359.9度以真北方为参考基准 (9) UTC日期ddmmyy日月年 (10)磁偏角000.0~180.0度前导位数不足则补0 (11) 磁偏角方向E东或W西 (12) 模式指示A自主定位D差分E估算N数据无效 举例如下 $GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78 5$GPVTG地面速度信息Track Made Good and Ground Speed $GPVTG语句的基本格式如下 $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数据无效 举例如下 $GPVTG,,T,,M,0.195,N,0.361,K,A*2A 6$GPGLL定位地理信息Geographic Position $GPGLL语句的基本格式如下 $GPGLL,(1),(2),(3),(4),(5),(6),(7)*hh(CR)(LF) (1) 纬度ddmm.mmmmm度分 (2) 纬度半球N北半球或S南半球 (3) 经度dddmm.mmmmm度分 (4) 经度半球E东经或W西经 (5) UTC时间hhmmss时分秒 (6) 定位状态A有效定位V无效定位 (7) 模式指示A自主定位D差分E估算N数据无效 举例如下 $GPGLL,2308.28715,N,11322.09875,E,023543.00,A,A*6A 7$GPZDA当前时间信息 $GPZDA语句的基本格式如下 $GPZDA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF) (1) UTC时间hhmmss时分秒 (2) 日 (3) 月 (4) 年 (5) 本地区域小时NEO-6M未用到为00 (6) 本地区域分钟NEO-6M未用到为00 举例如下 $GPZDA,082710.00,16,09,2002,00,00*64 NMEA-0183协议命令帧部分就介绍到这里接下来我们看看NMEA-0183协议的校验通过前面 的介绍我们知道每一帧最后都有一个hh的校验和该校验和是通过计算$与*之间所有字符 ASCII码的异或运算得到将得到的结果以ASCII字符表示就是该校验hh。 例如语句$GPZDA,082710.00,16,09,2002,00,00*64校验和红色部分参与计算计算方法为 0X47xor 0X50xor 0X5Axor 0X44xor 0X41xor 0X2Cxor 0X30xor 0X38xor 0X32xor 0X37xor 0X31xor 0X30xor 0X2Exor 0X30xor 0X30xor 0X2Cxor 0X31xor 0X36xor 0X2Cxor 0X30xor 0X39xor 0X2Cxor 0X32xor 0X30xor 0X30xor 0X32xor 0X2Cxor 0X30xor 0X30xor 0X2Cxor 0X30xor 0X30 得到的结果就是0X64用ASCII表示就是64。 NMEA-0183协议我们就介绍到这里了解了该协议我们就可以编写单片机代码解析 NMEA-0183数据从而得到GPS定位的各种信息了。
程序设计
串口初始化程序
这里我们用到了串口2我们初始化串口2。
void USART_Config_Init(void)
{USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate 38400;USART_InitStructure.USART_WordLength USART_WordLength_8b;USART_InitStructure.USART_StopBits USART_StopBits_1;USART_InitStructure.USART_Parity USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, USART_InitStructure);/* Enable USARTy Receive interrupts */USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);//使能空闲中断/* Enable the USART2 */USART_Cmd(USART2, ENABLE);delay_ms(10);//等待10ms
}
串口2接收中断回调函数
void USART2_IRQHandler(void)
{uint8_t temp;if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) ! RESET){ //防止溢出中断USART_ReceiveData(USART2); } if(USART_GetITStatus(USART2, USART_IT_RXNE) ! RESET){ //USART接收中断temp USART_ReceiveData(USART2);if(rx_index RXBUFF_SIZE){ //溢出不再接收数据return;}aRxBuffer[rx_index] temp;}if(USART_GetFlagStatus(USART2, USART_FLAG_IDLE) ! RESET){ //USART空闲中断USART_ReceiveData(USART2);RX_lenrx_index;memcpy(USART2_RX_BUF,aRxBuffer,RX_len);//把缓冲区的数据放入需要解析的数组rx_index0;}}GPS模块初始化
//配置UBLOX NEO-6的更新速率
//measrate:测量时间间隔单位为ms最少不能小于200ms5Hz
//reftime:参考时间0UTC Time1GPS Time一般设置为1
//返回值:0,发送成功;其他,发送失败.
uint8_t Ublox_Cfg_Rate(uint16_t measrate,uint8_t reftime)
{_ublox_cfg_rate *cfg_rate(_ublox_cfg_rate *)USART2_TX_BUF;if(measrate200)return 1; //小于200ms直接退出cfg_rate-header0X62B5; //cfg headercfg_rate-id0X0806; //cfg rate idcfg_rate-dlength6; //数据区长度为6个字节.cfg_rate-measratemeasrate;//脉冲间隔,uscfg_rate-navrate1; //导航速率周期固定为1cfg_rate-timerefreftime; //参考时间为GPS时间Ublox_CheckSum((uint8_t*)(cfg_rate-id),sizeof(_ublox_cfg_rate)-4,cfg_rate-cka,cfg_rate-ckb);HAL_UART_Transmit(USART2, (uint8_t *)USART2_TX_BUF, sizeof(_ublox_cfg_rate));return Ublox_Cfg_Ack_Check();
}
解析GPS接收到的信息
//NMEA 0183 协议解析后数据存放结构体
__packed typedef struct
{ uint8_t svnum; //可见卫星数nmea_slmsg slmsg[12]; //最多12颗卫星nmea_utc_time utc; //UTC时间uint32_t latitude; //纬度 分扩大100000倍,实际要除以100000uint8_t nshemi; //北纬/南纬,N:北纬;S:南纬 uint32_t longitude; //经度 分扩大100000倍,实际要除以100000uint8_t ewhemi; //东经/西经,E:东经;W:西经uint8_t gpssta; //GPS状态:0,未定位;1,非差分定位;2,差分定位;6,正在估算. uint8_t posslnum; //用于定位的卫星数,0~12.uint8_t possl[12]; //用于定位的卫星编号uint8_t fixmode; //定位类型:1,没有定位;2,2D定位;3,3D定位uint16_t pdop; //位置精度因子 0~500,对应实际值0~50.0uint16_t hdop; //水平精度因子 0~500,对应实际值0~50.0uint16_t vdop; //垂直精度因子 0~500,对应实际值0~50.0 int altitude; //海拔高度,放大了10倍,实际除以10.单位:0.1m uint16_t speed; //地面速率,放大了1000倍,实际除以10.单位:0.001公里/小时
}nmea_msg; //提取NMEA-0183信息
//gpsx:nmea信息结构体
//buf:接收到的GPS数据缓冲区首地址
void GPS_Analysis(nmea_msg *gpsx,uint8_t *buf)
{NMEA_GPGSV_Analysis(gpsx,buf); //GPGSV解析NMEA_GPGGA_Analysis(gpsx,buf); //GPGGA解析 NMEA_GPGSA_Analysis(gpsx,buf); //GPGSA解析NMEA_GPRMC_Analysis(gpsx,buf); //GPRMC解析NMEA_GPVTG_Analysis(gpsx,buf); //GPVTG解析
}显示GPS解析到的数据
//显示GPS定位信息
void Gps_Msg_Show(void)
{float tp; tpgpsx.longitude; sprintf((char *)dtbuf,:%.5f %1c,tp/100000,gpsx.ewhemi); //得到经度字符串OLED_ShowF16x16(2,1,13);//经OLED_ShowF16x16(2,3,14);//度OLED_ShowString(2,5,(char *)dtbuf);tpgpsx.latitude; sprintf((char *)dtbuf,:%.5f %1c,tp/100000,gpsx.nshemi); //得到纬度字符串OLED_ShowF16x16(3,1,15);//纬OLED_ShowF16x16(3,3,16);//度OLED_ShowString(3,5,(char *)dtbuf); if(gpsx.fixmode3) //定位状态{ gpsx.utc.hour gpsx.utc.hour 8; //已知的UTC时间转换成北京时间差8小时if(gpsx.utc.hour24){gpsx.utc.hour-24;}sprintf((char *)dtbuf,:%02d:%02d:%02d,gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //显示北京时间OLED_ShowF16x16(4,1,17);//时OLED_ShowF16x16(4,3,18);//间OLED_ShowString(4,5,(char *)dtbuf); }}
完整的工程代码
通过网盘分享的文件实时显示当前位置GPS信息.zip 链接: https://pan.baidu.com/s/1rIcEV_G6ukU4uVn44VBgMA?pwdgrtu 提取码: grtu
文章转载自: http://www.morning.jgcxh.cn.gov.cn.jgcxh.cn http://www.morning.rxkl.cn.gov.cn.rxkl.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.frcxx.cn.gov.cn.frcxx.cn http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.djpgc.cn.gov.cn.djpgc.cn http://www.morning.3jiax.cn.gov.cn.3jiax.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.lqgfm.cn.gov.cn.lqgfm.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.hblkq.cn.gov.cn.hblkq.cn http://www.morning.yqyhr.cn.gov.cn.yqyhr.cn http://www.morning.drqrl.cn.gov.cn.drqrl.cn http://www.morning.dncgb.cn.gov.cn.dncgb.cn http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.ghwdm.cn.gov.cn.ghwdm.cn http://www.morning.qggm.cn.gov.cn.qggm.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.kncrc.cn.gov.cn.kncrc.cn http://www.morning.zqkr.cn.gov.cn.zqkr.cn http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn http://www.morning.080203.cn.gov.cn.080203.cn http://www.morning.krhkb.cn.gov.cn.krhkb.cn http://www.morning.pljdy.cn.gov.cn.pljdy.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.hyxwh.cn.gov.cn.hyxwh.cn http://www.morning.jphxt.cn.gov.cn.jphxt.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn http://www.morning.nqpy.cn.gov.cn.nqpy.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.skksz.cn.gov.cn.skksz.cn http://www.morning.jfch.cn.gov.cn.jfch.cn http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn http://www.morning.tzlfc.cn.gov.cn.tzlfc.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.zrkws.cn.gov.cn.zrkws.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.pjzcp.cn.gov.cn.pjzcp.cn http://www.morning.tqbyw.cn.gov.cn.tqbyw.cn http://www.morning.zylzk.cn.gov.cn.zylzk.cn http://www.morning.hxfrd.cn.gov.cn.hxfrd.cn http://www.morning.bztzm.cn.gov.cn.bztzm.cn http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn http://www.morning.tkyxl.cn.gov.cn.tkyxl.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.fdfsh.cn.gov.cn.fdfsh.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.blbys.cn.gov.cn.blbys.cn http://www.morning.wscfl.cn.gov.cn.wscfl.cn http://www.morning.wqbfd.cn.gov.cn.wqbfd.cn http://www.morning.wphfl.cn.gov.cn.wphfl.cn http://www.morning.ptmgq.cn.gov.cn.ptmgq.cn http://www.morning.jfxdy.cn.gov.cn.jfxdy.cn http://www.morning.gfrtg.com.gov.cn.gfrtg.com http://www.morning.jnoegg.com.gov.cn.jnoegg.com http://www.morning.ptlwt.cn.gov.cn.ptlwt.cn http://www.morning.trzzm.cn.gov.cn.trzzm.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.xswrb.cn.gov.cn.xswrb.cn http://www.morning.xhqwm.cn.gov.cn.xhqwm.cn http://www.morning.hrdx.cn.gov.cn.hrdx.cn http://www.morning.lsssx.cn.gov.cn.lsssx.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.fkmyq.cn.gov.cn.fkmyq.cn http://www.morning.tfwsk.cn.gov.cn.tfwsk.cn http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.sdkaiyu.com.gov.cn.sdkaiyu.com http://www.morning.kxrhj.cn.gov.cn.kxrhj.cn http://www.morning.ptwrz.cn.gov.cn.ptwrz.cn http://www.morning.drspc.cn.gov.cn.drspc.cn http://www.morning.fphbz.cn.gov.cn.fphbz.cn