找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3192|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32F103單片機(jī)通過藍(lán)牙發(fā)送獲取的GPS信息到手機(jī)上 主函數(shù)怎么寫

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:508887 發(fā)表于 2019-4-11 09:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于STM32F103單片機(jī)通過藍(lán)牙發(fā)送獲取的GPS信息到手機(jī)上 主函數(shù)怎么寫??各位大佬用 的藍(lán)牙是HC-06  GPS是  ATK-S1216

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"                           
  5. #include "lcd.h"  
  6. #include "key.h"     
  7. #include "usmart.h"
  8. #include "gps.h"
  9. #include "string.h"               
  10. #include "usart2.h"
  11. #include "hc06.h"



  12. u8 USART1_TX_BUF[USART2_MAX_RECV_LEN];                                         //串口1,發(fā)送緩存區(qū)
  13. nmea_msg gpsx;                                                                                         //GPS信息
  14. __align(4) u8 dtbuf[50];                                                                   //打印緩存器
  15. const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "};        //fix mode字符串
  16.          
  17. //顯示GPS定位信息

  18. //void HC06_Role_Show(void)
  19. //{
  20. //        if(HC06_Get_Role()==1)LCD_ShowString(30,140,200,16,16,"ROLE:Master");        //主機(jī)
  21. //        else LCD_ShowString(30,140,200,16,16,"ROLE:Slave ");                                         //從機(jī)
  22. //}
  23. ////顯示ATK-hc06模塊的連接狀態(tài)
  24. //void HC06_Sta_Show(void)
  25. //{                                                                                                
  26. //        if(HC06_STATE)LCD_ShowString(120,140,120,16,16,"STA:Connected ");                        //連接成功
  27. //        else LCD_ShowString(120,140,120,16,16,"STA:Disconnect");                                 //未連接                                 
  28. //}

  29. //void Gps_Msg_Show(void)
  30. //{
  31. //         float tp;                  
  32. //        POINT_COLOR=BLUE;           
  33. //        tp=gpsx.longitude;           
  34. //        sprintf((char *)dtbuf,"Longitude:%.5f %1c   ",tp/=100000,gpsx.ewhemi);        //得到經(jīng)度字符串
  35. //         LCD_ShowString(30,120,200,16,16,dtbuf);                    
  36. //        tp=gpsx.latitude;           
  37. //        sprintf((char *)dtbuf,"Latitude:%.5f %1c   ",tp/=100000,gpsx.nshemi);        //得到緯度字符串
  38. //         LCD_ShowString(30,140,200,16,16,dtbuf);                  
  39. //        tp=gpsx.altitude;           
  40. //         sprintf((char *)dtbuf,"Altitude:%.1fm     ",tp/=10);                                    //得到高度字符串
  41. //         LCD_ShowString(30,160,200,16,16,dtbuf);                                    
  42. //        tp=gpsx.speed;           
  43. //         sprintf((char *)dtbuf,"Speed:%.3fkm/h     ",tp/=1000);                                    //得到速度字符串         
  44. //         LCD_ShowString(30,180,200,16,16,dtbuf);                                             
  45. //        if(gpsx.fixmode<=3)                                                                                                                //定位狀態(tài)
  46. //        {  
  47. //                sprintf((char *)dtbuf,"Fix Mode:%s",fixmode_tbl[gpsx.fixmode]);        
  48. //          LCD_ShowString(30,200,200,16,16,dtbuf);                           
  49. //        }                    
  50. //        sprintf((char *)dtbuf,"GPS+BD Valid satellite:%02d",gpsx.posslnum);                         //用于定位的GPS衛(wèi)星數(shù)
  51. //         LCD_ShowString(30,220,200,16,16,dtbuf);            
  52. //        sprintf((char *)dtbuf,"GPS Visible satellite:%02d",gpsx.svnum%100);                         //可見GPS衛(wèi)星數(shù)
  53. //         LCD_ShowString(30,240,200,16,16,dtbuf);
  54. //        
  55. //        sprintf((char *)dtbuf,"BD Visible satellite:%02d",gpsx.beidou_svnum%100);                         //可見北斗衛(wèi)星數(shù)
  56. //         LCD_ShowString(30,260,200,16,16,dtbuf);
  57. //        
  58. //        sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d   ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date);        //顯示UTC日期
  59. //        LCD_ShowString(30,280,200,16,16,dtbuf);                    
  60. //        sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d   ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec);        //顯示UTC時(shí)間
  61. //  LCD_ShowString(30,300,200,16,16,dtbuf);                  
  62. //}
  63. int main(void)
  64. {
  65.         u8 t;
  66.         u8 sendmask=0;
  67.         u8 sendcnt=0;
  68.         u8 sendbuf[20];         
  69. // u8 reclen=0;  
  70.   u16 i,rxlen;
  71.         u16 lenx;
  72.         u8 key=0XFF;
  73.         u8 upload=0;
  74.         POINT_COLOR=RED;         
  75.         delay_init();                     //延時(shí)函數(shù)初始化
  76.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)         
  77.         uart_init(115200);                 //串口初始化為9600        
  78.         USART2_Init(38400);  //初始化串口2波特率為115200
  79.         LCD_Init();                                //初始化液晶
  80.         LED_Init();                 //LED初始化         
  81.         KEY_Init();                                //按鍵初始化
  82.         usmart_dev.init(72);        //usmart初始化             CHUAN KOU

  83.          


  84.         if(SkyTra_Cfg_Rate(5)!=0)        //設(shè)置定位信息更新速度為5Hz,順便判斷GPS模塊是否在位.
  85.         {
  86.            //LCD_ShowString(30,120,200,16,16,"S1216F8-BD Setting...");
  87.                 do
  88.                 {
  89.                         USART2_Init(9600);                        //初始化串口3波特率為9600
  90.                   SkyTra_Cfg_Prt(3);                        //重新設(shè)置模塊的波特率為38400
  91.                         USART2_Init(38400);                        //初始化串口3波特率為38400
  92.       key=SkyTra_Cfg_Tp(100000);        //脈沖寬度為100ms
  93.                 }
  94.                 while(SkyTra_Cfg_Rate(5)!=0&&key!=0);//配置SkyTraF8-BD的更新速率為5Hz
  95.           //LCD_ShowString(30,120,200,16,16,"S1216F8-BD Set Done!!");
  96.                 delay_ms(500);
  97.                 //LCD_Fill(30,120,30+200,120+16,WHITE);//清除顯示
  98.         }
  99.         while(1)
  100.         {               
  101.                 delay_ms(1);
  102.                 if(USART2_RX_STA&0X8000)                //接收到一次數(shù)據(jù)了
  103.                 {
  104.                         rxlen=USART2_RX_STA&0X7FFF;        //得到數(shù)據(jù)長(zhǎng)度
  105.                         for(i=0;i<rxlen;i++)USART1_TX_BUF[i]=USART2_RX_BUF[i];           
  106.                          USART2_RX_STA=0;                           //啟動(dòng)下一次接收
  107.                         USART1_TX_BUF[i]=0;                        //自動(dòng)添加結(jié)束符
  108.                         GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//分析字符串
  109.                         //Gps_Msg_Show();                                //顯示信息        
  110.                         if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//發(fā)送接收到的數(shù)據(jù)到串口1
  111.                  }
  112. //                key=KEY_Scan(0);
  113. //                if(key==KEY0_PRES)
  114. //                {
  115. //                        upload=!upload;
  116. //                        POINT_COLOR=RED;
  117. //                        if(upload)LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:ON ");
  118. //                        else LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF");
  119. //                 }
  120.                 if((lenx%500)==0)
  121.                         LED0=!LED0;
  122.                 lenx++;        
  123.         }

  124.                 while(HC06_Init())        //初始化ATK-hc06模塊  
  125.         {
  126. //                LCD_ShowString(30,90,200,16,16,"ATK-hc06 Error!");
  127. //                delay_ms(500);
  128. //                LCD_ShowString(30,90,200,16,16,"Please Check!!!");
  129.                         POINT_COLOR=BLUE;
  130.                   delay_ms(100);
  131.         }                                                                                               
  132. //          LCD_ShowString(30,90,200,16,16,"WK_UP:ROLE KEY0:SEND/STOP");  
  133. //          LCD_ShowString(30,110,200,16,16,"ATK-hc06 Standby!");  
  134. //          LCD_ShowString(30,160,200,16,16,"Send:");        
  135. //          LCD_ShowString(30,180,200,16,16,"Receive:");        
  136. //    HC06_Role_Show();         
  137.          while(1)
  138.         {               
  139. //                key=KEY_Scan(0);
  140. //                if(key==WKUP_PRES)                                                //切換模塊主從設(shè)置
  141. //                {
  142. //                           key=HC06_Get_Role();
  143. //                        if(key!=0XFF)
  144. //                        {
  145. //                                key=!key;                                          //狀態(tài)取反           
  146. //                                if(key==0)HC06_Set_Cmd("AT+ROLE=0");
  147. //                                else HC06_Set_Cmd("AT+ROLE=1");
  148. //                                HC06_Role_Show();
  149. //                                HC06_Set_Cmd("AT+RESET");        //復(fù)位ATK-hc06模塊
  150. //                        }
  151. //                }else

  152.         if(key==KEY0_PRES)
  153.                 {
  154.                         sendmask=!sendmask;                                //發(fā)送/停止發(fā)送           
  155.                         if(sendmask==0)LCD_Fill(30+40,160,240,160+16,WHITE);//清除顯示
  156.                 }else delay_ms(10);           
  157.                 if(t==50)
  158.                 {
  159.                         if(sendmask)                                        //定時(shí)發(fā)送
  160.                         {
  161.                                 sprintf((char*)sendbuf,"ALIENTEK hc06 %d\r\n",sendcnt);
  162.                                   LCD_ShowString(30+40,160,200,16,16,sendbuf);        //顯示發(fā)送數(shù)據(jù)        
  163.                                 u2_printf("ALIENTEK hc06 %d\r\n",sendcnt);                //發(fā)送到藍(lán)牙模塊
  164.                                 sendcnt++;
  165.                                 if(sendcnt>99)sendcnt=0;
  166.                         }
  167. //                        HC06_Sta_Show();            
  168. //                        t=0;
  169. //                        LED0=!LED0;              
  170. //                }         
  171. //                if(USART2_RX_STA&0X8000)                        //接收到一次數(shù)據(jù)了
  172. //                {
  173. //                        LCD_Fill(30,200,240,320,WHITE);        //清除顯示
  174. //                         reclen=USART2_RX_STA&0X7FFF;        //得到數(shù)據(jù)長(zhǎng)度
  175. //                          USART2_RX_BUF[reclen]=0;                 //加入結(jié)束符
  176. //                        if(reclen==9||reclen==8)                 //控制DS1檢測(cè)
  177. //                        {
  178. //                                if(strcmp((const char*)USART2_RX_BUF,"+LED1 ON")==0)LED1=0;        //打開LED1
  179. //                                if(strcmp((const char*)USART2_RX_BUF,"+LED1 OFF")==0)LED1=1;//關(guān)閉LED1
  180. //                        }
  181. //                         LCD_ShowString(30,200,209,119,16,USART2_RX_BUF);//顯示接收到的數(shù)據(jù)
  182. //                         USART2_RX_STA=0;         
  183. //                }                                                                                                                                                                        
  184. //                t++;        
  185.         }                                                                                            
  186. }        
  187. }
  188.         
復(fù)制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:943849 發(fā)表于 2021-6-24 11:33 | 只看該作者
請(qǐng)問這個(gè)項(xiàng)目代碼你實(shí)現(xiàn)了嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表