#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