我正在使用RS232通讯程序。该程序到目前为止工作正常,但我需要在启动程序之前启动并退出minicom(并最终关闭硬件流控制)。
以下是我用来初始化端口的代码。我已经看过了 http://www.cmrr.umn.edu/~strupp/serial.html 并尝试了不同的其他标志/选项,例如明确设置硬件流控制关闭,但它没有帮助。
int open_port(void)
{
int fd;
#ifdef DEBUG
printf("open port\n");
#endif
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open_port: Unable to open /dev/ttyS0");
}
else
{
if (port_set==0){
port_set=1;
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSANOW, &options);
}
}
return (fd);
}
答案 0 :(得分:0)
对于非规范模式,您需要使用宏cfmakeraw来简化所需的各种设置。否则,程序将执行阻塞读取,直到检测到终止字符(如0x0A)为止,该字符可能永远不会发送。插入此行
cfmakeraw(&options);// make raw
在行后
tcgetattr(fd, &options);