使用RS232的C程序仅在启动minicom时有效

时间:2014-07-01 20:14:20

标签: c linux serial-port

我正在使用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);
}

1 个答案:

答案 0 :(得分:0)

对于非规范模式,您需要使用宏cfmakeraw来简化所需的各种设置。否则,程序将执行阻塞读取,直到检测到终止字符(如0x0A)为止,该字符可能永远不会发送。插入此行

cfmakeraw(&options);// make raw

在行后

tcgetattr(fd, &options);