串口操作代码
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
#define HOST_PORT 1
int set_port(int fd, int baud_rate, int data_bits, char parity, int stop_bits)
{
struct termios newtio,oldtio;
if( tcgetattr(fd,&oldtio) != 0)
{
perror("Setup Serial 1");
return -1;
}
bzero(&newtio,sizeof(newtio));
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
/* set baud_speed*/
switch(baud_rate)
{
case 2400:
cfsetispeed(&newtio,B2400);
cfsetospeed(&newtio,B2400);
break;
case 4800:
cfsetispeed(&newtio,B4800);
cfsetospeed(&newtio,B4800);
break;
case 9600:
cfsetispeed(&newtio,B9600);
cfsetospeed(&newtio,B9600);
break;
case 19200:
cfsetispeed(&newtio,B19200);
cfsetospeed(&newtio,B19200);
break;
case 38400:
cfsetispeed(&newtio,B38400);
cfsetospeed(&newtio,B38400);
break;
default:
case 115200:
cfsetispeed(&newtio,B115200);
cfsetospeed(&newtio,B115200);
break;
}
/* set data_bits upon 7 or 8*/
switch(data_bits)
{
case 7:
newtio.c_cflag |= CS7;
break;
default :
case 8:
newtio.c_cflag |= CS8;
break;
}
/**/
switch(parity)
{
default:
case 'N':
case 'n':
{
newtio.c_cflag &= ~PARENB;
newtio.c_iflag &= ~INPCK;
}
break;
case 'o':
case 'O':
{
newtio.c_cflag |= (PARODD | PARENB);
newtio.c_iflag |= INPCK;
}
break;
case 'e':
case 'E':
truncated c语言 {
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
newtio.c_iflag |= INPCK;
}
break;
case 's':
case 'S':
{
newtio.c_cflag &= ~PARENB;
newtio.c_cflag &= ~CSTOPB;
}
break;
}
/*set stop_bits 1 or 2 */
switch(stop_bits)
{
default:
case 1:
{
newtio.c_cflag &= ~CSTOPB;
}
break;
case 2:
{
newtio.c_cflag |= CSTOPB;
}
break;
}
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&newtio)) != 0)
{
perror("com set error");
return -1;
}
printf("set UART done!\n");
return 0;
}
int open_port(int com_port)
{
int fd = 0;
char *dev[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2","/dev/ttyS3",
"/dev/ttyS4", "/dev/ttyS5", "/dev/ttyS6"};
if((com_port < 0) || (com_port > 6) )
{
printf("the port is out range");
return -1;
}
fd = open(dev[com_port], O_RDWR | O_NOCTTY | O_NDELAY);
if(fd < 0)
{
perror("open serial port");
return -1;
}
if(fcntl(fd, F_SETFL,0) < 0)
{
perror("fcntl F_SETFL");
return -1;
}
if(isatty(fd) == 0)
{
perror("isatty is not a terminal device");
return -1;
}
return fd;
}
int main(void)
{
int fd = 0;
char BUFFER[BUFFER_SIZE] = {0};
if((fd = open_port(HOST_PORT)) == -1)
{
perror("open port");
return -1;
}
if(set_port(fd,115200,8,'N',1)== -1)
{
perror("set port");
return -1;
}
do
{
printf("Input some words:\n");
memset(buffer,0,BUFFER_SIZE);
if(fgets(buffer,BUFFER_SIZE,stdin) == NULL)
{
perror("fgets");
break;
}
write(fd,buffer,strlen(buffer));
}while(strncmp(buffer,"quit",4));
close(fd);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论