使用C进行串口通信

时间:2016-05-19 11:50:55

标签: c serial-port

我正在开发一个软件,我必须通过串口接收数据。我在规范模式下打开端口并将VEOL标志设置为 0X78 (十六进制)。我面临的问题是每次接收到字节值 0X0A 时读取都会退出。有人可以帮我解决这个问题,我希望读取阻塞直到我收到结束字节为 0X78 。这是我到目前为止编写的代码

struct termios tio;
char buf[255];

int fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY); 
if (fd <0) {
    perror(MODEMDEVICE);
    exit(−1); 
}

bzero(&tio, sizeof(tio));
tio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
tio.c_iflag = IGNPAR;
tio.c_oflag = 0;
tio.c_lflag = 1;
tio.c_cc[VEOL] = 0X78;

tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&tio);


int read=read(fd,buf,255);

printf("Number of bytes read is %d\n",read);

提前谢谢。

1 个答案:

答案 0 :(得分:0)

The manual page州:

  

VEOL(0,NUL)附加行尾字符(EOL)。认可                 设置ICANON时。

因此,它不会替换所有行尾字符,它只会增加一个,这意味着0xa仍处于活动状态。

请勿发送错误的数据,或将其过滤掉。