精华内容
下载资源
问答
  • GPS模块
    千次阅读
    2020-03-16 21:53:29

    GPS模块的使用

    GPS代码结构

    GPS模块的使用主要代码分为3部分:
    1. 设置串口
    2. 读取数据
    3. 解析数据
    

    串口的设置

    代码

    int set_com_config(int fd,int baud_rate,int data_bits,char parity,int stop_bits)  
    {  
        struct termios new_cfg,old_cfg;  //termios是串口中很重要的结构体
        int speed;  
        //保存并测试现有串口参数设置,在这里如果串口号出错,会有相关的出错信息  
          
        if(tcgetattr(fd,&old_cfg)!=0)  //获取终端参数
        {  
            perror("tcgetattr");  
            return -1;  
        }  
         tcflush(fd, TCIOFLUSH);   //清空输入与输出缓冲区
        new_cfg=old_cfg;           
        cfmakeraw(&new_cfg);       //配置为原始模式  
        new_cfg.c_cflag&=~CSIZE;   //屏蔽字符大小为
      
        //设置波特率  
        switch(baud_rate)  
        {  
            case 2400:  
            {  
                speed = B2400;  
                break;  
            }  
            case 4800:  
            {  
                speed = B4800;  
                break;  
            }  
            case 9600:  
            {  
                speed = B9600;  
                break;  
            }  
            case 19200:  
            {  
                speed = B19200;  
                break;  
            }  
            case 38400:  
            {  
                speed = B38400;  
                break;  
            }  
            case 115200:  
            {  
                speed = B115200;  
                break;   
            }  
              
      
        }  
        cfsetispeed(&new_cfg,speed); //设置波特率 
        cfsetospeed(&new_cfg,speed);  
        //设置数据位  
      
        switch(data_bits)  
        {  
            case 7:  
            {  
                new_cfg.c_cflag|=CS7;  
                break;  
            }  
              
            case 8:  
            {  
                new_cfg.c_cflag|=CS8;  
                break;  
            }  
              
        }  
      
        //设置停止位  
        switch(stop_bits)  
        {  
            case 1:  
            {  
                new_cfg.c_cflag &=~CSTOPB; //设置停止位数为一位
                break;  
            }  
      
            case 2:  
            {  
                new_cfg.c_cflag |=CSTOPB;  //设置停止位数为两位
                break;  
            }  
              
              
        }  
      
        //设置奇偶校验位  
        switch(parity)  
        {  
            case 'o':  
            case 'O':  
            {  
                new_cfg.c_cflag|=(PARODD|PARENB);  
                new_cfg.c_iflag|=(INPCK |ISTRIP);  
                break;  
            }  
            case 'e':  
            case 'E':  
            {  
                new_cfg.c_cflag |=PARENB;  
                new_cfg.c_cflag &=~PARODD;  
                new_cfg.c_iflag |=(INPCK | ISTRIP);  
                break;  
            }  
            case 's':  
            case 'S':  
            {  
                new_cfg.c_cflag &=~PARENB;  
                new_cfg.c_cflag &=~CSTOPB;  
                break;  
            }  
              
            case 'n':  
            case 'N':  
            {  
                new_cfg.c_cflag &=~PARENB;  //无奇偶校验位
                new_cfg.c_iflag &=~INPCK;   //不进行奇偶校验
                break;  
            }  
              
        }  
      
        new_cfg.c_cc[VTIME] =10;  //VTIME定义等待的时间,单位是百毫秒
        new_cfg.c_cc[VMIN] =5;    //VMIN定义了要求等待的最小字节数,
                                 //  这个字节数可能为0
        //处理未接收字符  
         tcflush(fd,TCIFLUSH);            //清空输入缓冲区
           
        if((tcsetattr(fd,TCSANOW,&new_cfg))!=0)  //应用新终端设置
        {  
            perror("tcsetattr");  
            return -1;  
        }  
          
        return 0;  
    } 
    

    部分解释

    1. 串口设置有一个很重要的结构体termios。
      这个链接有助于理解termios结构体:
    2. 要理解原始模式。
    3. 做的笔记
    tcgettattr用于获取终端的相关参数
    tcsettattr用于设置终端参数
    
    tcflush用于清空输入、输出缓冲区
    TCIFLUSHU、TCOFLUSH和TCIOFLUSH,分别代表输入缓冲区、输出缓冲区和输入输
    出缓冲区
    

    读取数据

    代码

    void read_data(int fd)  
    {  
        char buffer[BUFF_SIZE],dest[1024];     
        char array[10]="$GPRMC";  
        int  res,i=0,j=0,k;  
        int data=1,len=0;  
        memset(dest,0,sizeof(dest));  //清空数组
      do  
    {      
         memset(buffer,0,sizeof(buffer)); //清空数组 
            if(res=read(fd,buffer,1)>0)   //每次读一个字节
            {             
                strcat(dest,buffer); //将字符串有效部分连接在一起 
                if(buffer[0]=='\n')  
                {  
                    i=0;  
                    if(strncmp(dest,array,6)==0) //比较两个字符串,相同则返回0 
                    {                 
                            printf("%s",dest);  
                            len=strlen(dest);    //计算长度
                            for(k=0;k<len;k++)  
                            {  
                                GPS_resolve_GPRMC(dest[k]);//数据解码  
                            }         
                                SectionID=0;  
                                  
                            print_info();        //打印数据
                    }  
                    bzero(dest,sizeof(dest));    //将前n个字节清零
                }  
                      
            }  
    }while(1);  
        close(fd);  
      
    }  
    

    部分笔记

    strcat函数:将两个字符串有效部分连接在一起
    strncmp函数:比较两个字符串,相同则返回0 
    strlen函数:计算长度
    

    解析数据

    代码

    void GPS_resolve_GPRMC(char data)  
    {     
        if(data==',')  
        {  
            ++SectionID;  
            i=0;  
        }  
        else  
        {  
            switch(SectionID)  
            {  
                case 1:        
                        GPS_DATA.GPS_time[i++]=data;          
                        if(i==2 || i==5)  
                        {         
                            GPS_DATA.GPS_time[i++]=':';       
                        }                 
                        GPS_DATA.GPS_time[8]='\0';  
                    break;  
                case 2:  
                    if(data=='A')  
                        GPS_DATA.GPS_sv='>';  
                    else  
                        GPS_DATA.GPS_sv='<';  
                    break;  
                case 3://3158.4608  
                        GPS_DATA.GPS_wd[++i]=data;    
                        GPS_DATA.GPS_wd[12]='\0';                     
                    break;  
                      
                case 4:  
                    if(data=='N')  
                        GPS_DATA.GPS_wd[0]='N';  
                    else if(data=='S')  
                        GPS_DATA.GPS_wd[0]='S';  
                  
                    break;  
                case 5: 
                      
                        GPS_DATA.GPS_jd[++i]=data;    
                        GPS_DATA.GPS_jd[12]='\0';  
                    break;  
                      
                case 6:  
                    if(data=='E')  
                        GPS_DATA.GPS_jd[0]='E';  
                    else if(data=='W')  
                        GPS_DATA.GPS_jd[0]='W';  
                      
                    break;  
                case 7: 
                        GPS_DATA.GPS_speed[i++]=data;  
                        GPS_DATA.GPS_speed[4]='\0';                       
                    break;  
                case 9:
                        GPS_DATA.GPS_date[i++]=data;      
                        if(i==2 || i==5)                          
                        {  
                            GPS_DATA.GPS_date[i++]='-';  
                        }                                 
                        GPS_DATA.GPS_date[8]='\0';                    
                    break;  
            }  
        }         
      
    }  
    

    笔记

    总结

    1. 代码主要就这三个函数。
    2. 这里的读取数据的代码虽然比较长,但是经过我的测试,比一些博主的要好一点。
      读取的数据比较完整。
    3. 也有用sscanf函数进行数据解析的,其实看个人喜好吧,功能都差不多,我比较喜欢这种明了的。
    更多相关内容
  • 这块GPS模块是2009年推出的,降低了GPS模块的功耗,具备智能化功率管理功能,延长了电池寿命。同时NEO6模块中捕获引擎的相关数量拓展到两百万个以上,在提高微弱信号捕获能力的同事,缩短了首次定位时间。 UART接口:...
  • 本项目介绍的GPS模块为NEO-7M ,为NEO-6M的升级版,更稳定,信号更好。该NEO-7M是一个低功耗主芯片的超小外形GPS接收模组,该产品采用了新一代U-blox芯片,超高灵敏度,具备全方位功能,能满足专业定位的严格眼球。 ...
  • 科沃兹gps模块驱动.ZIP

    2019-05-20 15:34:54
    科沃兹gps模块驱动 vk162/vk172,单驱动,科沃兹中配破解安装gps模块驱动,内部有教程,补充:驱动放好后,第一次重启后能定位成功,然后重启后就定位不了的,请下载链接:...本人修改,支持热插拔,比超人GPS好用,...
  • GPS模块NEO-6M模块软硬件技术资料+STM32单片机软件工程源码: 1-原理图_尺寸图 2-开发板配套例程 3-配套软件 4-官方文档 5-NMEA0183解码库源码 WF-NEO-6M与各开发板引脚连接说明 GPS单位及纠偏.pdf WF-NEO-6M模块...
  • GPS模块51单片机例程

    2020-05-05 20:19:05
    GPS模块的51单片机例程,包含GPS模块的安装驱动、GPS模块原理图、GPS测试工具和51单片机例程。
  • GPS模块原理图.rar

    2019-09-10 15:20:14
    GPS模块原理图 GPS模块原理图
  • GPS模块驱动,手册
  • 【正点原子】北斗GPS模块ATK-1218-BD相关资料下载(免费、免积分) 内涵:相关stm31单片机程序,用户手册,上位机软件,串口助手,芯片数据手册,常见问题,模块使用说明,等其他相关资料。定位精度卖家说是2.5米。...
  • ATK-NEO-6M GPS模块单片机单码上位机代码
  • ATK-NEO-6M GPS模块技术资料(硬件参考设计原理图+AD封装库+软件源码工程+应用技术文档) 1,ATK-NEO-6M GPS模块原理图 2,程序源码 3,配套软件 4,NEO-6M GPS模组官方资料 ATK-NEO-6M GPS模块使用说明(战舰V2&Mini...
  • GPS模块源码及资料

    2018-07-22 19:33:53
    GPS模块的文档及相关源码资料,希望对有需要的人有所帮助
  • gps模块原理图

    2018-11-29 17:22:02
    gps模块原理图
  • 单片机与GPS模块通信

    2018-11-09 15:07:05
    该程序主要包含两方面的内同,一个是使用单片机与GPS模块进行通信,另一方面将定位所得的字符数据处理成数值。
  • 芯片stc89c52串口通信利用atgm336h来收集位置信息
  • 好的研发工程师不仅会设计方案,更会合理运用GPS模块、了解各种GPS模块并合理运用,也是现在无线模块设计必备的技能。下面小编分享一些GPS模块的基本要求:  1、良好的接收灵敏度  接收灵敏度就是...
  • GPS模块的STM32单片机例程,包含GPS模块的安装驱动、GPS模块原理图、GPS测试工具和STM32单片机例程。
  • 外置GPS模块驱动

    2018-04-10 20:34:32
    电脑外置GPS模块驱动,支持winxp,win7,win10系统,带有测试程序
  • GPS模块NEO-6M资料

    2021-04-06 20:46:50
    https://blog.csdn.net/qq_46020744/article/details/115469984?spm=1001.2014.3001.5502 如果有积分还请支持下,以上提供了网盘链接
  • stm32单片机NEO-6M GPS模块stm32单片机NEO-6M GPS模块stm32单片机NEO-6M GPS模块
  • gps 模块程序

    2019-05-05 13:08:35
    GPS模块测试程序,51单片机,测试程序。行业标准癿25*25*4MM高灵敏度GPS天线 ,UART / TTL, 232可选接口 ,采用KDS 0.5PPM高精度 TCXO ,支持AssistNow Online和AssistNow Offline等A-GPS服务
  • 2,ATK-NEO-6M GPS模块.zip

    2020-07-17 11:54:48
    通过串口1连接ATK-NEO-6M GPS模块,然后通过液晶显示GPS信息,包括精度、纬度、高 度、速度、用于定位的卫星数、可见卫星数、UTC时间等信息。 硬件连接: STM32开发板-->ATK-NEO-6M GPS模块 PA9 -->RXD PA10-->TXD ...
  • stm32f407zgt6单片机的gps数据处理源码
  • 用的单片机是stm32f103c8t6,GPS模块是NEO-M8N模块,屏幕用的是SPI总线的0.96寸OLED显示屏,可以显示经度纬度,卫星授时,海拔,寻星数等数据。也可在本代码上继续添加功能。
  • 移柯GPS模块单片机源码,软件已量产可用,代码包括硬件配置,GPS数据解析完整代码,核心代码在l76l76c.cl76c.h两个文件里
  • 通过串口连接 GPS模块,然后通过液晶可显示GPS信息,包括精度、纬度、高度、速度、用于定位的卫星数、可见卫星数、UTC时间等信息。
  • A-GPS定位效能再升級 A-GPS定位效能再升級 | | |新通訊 2008 年 8 月號 90 期 | |文.蔡金源 | |[pic] | |全球衛星定位系統(GPS)的應用愈來愈普及,如個人導航裝置(PND)就已是3C賣場中的熱門產 | |品,而愈來...
  • 开车不认识路没关系,有车载导航,车载导航具有GPS全球卫星定位系统功能,分分钟规划好行车...SKYLAB已为多家车载导航厂家提供过定位方案及GPS模块。本篇就由SKYLAB君就来跟各位说说车载导航里GPS模块选型的那些事。
  • STM32F103C+GPS模块 MT2503 主板PDF原理图PCB+AD集成封装库 PCB封装如下: Component Count : 17 Component Name ----------------------------------------------- 0603C 0603R ANT_PND_S ANT _GPS_25*25*4 ANT _...
  • 来自瑞士的全球定位系统(GPS)接收器技术供应商u-blox AG日前推出了NEO-4S GPS模块。该模块把高灵敏度、超低功耗以及一个USB端口整合在一个12.2毫米x16毫米的微型封装中。该模块的-156 dBm SuperSense跟踪灵敏度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,068
精华内容 12,827
关键字:

gps模块