我在 Ubuntu 12 系统上使用 C 从串行端口获取数据时遇到了一些问题。
我正在使用 open() 和 read(),这是我的代码:
Fd = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY);
if (Fd == -1) {
printf("Could not open serial port: %s\n", strerror(errno));
return 1;
}
fcntl(Fd, F_SETFL, 0);
char buf;
while (1) {
read(Fd, &buf, 1);
printf("%c", buf);
}
但是 - 我的串行设备设置为发送“Boot.\r\n”后跟“To send:”,但是当我连接设备并启动程序时,我只得到第一行(“Boot.”)然后不再。如果我启动 gtkterm/picocom,我会立即得到两条线。
我还尝试使用以下方法为 SIGTERM 添加信号处理程序以正确关闭端口:
void signal_callback_handler(int signum) {
printf("Caught SIGTERM\n");
close(Fd);
exit(signum);
}
和
signal(SIGINT, signal_callback_handler);
使用它,当我按下 CTRL-C 时,我得到以下信息:
Boot.
^CTo send: Caught SIGTERM
我也尝试过先设置端口,使用:
struct termios port_settings; // structure to store the port settings in
cfsetispeed(&port_settings, B115200); // set baud rates
cfsetospeed(&port_settings, B115200);
port_settings.c_cflag &= ~PARENB; // set no parity, stop bits, data bits
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;
tcsetattr(Fd, TCSANOW, &port_settings);// apply the settings to the port
这只会使情况变得更糟-我收到垃圾邮件�:(
我会非常感谢任何帮助,在此先感谢!