打开串口后要重新设置一遍波特率,数据位,校验位等,否则这些都是默认的。
//连接串口
void MainWindow::on_openComn_clicked()
{
if( ui->openComn->text() == "关闭串口")
{
if( comn->isOpen() )
{
comn->close();
}
ui->openComn->setText("打开串口");
return;
}
QString comnArg = ui->comnArg->currentText();
//ui->status->setText(comnArg);
//COM1,9600,e
QStringList comnList = comnArg.split(",", QString::SkipEmptyParts);
// ui->status->setText(comnList[0] + "---" + comnList[1] +"---" + comnList[2] );
//设置COM口
comn->setPortName(comnList[0]);
comn->setPort( QSerialPortInfo(comnList[0]) );
//设置波特率
comn->setBaudRate(comnList[1].toULong());
//设置奇偶校验
// comn->setParity(QSerialPort::EvenParity);
comn->setParity(QSerialPort::EvenParity);
if( comnList[2] == tr("e") )
{
qDebug() << "校验位:" << comnList[2];
comn->setParity(QSerialPort::EvenParity);
}
else if( comnList[2] == tr("o") )
{
comn->setParity(QSerialPort::OddParity);
}
else if (comnList[2] == tr("n") )
{
comn->setParity(QSerialPort::NoParity);
}
else
{
QMessageBox::about(this,"串口错误","校验位错误");
}
comn->setDataBits(QSerialPort::Data8);
comn->setStopBits(QSerialPort::OneStop);
//打开串口,打开成功后要重新设置串口参数,否则都是默认的。。
if( comn->open(QIODevice::ReadWrite) )
{
ui->openComn->setText("关闭串口");
comn->setPortName(comnList[0]);
comn->setPort( QSerialPortInfo(comnList[0]) );
//设置波特率
comn->setBaudRate(comnList[1].toULong());
//设置奇偶校验
// comn->setParity(QSerialPort::EvenParity);
comn->setParity(QSerialPort::EvenParity);
if( comnList[2] == tr("e") )
{
qDebug() << "校验位:" << comnList[2];
comn->setParity(QSerialPort::EvenParity);
}
else if( comnList[2] == tr("o") )
{
comn->setParity(QSerialPort::OddParity);
}
else if (comnList[2] == tr("n") )
{
comn->setParity(QSerialPort::NoParity);
}
else
{
QMessageBox::about(this,"串口错误","校验位错误");
}
comn->setDataBits(QSerialPort::Data8);
comn->setStopBits(QSerialPort::OneStop);
qDebug() << "校验位" << comn->parity()
<<" 波特率" << comn->baudRate()
<< " com 口" << comn->portName();
QMessageBox::about(this,"串口","打开串口成功");
}
else
{
QMessageBox::about(this,"串口","打开串口失败");
}
}