linux串口通信,tcsetattr总是返回 no such value

时间:2022-08-25 17:56:55
偶校验,8,1,2400波特率的设置过程:
int CXyComm::Open(void)
{
    try
    {
        h_Dev = open(m_PortName, O_RDWR|O_NOCTTY|O_NDELAY);
    }
    catch(...)
    {
        h_Dev = -1;
    }
//这里返回22: h_Dev = 22
    if (h_Dev > 0)
    {
        struct termios newtio;
        tcgetattr(h_Dev, &newtio);
        bzero(&newtio, sizeof(newtio));
        //newtio.c_cflag |= CLOCAL | CREAD;

        //cfsetispeed(&newtio, m_Baud);
        //cfsetospeed(&newtio, m_Baud);
        cfsetispeed(&newtio, B2400);
        cfsetospeed(&newtio, B2400);

        //setting   c_cflag
        newtio.c_cflag   &=~CSIZE;   
        newtio.c_cflag |= CS8; //8个数据位

        //check bit
        newtio.c_cflag |= PARENB;    // set parity enable enable
        newtio.c_cflag &= ~PARODD;   // not ODD
  
        //stop bit
        newtio.c_cflag &= ~CSTOPB;  //1 STOP

        //stop ioctrl
        //newtio.c_cflag &= ~(IXON|IXOFF);//
        newtio.c_cflag &= ~CRTSCTS;


        /*newtio.c_cc[VTIME] = 0;
        newtio.c_cc[VMIN] = 0;
        newtio.c_cflag |= (CLOCAL|CREAD);
        newtio.c_oflag|= OPOST;
        newtio.c_iflag &=~(IXON|IXOFF|IXANY);*/


        //tcflush(h_Dev, TCIFLUSH);
        //tcflush(h_Dev, TCIOFLUSH);
        int n = 123;
        n = tcsetattr(h_Dev, TCSANOW, &newtio); //观察n, 显示no such value
        if (n != 0)
        {
           perror("SetupSerial 3");  //总是进入到这里
           return -1;
         }
        //tcsetattr(h_Dev, TCSANOW, &newtio);

    }
    return h_Dev;
}

串口TX和RX短接。
耗了几个小时了,串口总是无法通。
MINICOM总是offline。
没辙了。

2 个解决方案

#1


n!=0,说明上面有个端口设置不成功,你上面的设置是8位数据位,偶校验,1位停止位,无数据流控制,那么你的端口是不是设置成这样的?
linux串口通信,tcsetattr总是返回 no such value

#2


恩。是这样的设置,WINDOWS下没问题的。

#1


n!=0,说明上面有个端口设置不成功,你上面的设置是8位数据位,偶校验,1位停止位,无数据流控制,那么你的端口是不是设置成这样的?
linux串口通信,tcsetattr总是返回 no such value

#2


恩。是这样的设置,WINDOWS下没问题的。