【问题标题】:Read some bytes via serial port通过串口读取一些字节
【发布时间】:2014-07-29 20:22:57
【问题描述】:

我无法通过串口读取字节 0x11 和 0x13。 来源:

    int fd; /* File descriptor for the port */
    fd = open(PORT_PATH, O_RDWR | O_NOCTTY);// ); | O_NDELAY
    if (fd == -1){//Could not open the port.
        fprintf(stderr, "open_port: Unable to open %s - %s\n", PORT_PATH, strerror(errno));
        return fd;
    }

    struct termios settings;
    tcgetattr(fd, &settings);
    cfsetispeed(&settings, B38400); // baud rate
    cfsetospeed(&settings, B38400); // baud rate
    settings.c_cflag &= ~PARENB; // no parity
    settings.c_cflag &= ~CSTOPB; // 1 stop bit
    settings.c_cflag &= ~CSIZE;
    settings.c_cflag &= ~CRTSCTS;
    settings.c_cflag |= (CS8 | CLOCAL | CREAD);
    settings.c_cc[VMIN] = 1;
    settings.c_cc[VTIME] = 0;
    tcflush(fd, TCIOFLUSH);
    tcsetattr(fd, TCSANOW, &settings);// apply the settings

    char data, rcv;
    data = 0x10;
    write(fd, &data, 1);
    read(fd, &rcv, 1);
    printf("rcv_data = 0x%02X\n", rcv);

    data = 0x12;
    write(fd, &data, 1);
    read(fd, &rcv, 1);
    printf("rcv_data = 0x%02X\n", rcv);

    data = 0x88;
    write(fd, &data, 1);
    read(fd, &rcv, 1);
    printf("rcv_data = 0x%02X\n", rcv);

    data = 0x13;
    write(fd, &data, 1);
    read(fd, &rcv, 1);
    printf("rcv_data = 0x%02X\n", rcv);

    data = 0x11;
    write(fd, &data, 1);
    read(fd, &rcv, 1);
    printf("rcv_data = 0x%02X\n", rcv);

    close(fd);

Tx 和 Rx 已连接。在控制台输出中:

rcv_data = 0x10
rcv_data = 0x12
rcv_data = 0x88

没有更多了。无法接收传输的字节 0x13。在示波器上我看到传输的 0x13,但我不明白为什么这个字节没有接收到。与 0x11 字节相同。其他字节没问题。

【问题讨论】:

    标签: serial-port 64-bit uart ubuntu-13.04


    【解决方案1】:

    0x110x13XON/XOFF flow control 字符(Control-QControl-S)。如果您希望能够发送和接收这些字符,则需要禁用 XON/XOFF 流控制,例如

    setting.c_iflag &= ~(IXOFF | IXON);
    

    【讨论】:

    • 很高兴它有帮助 - 如果它们对您有帮助,请记得点赞/接受答案。
    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多