我正在BeagleBone Black上测试UART应用程序,当我尝试从设备读取内容时,它将永远阻塞。写工作正常。我连接了一个逻辑分析仪来检查线路,我可以看到正在发送和接收的数据,但是它总是在读取时阻塞。
int main() {
int res;
struct termios tty;
memset(&tty, 0, sizeof(tty));
int serial = open("/dev/ser2", O_RDWR | O_NOCTTY);
if (!isatty(serial))
return false;
// Setting the Baud rate
cfsetispeed(&tty, B9600);
cfsetospeed(&tty, B9600);
// 8N1 Mode
tty.c_cflag &= ~PARENB;
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8;
tty.c_cflag &= ~CRTSCTS;
tty.c_cflag |= CREAD | CLOCAL;
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
tty.c_iflag &= ~(ICANON | ECHO | ECHOE | ECHONL | ISIG);
tty.c_oflag &= ~OPOST;
tty.c_cc[VMIN] = 1;
tty.c_cc[VTIME] = 0;
if ((tcsetattr(serial, TCSANOW, &tty)) != 0)
return false;
if ((tcflush(serial, TCIOFLUSH)) != 0)
return false;
while (1)
{
uint8_t wrBuff[3] = {0xAA, 0xBB, 0xCC};
uint8_t res = write(serial, wrBuff, 3);
printf("Write = %d", res);
res = read(serial, wrBuff, 3);
printf("Read = %d", res);
}
return 0;
}
我尝试了以下评论中提到的针对incorrect flag set的修复程序,但这不能解决问题。