从这里我复制了串口配置的例子:
tcgetattr (serialfd, &tty);
cfsetospeed(&tty,B115200);
cfsetispeed(&tty,B115200);
tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
tty.c_iflag &= ~IGNBRK;
tty.c_lflag = 0;
tty.c_oflag = 0;
tty.c_cc[VMIN] = 0;
tty.c_cc[VTIME] = 5;
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
tty.c_cflag |= (CLOCAL | CREAD);
tty.c_cflag &= ~(PARENB | PARODD);
tty.c_cflag |= 0;
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CRTSCTS;
我的实际代码是这样的:
char buf[100];
write(serialfd, "PING", strlen("PING"));
fsync(serialfd);
while (1)
{
read(serialfd, buf, sizeof(buf));
printf("length: %d\n", strlen(buf));
}
在这种情况下,它会length: 6
无限打印而不会停止。当我更改tty.c_cc[VMIN] = 1
并且tty.c_cc[VTIME] = 0
它不读取时。(它阻塞read()
)
我正在使用带有 USB 到串行转换器的 debian 6.0.5。我这样打开串口:
serialfd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_SYNC);