我在windows下 用的虚拟机6.5.2, Linux用的是 Fedara 12
我先前已经把 QextSerialPort-1.1 这个类 扩充到 QT下了
这是我的 主文件 CheckComDialog.cpp
#include "ui_checkcomdialog.h"
#include "qextserialport.h"
CheckComDialog::CheckComDialog(QWidget *parent)
:QDialog(parent), ui(new Ui::CheckComDialog)
{
ui->setupUi(this);
connect(ui->checkButton,SIGNAL(clicked()),this,SLOT(checkcom()));
port = new QextSerialPort("/dev/ttyS0");
port->setBaudRate(BAUD115200);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
}
CheckComDialog::~CheckComDialog()
{
delete ui;
}
void CheckComDialog::checkcom()
{
QString s= "123";
QString msg="";
// 串口OPEN
port->open(QIODevice::ReadWrite);
//串口发送一个字符串
if(port->isOpen())
{ port->write(s.toAscii(),s.lengh());
//串口接收
char buff[1024];
int numBytes;
numBytes = port->bytesAvailable();
if(numBytes > 0)
{if(numBytes > 1024) numBytes = 1024;
int i = port->read(buff,numBytes);
buff = '\0';
msg = buff;
}
//比较判断
if(s.toAscii() == msg.toAscii())
ui->textBrowser->setText("com is ok!");
else
ui->textBrowser->setText("com is wrong.");
}
else
ui->textBrowser->setText("Can't open the COM!");
}
在ROOT用户下 运行 有时串口有时能收到 有时收不到,收不到时就是串口读不到,到numBytes = port->bytesAvailabl()时 numBytes=-1 , 郁闷。
请大家指教 谢谢!