不好意思又来请教了
小弟在与
其他模拟器对传测试自己做的
发现很奇怪的状况
在接收端的模拟器在9600的波特率时可以正常接收跟发送(但是我程式的波特率设置是故意
错误的 在2400)
window.open('http://www.qtcn.org/bbs/attachment/Mon_1611/17_176460_ace13de91e2f06b.jpg?237');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" > 刻意把我写的发送端设置为115200,接收端在9600还是正常接收
然后接收端跟发送端都同样调到19200 出现错误输出
一直比对之后我发现我的程式好像无视我的combbox设置 一直维持在9600的波特率
只要作为比对的软体提高或者降低波特率 我的程式发送跟接收都会
出错乱码 请问一下到底我是哪里有写错 已经被搞迷胡了
代码如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <ctype.h>
#include <qvalidator.h>
QSerialPort *serial;
QSerialPort *serialrx;
QByteArray Rx;
MainWindow::MainWindow(
QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->comboBox->addItem(info.portName());//添加
串口名
ui->comboBox_6->addItem(info.portName());
}
serial=new QSerialPort(this);
serialrx=new QSerialPort(this);
BuatRate=ui->comboBox_2;
DataBits=ui->comboBox_3;
Party=ui->comboBox_4;
StopBit=ui->comboBox_5;
connect(serialrx,SIGNAL(readyRead()),this,SLOT(portreaddate()));
QRegExp regExp("^[0-9A-F][0-9A-F][0-9A-F][0-9A-F]$");
ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));
}
MainWindow::~MainWindow()
{
delete ui;
serial->close();
serialrx->close();
}
void MainWindow::portreaddate(){//資料接收、打印
Rx=serialrx->readAll();
ui->textEdit->setText(ui->textEdit->toPlainText()+Rx);
}
void MainWindow::on_pushButton_clicked()//傳入設定值並呼叫設定函式
{
Setcom(BuatRate->currentIndex(),
DataBits->currentIndex(),
Party->currentText(),
StopBit->currentText());
}
void MainWindow::on_pushButton_2_clicked()//資料發送、打印
{\
serial->write(ui->lineEdit->text().toStdString().data());
ui->textEdit_2->setText(ui->textEdit_2->toPlainText()+
ui->lineEdit->text().toStdString().data()+
'\n');
}
void MainWindow::on_pushButton_3_clicked()//清除並重置抓取port
{
ui->comboBox->clear();
ui->comboBox_6->clear();
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->comboBox->addItem(info.portName());//添加串口名
ui->comboBox_6->addItem(info.portName());
}
}
void MainWindow::on_pushButton_4_clicked()//清理輸出入文字與關閉port口
{
serial->close();
serialrx->close();
ui->textEdit->clear();
ui->textEdit_2->clear();
}
void MainWindow::Setcom(int iBautRate,int iDataBits,QString chParity,QString chStopBits)//Tx Rx port設定函式
{
serial->clear();
serialrx->clear();
ui->textEdit->clear();
ui->textEdit_2->clear();
serial->close();
serialrx->close();
serial->setPortName(ui->comboBox->currentText());
serialrx->setPortName(ui->comboBox_6->currentText());
serial->open(QIODevice::WriteOnly);
serialrx->open(QIODevice::ReadOnly);
switch (iBautRate) {
case 2400:
serial->setBaudRate(QSerialPort::Baud2400);
serialrx->setBaudRate(QSerialPort::Baud2400);
break;
case 4800:
serial->setBaudRate(QSerialPort::Baud4800);
serialrx->setBaudRate(QSerialPort::Baud4800);
break;
case 9600:
serial->setBaudRate(QSerialPort::Baud9600);
serialrx->setBaudRate(QSerialPort::Baud9600);
break;
case 19200:
serial->setBaudRate(QSerialPort::Baud19200);
serialrx->setBaudRate(QSerialPort::Baud19200);
break;
case 38400:
serial->setBaudRate(QSerialPort::Baud38400);
serialrx->setBaudRate(QSerialPort::Baud38400);
break;
case 57600:
serial->setBaudRate(QSerialPort::Baud57600);
serialrx->setBaudRate(QSerialPort::Baud57600);
break;
case 115200:
serial->setBaudRate(QSerialPort::Baud115200);
serialrx->setBaudRate(QSerialPort::Baud115200);
break;
}
switch (iDataBits) {
case 8:
serial->setDataBits(QSerialPort::Data8);
serialrx->setDataBits(QSerialPort::Data8);
break;
case 7:
serial->setDataBits(QSerialPort::Data7);
serialrx->setDataBits(QSerialPort::Data7);
break;
case 6:
serial->setDataBits(QSerialPort::Data6);
serialrx->setDataBits(QSerialPort::Data6);
break;
case 5:
serial->setDataBits(QSerialPort::Data5);
serialrx->setDataBits(QSerialPort::Data5);
break;}
if(chParity=="None") {
serial->setParity(QSerialPort::NoParity);
serialrx->setParity(QSerialPort::NoParity);
}
else if(chParity=="Odd"){
serial->setParity(QSerialPort::OddParity);
serialrx->setParity(QSerialPort::OddParity);
}
else if(chParity=="Even"){
serial->setParity(QSerialPort::EvenParity);
serialrx->setParity(QSerialPort::EvenParity);
}
else if(chParity=="Mark"){
serial->setParity(QSerialPort::MarkParity);
serialrx->setParity(QSerialPort::MarkParity);
}
else if(chParity=="Space"){
serial->setParity(QSerialPort::SpaceParity);
serialrx->setParity(QSerialPort::SpaceParity);
}
if(chStopBits=="OnStop"){
serial->setStopBits(QSerialPort::OneStop);
serialrx->setStopBits(QSerialPort::OneStop);
}
else if (chStopBits=="OneAndHalfStop"){
serial->setStopBits(QSerialPort::OneAndHalfStop);
serialrx->setStopBits(QSerialPort::OneAndHalfStop);
}
else if(chStopBits=="TwoStop") {
serial->setStopBits(QSerialPort::TwoStop);
serialrx->setStopBits(QSerialPort::TwoStop);
}
}
void MainWindow::on_comboBox_6_activated(const
QString &arg1)
{
}
void MainWindow::on_comboBox_activated(const QString &arg1)
{
}