C 串行端口没有响应
我写了一个与串口通信的程序,使用termios,这个程序将以非阻塞模式读取串口,并在读取数据后将响应写入串口。如果没有从串行端口读取数据,程序将执行其他操作,在下一个循环中,程序将再次读取串行端口 现在的问题是,在有时消失后,也许几分钟,或者几个小时,串行端口不再响应我的程序。即使我执行echo'HB\n'>/dev/ttyUSB0(那么串口应该响应'HACK'),它也不再响应 我甚至不知道串口什么时候“死了”,我没有任何线索。。它“死”了 以下是我的配置:C 串行端口没有响应,c,serial-port,C,Serial Port,我写了一个与串口通信的程序,使用termios,这个程序将以非阻塞模式读取串口,并在读取数据后将响应写入串口。如果没有从串行端口读取数据,程序将执行其他操作,在下一个循环中,程序将再次读取串行端口 现在的问题是,在有时消失后,也许几分钟,或者几个小时,串行端口不再响应我的程序。即使我执行echo'HB\n'>/dev/ttyUSB0(那么串口应该响应'HACK'),它也不再响应 我甚至不知道串口什么时候“死了”,我没有任何线索。。它“死”了 以下是我的配置: /// set local mode
/// set local mode options
//tminfo.c_lflag |= ICANON;
tminfo.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
/// set control mode options
tminfo.c_cflag |= (CLOCAL | CREAD);
tminfo.c_cflag |= HUPCL;
// set hardware flow control
tminfo.c_cflag &= ~CRTSCTS;
// set how many bits in a character
tminfo.c_cflag &= ~CSIZE;
tminfo.c_cflag |= CS8;
// set parity mode (default to odd validation), this option (PARENB) will both enable input and output parity checking
tminfo.c_cflag &= ~PARENB; // we don't need prity checking now
/// set input mode options
// set input parity checking
tminfo.c_iflag &= ~INPCK;
tminfo.c_cflag &= ~CSTOPB;
/// set output mode options
tminfo.c_oflag &= ~OPOST;
tminfo.c_cc[VMIN] = 1;
tminfo.c_cc[VTIME] = 1;
/// set line speed, defaults to 38400bps, both for input and output
// this call will set both input and output speed
cfsetspeed(&tminfo, B38400);
在这种情况下很难调试串行文件。我真的搞不清楚到底是什么原因导致串行端口“死”在地球上。我几乎疯了
可能的原因是什么?任何帮助都将不胜感激
更新:
我已经在串口的另一端编写了一些代码,当它接收到“HB”时,它会响应“HACK”当串行通信出错时,如果没有正确的设备,问题通常很难调试。在调试无效之前,您应该确保是您的代码出错:使用
屏幕
、minicom
或甚至只使用`stdbuf-I0 hextdump/dev/ttyS0(或任何串行端口)查看串行端口,并确保正确接收数据。如果这样做有效的话,很可能是代码中的某些内容。但是我们需要看到它的其余部分。@Alexios感谢重播,当我的程序无法从串行端口读取数据时,我会打开两个终端,一个执行cat/dev/ttyUSB0
,另一个重复执行echo'HB\n'>/dev/ttyUSB0
,但cat/dev/ttyUSB0
也不打印任何内容。。PS:我已经在串口的另一端写了一些代码,当它收到“HB”时,它会响应“HACK”@Alexios那么,我的程序似乎导致了整个系统范围内的串口“死机”?但这怎么可能呢?我已经搜索了将近一周,但仍然没有找到任何想法…编程问题在这里是离题的,请继续提问。你需要提供更多的信息。包括再现问题的完整程序。