📄 linux-serial.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
main()
{
int fd;
int i;
int len;
int n=0;
char read_buf[256];
char write_buf[256];
struct termios opt;
fd = open("/dev/tts/0", O_RDWR | O_NOCTTY); //默认为阻塞读方式
if(fd == -1)
perror("open serial 0\n");
tcgetattr(fd, &opt);
cfsetispeed(&opt, B9600);
cfsetospeed(&opt, B9600);
if(tcsetattr(fd, TCSANOW, &opt) != 0 )
{ perror("tcsetattr error");
return -1;
}
opt.c_cflag &=~CSIZE;
opt.c_cflag |= CS8;
opt.c_cflag &=~CSTOPB;
opt.c_cflag &=~PARENB;
opt.c_cflag &=~INPCK;
opt.c_cflag |= (CLOCAL | CREAD);
opt.c_lflag &=~(ICANON | ECHO | ECHOE | ISIG);
opt.c_oflag &=~OPOST;
opt.c_iflag &=~ICRNL;
opt.c_iflag &=~INLCR;
opt.c_cc[VTIME] = 150;
opt.c_cc[VMIN] = 1;
tcflush(fd, TCIOFLUSH);
printf("configure complete\n");
if(tcsetattr(fd, TCSANOW, &opt) != 0)
{
perror("serial error");
return -1;
}
printf("start send and receive data\n");
while(1)
{
n = 0;
len = 0;
bzero(read_buf,sizeof read_buf);
bzero(write_buf,sizeof write_buf);
while( (n = read(fd, read_buf, 14)) > 0 )
{
for(i=len; i<(len+n); i++)
{
write_buf[i] = read_buf[i-len];
}
len += n;
if(len == 14) //读完全部14个数据就结束
break;
}
for(i=0; i<len; i++)
printf("%d ",write_buf[i]);
n = write(fd, write_buf, len);
printf("write %d chars\n",n);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -