• 3298阅读
  • 1回复

[提问]combbox设置serialport波特率 没反应 [复制链接]

上一主题 下一主题
离线harold00124
 

只看楼主 倒序阅读 楼主  发表于: 2016-11-09
不好意思又来请教了
小弟在与其他模拟器对传测试自己做的
发现很奇怪的状况
在接收端的模拟器在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)
{

}
离线bran_lee

只看该作者 1楼 发表于: 2016-11-09
Setcom(BuatRate->currentIndex(),
           DataBits->currentIndex(),
           Party->currentText(),
           StopBit->currentText());
4条评分好评度+1贡献值+1金钱+10威望+1
harold00124 好评度 +1 您真是小弟的贵人!!改成currentText().toInt()後就能正常执行了!! 2016-11-09
harold00124 贡献值 +1 您真是小弟的贵人!!改成currentText().toInt()後就能正常执行了!! 2016-11-09
harold00124 威望 +1 您真是小弟的贵人!!改成currentText().toInt()後就能正常执行了!! 2016-11-09
harold00124 金钱 +10 您真是小弟的贵人!!改成currentText().toInt()後就能正常执行了!! 2016-11-09
当你只有锤子时,你看什么都像是钉子!
快速回复
限100 字节
 
上一个 下一个