嗨,我正在写一个小代码来控制Linux上USB到串行端口转换芯片FT232的DTR和RTS线(Mint Linux 13 maya,x86)。
我已经成功地用termios编写了读写ft232芯片数据的代码。
现在我想控制dtr和rts行,所以我使用ioctl()调用来设置和清除dtr和rts行。
这是密码

    #include <stdio.h>
    #include <fcntl.h>       /* File Control Definitions           */
    #include <termios.h>     /* POSIX Terminal Control Definitions */
    #include <unistd.h>      /* UNIX Standard Definitions          */
    #include <errno.h>       /* ERROR Number Definitions           */
    #include <sys/ioctl.h>   /* ioctl()                            */

    main(void)
    {
        int fd;     /*File Descriptor*/
        int status;

        fd = open("/dev/ttyUSB0",O_RDWR | O_NOCTTY ); //Opening the serial port

        ioctl(fd,TIOCMGET,&status); /* GET the State of MODEM bits in Status */
        status |= TIOCM_RTS;        // Set the RTS pin
        ioctl(fd, TIOCMSET, status);

        getchar(); //To view the change in status pins before closing the port

        close(fd);
     }

代码在gcc上编译成功,没有任何错误。我已经将两个led连接到ft232的rts和dtr线路上。由于rts和dtr线路是反向的,设置rts将使led熄灭。
连接到RTS的LED和DTR初始开启。
使用“sudo./serial”运行代码时
RTS和DTR LED都熄灭,而不仅仅是RTS(按编码状态=tiocm_RTS;)
在getChar()之后打开。
为什么DTR和RTS线一起走低?

我不能用tiocm嫒cd,tiocm嫒dtr等来改变其它调制解调器线路,如ri,dcd,dcd,dtr等?

最佳答案

对于TIOCMSET命令,发送最后一个参数作为参考:

ioctl(fd, TIOCMSET, &status);

10-04 13:22