雙串口+GPS讀取代碼
0.png (45.51 KB, 下載次數: 59)
下載附件
2017-6-16 19:22 上傳
單片機源程序如下:
- #include "sys.h"
- #include "usart.h"
- #include "usart2.h"
- #include "delay.h"
- #include "led.h"
- #include "key.h"
- #include "exti.h"
- #include "wdg.h"
- #include "timer.h"
-
- #include "string.h"
- #include "gps.h"
- #include "md2503s.h"
- u8 USART1_TX_BUF[USART2_MAX_RECV_LEN]; //串口1,發送緩存區
- nmea_msg gpsx; //GPS信息
- __align(4) u8 dtbuf[64]; //打印緩存器
- const char *fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "}; //fix mode字符串
- //顯示GPS定位信息
- void Gps_Msg_Show(void);
-
- int main(void)
- {
- u16 i,rxlen;
- u16 lenx;
-
- Stm32_Clock_Init(9); //系統時鐘設置
- delay_init(72); //延時初始化
- uart_init(72, 115200); //串口1初始化為115200
- USART2_Init(36, 115200); //串口2初始化為115200
- LED_Init(); //初始化與LED連接的硬件接口,其中MD2503S模塊PWRKEY開機GPIO的初始化
-
- //先關閉GPS
- MD2503S_close_GPS();
-
- //啟動MD2503S模塊
- MD2503S_poweron();
-
- //=============================查詢模塊的基本信息==============================
- #if 1
- //先關閉GPS
- MD2503S_close_GPS();
-
- //再查詢版本號
- MD2503S_print_version();
- //再查詢CSQ
- MD2503S_print_CSQ();
-
- #if 0
- //設置IMEI號
- MD2503S_set_IMEI("863851234568714");
- #endif
-
- //查詢IMEI號
- MD2503S_print_IMEI();
-
- #endif
-
-
- //開啟GPS搜星
- MD2503S_open_GPS();
-
- //======================切換定位方式================================
- #if 1
- delay_ms(1000);
-
- /*
- enum GNSS_strategy
- {
- GNSS_GPS,
- GNSS_GLONASS,
- GNSS_BEIDOU,
- GNSS_GPS_BEIDOU,
- GNSS_GPS_GLONASS,
- GNSS_GPS_BEIDOU_GLONASS,
- };
- */
- MD2503S_set_GNSS_strategy(GNSS_GPS_BEIDOU);
-
-
- #endif
-
- while(1)
- {
- delay_ms(10);
- if(is_uart2_recv_data()) //接收到一次數據了
- {
- rxlen = uart2_recv_datalen(); //得到數據長度
-
- for(i=0;i<rxlen;i++)
- USART1_TX_BUF[i] = USART2_RX_BUF[i];
-
- uart2_start_recv(); //啟動下一次接收
-
- USART1_TX_BUF[i] = 0; //自動添加結束符
-
- GPS_Analysis(&gpsx,(u8 *)USART1_TX_BUF); //分析字符串
- Gps_Msg_Show(); //顯示信息
-
- //DEBUG("\r\n%s\r\n",USART1_TX_BUF); //發送接收到的數據到串口1
- }
-
- if((lenx%500)==0)LED1=!LED1;
- lenx++;
- }
- }
- //顯示GPS定位信息
- void Gps_Msg_Show(void)
- {
- float tp;
- tp=gpsx.longitude;
- sprintf((char *)dtbuf,"Longitude:%.5f %1c ",tp/=100000,gpsx.ewhemi); //得到經度字符串
- DEBUG("%s", dtbuf);
-
- tp=gpsx.latitude;
- sprintf((char *)dtbuf,"Latitude:%.5f %1c ",tp/=100000,gpsx.nshemi); //得到緯度字符串
- DEBUG("%s", dtbuf);
-
- tp=gpsx.altitude;
- sprintf((char *)dtbuf,"Altitude:%.1fm ",tp/=10); //得到高度字符串
- DEBUG("%s", dtbuf);
-
- tp=gpsx.speed;
- sprintf((char *)dtbuf,"Speed:%.3fkm/h ",tp/=1000); //得到速度字符串
- DEBUG("%s", dtbuf);
-
- if(gpsx.fixmode <= 3) //定位狀態
- {
- sprintf((char *)dtbuf,"Fix Mode:%s ",fixmode_tbl[gpsx.fixmode]);
- DEBUG("%s", dtbuf);
- }
-
- sprintf((char *)dtbuf,"Valid satellite:%02d ",gpsx.posslnum); //用于定位的衛星數
- DEBUG("%s", dtbuf);
-
- sprintf((char *)dtbuf,"Visible satellite:%02d ",gpsx.svnum%100); //可見衛星數
- DEBUG("%s", dtbuf);
-
- sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //顯示UTC日期
- DEBUG("%s", dtbuf);
-
- sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //顯示UTC時間
- DEBUG("%s", dtbuf);
- DEBUG("\r\n\r\n");
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
04.雙串口 GPS讀取.zip
(545.74 KB, 下載次數: 49)
2017-6-16 15:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|