之前做GPS数据分析的时候,超级终端上一直没能显示数据,搞到我一度怀疑我是不是把开发板和GPS的连接弄错了,后来又怀疑是不是程序错了,经过不懈的搜索才发现确实是程序错了,不是逻辑错,而是端口的设置错了。
程序中定义#define STTY_DEV "/dev/ttySAC0",一开始我对ttySAC的理解错误,以为是指PC机上的串口,就依然把它设为com0,试了之后还是结束不到数据,com0—4和所有波特率都试过一遍,发现是com0和波特率4800 OK,其他的都不行。不停的搜索,最后的最后终于让我发现了重点——
首先,ttySAC指的是开发板的串口,ttyS指的才是PC机上的
第二,为什么不是com0而是com1呢?因为——开发板的默认终端控制是串口ttySAC0,所以都
当做命令被读取了。所以,只要把好端口设置成ttySAC1就OK啦!(#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;
}