【转】GPS串口调试程序
2011-05-09 14:46
253 查看
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>
#define COM_OPEN "/dev/ttyS0"
#define BUFFER_SIZE 100
int set_com_config(int fd,int baud_rate,int data_bits,char parity,int stop_bits)
{
struct termios new_cfg,old_cfg;
int speed;
if(tcgetattr(fd,&old_cfg))
{
perror("tcgetattr err!/n");
return -1;
}
new_cfg = old_cfg;
cfmakeraw(&new_cfg);//set to raw 方式
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;
default:
case 115200:
{
speed = B115200;
}
break;
}
cfsetispeed(&new_cfg,speed);
cfsetospeed(&new_cfg,speed);
switch (data_bits)
{
default:
case 8:
{
new_cfg.c_cflag |= CS8;
}
break;
case 7:
{
new_cfg.c_cflag |= CS7;
}
break;
}
switch (parity)
{
default:
case 'n':
case 'N':
{
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_iflag &= ~INPCK;
}
break;
case 'o':
case 'O':
{
new_cfg.c_cflag |=(PARODD |PARENB);
new_cfg.c_iflag |=INPCK;
}
break;
case 'e':
case 'E':
{
new_cfg.c_cflag |= PARENB;
new_cfg.c_cflag &= ~PARODD;
new_cfg.c_iflag |= INPCK;
}
break;
case 's':
case 'S':
{
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_cflag &= ~CSTOPB;
}
break;
}
switch (stop_bits)
{
default:
case 1:
new_cfg.c_cflag &= ~CSTOPB;
break;
case 2:
new_cfg.c_cflag |=CSTOPB;
break;
}
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 1;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&new_cfg)) != 0)
{
perror("tcsetattr err!/n");
return -1;
}
return 0;
}
int open_port(int com_port)
{
int fd;
fd = open (COM_OPEN,O_RDWR|O_NOCTTY|O_NDELAY);
if(fd<0)
{
perror("open serial port err!/n");
return -1;
}
if(fcntl(fd, F_SETFL, 0)<0)
{
perror("fcntl err!/n");
return -1;
}
if(isatty(fd) ==0)
{
perror("this is not a terminal device!/n");
return -1;
}
return fd;
}
int main()
{
int fd;
int speed;
char buff[BUFFER_SIZE];
struct termios new_cfg,old_cfg;
fd = open (COM_OPEN,O_RDWR|O_NOCTTY|O_NDELAY);//|O_NOCTTY|O_NDELAY
if(fd<0)
{
perror("open serial port err!/n");
return -1;
}else
{
printf("open serial port !/n");
}
if (set_com_config(fd, 4800, 8, 'N', 1)<0)
{
perror("set_com_config/n");
return -1;
}
while(1)
{
memset(buff,0, BUFFER_SIZE*sizeof(char));
if(read(fd,buff,BUFFER_SIZE)>0)
{
printf("the received words are :%s/n",buff);
}
sleep(1);
}
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yiyaaixuexi/archive/2011/05/08/6403979.aspx
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>
#define COM_OPEN "/dev/ttyS0"
#define BUFFER_SIZE 100
int set_com_config(int fd,int baud_rate,int data_bits,char parity,int stop_bits)
{
struct termios new_cfg,old_cfg;
int speed;
if(tcgetattr(fd,&old_cfg))
{
perror("tcgetattr err!/n");
return -1;
}
new_cfg = old_cfg;
cfmakeraw(&new_cfg);//set to raw 方式
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;
default:
case 115200:
{
speed = B115200;
}
break;
}
cfsetispeed(&new_cfg,speed);
cfsetospeed(&new_cfg,speed);
switch (data_bits)
{
default:
case 8:
{
new_cfg.c_cflag |= CS8;
}
break;
case 7:
{
new_cfg.c_cflag |= CS7;
}
break;
}
switch (parity)
{
default:
case 'n':
case 'N':
{
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_iflag &= ~INPCK;
}
break;
case 'o':
case 'O':
{
new_cfg.c_cflag |=(PARODD |PARENB);
new_cfg.c_iflag |=INPCK;
}
break;
case 'e':
case 'E':
{
new_cfg.c_cflag |= PARENB;
new_cfg.c_cflag &= ~PARODD;
new_cfg.c_iflag |= INPCK;
}
break;
case 's':
case 'S':
{
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_cflag &= ~CSTOPB;
}
break;
}
switch (stop_bits)
{
default:
case 1:
new_cfg.c_cflag &= ~CSTOPB;
break;
case 2:
new_cfg.c_cflag |=CSTOPB;
break;
}
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 1;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&new_cfg)) != 0)
{
perror("tcsetattr err!/n");
return -1;
}
return 0;
}
int open_port(int com_port)
{
int fd;
fd = open (COM_OPEN,O_RDWR|O_NOCTTY|O_NDELAY);
if(fd<0)
{
perror("open serial port err!/n");
return -1;
}
if(fcntl(fd, F_SETFL, 0)<0)
{
perror("fcntl err!/n");
return -1;
}
if(isatty(fd) ==0)
{
perror("this is not a terminal device!/n");
return -1;
}
return fd;
}
int main()
{
int fd;
int speed;
char buff[BUFFER_SIZE];
struct termios new_cfg,old_cfg;
fd = open (COM_OPEN,O_RDWR|O_NOCTTY|O_NDELAY);//|O_NOCTTY|O_NDELAY
if(fd<0)
{
perror("open serial port err!/n");
return -1;
}else
{
printf("open serial port !/n");
}
if (set_com_config(fd, 4800, 8, 'N', 1)<0)
{
perror("set_com_config/n");
return -1;
}
while(1)
{
memset(buff,0, BUFFER_SIZE*sizeof(char));
if(read(fd,buff,BUFFER_SIZE)>0)
{
printf("the received words are :%s/n",buff);
}
sleep(1);
}
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yiyaaixuexi/archive/2011/05/08/6403979.aspx
相关文章推荐
- 串口调试程序v1.0
- 串口调试程序软件GraphdCommDebugger V1.0 与使用手册
- 如何在WinCE模拟器中调试串口程序
- 串口调试精灵的使用和串口程序调试技巧
- Java程序与串口的通信实现及调试
- OMAPL138/AM1808 修改调试串口为UART1后通过CCSV4下载程序的全过程(原创)
- Delphi 使用 SPcomm 调试串口程序出现总是在程序断开的时候,才发送指令的问题。
- GPS服务端解析程序编写日记之--vs2010中多种语言开发及调试的若干注意事项
- 如何在WinCE模拟器中调试串口程序
- 用C#在一台电脑上面做串口调试的程序代码
- STM8L152C6的串口调试程序(带库)
- 凌阳SPCE3200精简开发板:解决附带实验程序中printf无法输出串口调试日志信息的问题
- 树莓派3 GPS 串口调试。公式调整
- 一个汇编写得GPS串口接收数据程序
- 串口调试程序,看界面布局
- 不用串口线调试串口通信程序
- SerialMonitor:C#写的串口调试程序
- vb.net 编写的简易串口调试程序
- 如何在WinCE模拟器中调试串口程序(两台设备、一台设备的两种情况下的串口调试)
- 高通801开发笔记一 通过串口终端调试和adb调试程序的运行结果不同