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位停止位,无数据流控制,那么你的端口是不是设置成这样的?
#2
恩。是这样的设置,WINDOWS下没问题的。
#1
n!=0,说明上面有个端口设置不成功,你上面的设置是8位数据位,偶校验,1位停止位,无数据流控制,那么你的端口是不是设置成这样的?
#2
恩。是这样的设置,WINDOWS下没问题的。