資源簡介
Linux下用qt寫的串口通信類,希望對大家有幫助
代碼片段和文件信息
int?MyMainWindow?::?setserial(?int?nSpeed?int?nBits?char?nEvent?int?nStop?)
{
struct?termios?oldtionewtio;
//保存現有串口參數設置
if??(?tcgetattr(?fd&oldtio)??!=??0)?{?
msg?->?setText(?tr(“SetupSerial?1“)?);
return?-1;
}
bzero(?&newtio?sizeof(?newtio?)?);
//設置字符串大小
newtio.c_cflag??|=??CLOCAL?|?CREAD;?
newtio.c_cflag?&=?~CSIZE;?
newtio.c_iflag?&=?~(ICRNL?|?IXON);
//設置數據位
switch(?nBits?)
{
case?7:
newtio.c_cflag?|=?CS7;
break;
case?8:
newtio.c_cflag?|=?CS8;
break;
}
//設置奇偶校驗位
switch(?nEvent?)
{
case?‘O‘:
newtio.c_cflag?|=?PARENB;
newtio.c_cflag?|=?PARODD;
newtio.c_iflag?|=?(INPCK?|?ISTRIP);
break;
case?‘E‘:?
newtio.c_iflag?|=?(INPCK?|?ISTRIP);
newtio.c_cflag?|=?PARENB;
newtio.c_cflag?&=?~PARODD;
break;
case?‘N‘:??
newtio.c_cflag?&=?~PARENB;
break;
}
//設置波特率
switch(?nSpeed?)
{
case?2400:
cfsetispeed(&newtio?B2400);
cfsetospeed(&newtio?B2400);
break;
case?4800:
cfsetispeed(&newtio?B4800);
cfsetospeed(&newtio?B4800);
break;
case?9600:
cfsetispeed(&newtio?B9600);
cfsetospeed(&newtio?B9600);
break;
case?115200:
cfsetispeed(&newtio?B115200);
cfsetospeed(&newtio?B115200);
break;
case?460800:
cfsetispeed(&newtio?B460800);
cfsetospeed(&newtio?B460800);
break;
default:
cfsetispeed(&newtio?B9600);
cfsetospeed(&newtio?B9600);
break;
}
//設置停止位
if(?nStop?==?1?)
newtio.c_cflag?&=??~CSTOPB;
else?if?(?nStop?==?2?)
newtio.c_cflag?|=??CSTOPB;
//設置等待時間和最小接收字符
newtio.c_cc[VTIME]??=?0;
newtio.c_cc[V
評論
共有 條評論