RichDonkey

GPS数据接收

      之前做GPS数据分析的时候,超级终端上一直没能显示数据,搞到我一度怀疑我是不是把开发板和GPS的连接弄错了,后来又怀疑是不是程序错了,经过不懈的搜索才发现确实是程序错了,不是逻辑错,而是端口的设置错了。

      程序中定义#define STTY_DEV "/dev/ttySAC0",一开始我对ttySAC的理解错误,以为是指PC机上的串口,就依然把它设为com0,试了之后还是结束不到数据,com0—4和所有波特率都试过一遍,发现是com0和波特率4800 OK,其他的都不行。不停的搜索,最后的最后终于让我发现了重点——

首先,ttySAC指的是开发板的串口,ttyS指的才是PC机上的 

第二,为什么不是com0而是com1呢?因为——开发板的默认终端控制是串口ttySAC0,所以都

当做命令被读取了。所以,只要把好端口设置成ttySAC1OK啦!(#define STTY_DEV "/dev/ttySAC1")

 

附上读取GPS数据的代码:

#include<errno.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

#include<termios.h>

#include<string.h>

 

#define STTY_DEV "/dev/ttySAC1"

#define BUFF_SIZE 512

 

int main(){

        int stty_fd,n;

        char buffer[BUFF_SIZE];

        struct termios opt;

 

        stty_fd=open(STTY_DEV,O_RDWR);

        if(-1==stty_fd){

                perror(" error!not this com1");

                return 0;

        }

        else

                printf("Open dev success,...and...waiting...setting!\n");

 

        tcgetattr(stty_fd,&opt);

        tcflush(stty_fd,TCIOFLUSH);

 

        cfsetispeed(&opt,B4800);

        cfsetospeed(&opt,B4800);

 

        opt.c_cflag &= ~CSIZE;

        opt.c_cflag |=CS8;

 

        opt.c_cflag &= ~PARENB;

        opt.c_iflag &= ~INPCK;

 

        opt.c_cflag &= ~CSTOPB;

 

        opt.c_cc[VTIME] =0;

        opt.c_cc[VMIN]=0;

 

        if(0!=tcsetattr(stty_fd,TCSANOW,&opt)){

                perror("com set error!!\n");

                return 0;

        }

        else

                printf("setting success!!");

        printf("GPS is staring.....!!Press crtl+c to quit\n");

        tcflush(stty_fd,TCIOFLUSH);

        while(1){

                n=read(stty_fd,buffer,BUFF_SIZE);

                buffer[n]='\0';

                printf("%s",buffer);

        }

 

        close(stty_fd);

        return 0;

}

posted on 2012-10-22 23:45  RichDonkey  阅读(416)  评论(0编辑  收藏  举报

导航