0

RS-232 を介して PC と 8 ビット マイクロコントローラーを通信するために、QT を使用してアプリを実行しています。私は QtSerialPort ライブラリを使用しており、通信は正常に機能していますが、PC からマイクロに何かを書き込んで応答を受信するたびに、シリアル ポートを閉じてから開く必要があります。そうしないと、通信を続行できません。構成は次のとおりです。10500 bps、8 ビット、1 ストップ、パリティなし、フロー制御なし。

ポートの設定と講義/書き込みに使用されるコードは次のとおりです。

bool DriverS::configure(int port, int baudRate)
{
    if(port!=22)
        return false;

     serialPort->setPortName("COM22");

 if (serialPort->open(QIODevice::ReadWrite)==true){

        if (!serialPort->setBaudRate(baudRate)) {
            return false ;
        }

        if (!serialPort->setDataBits(QSerialPort::Data8)) {
            return false ;
        }

        if (!serialPort->setParity(QSerialPort::NoParity)) {
            return false;
        }

        if (!serialPort->setStopBits(QSerialPort::OneStop)) {
            return false;
        }

        if (!serialPort->setFlowControl(QSerialPort::NoFlowControl)){
            return false;
            }
    };

    return true;
}



bool DriverS::read(QByteArray & rxData, int * size)
{

    Sleep(200); 
    *size = 0;
    if (serialPort->waitForReadyRead(TIMEOUT_SERIAL)) {
        rxData = serialPort->readAll();
        *size = rxData.size() ;

    if (!this->checkCRC(rxData))
        {
            qDebug()<< "Rx Checksum Error";
            return false;
        }

    return true;
    }
    qDebug()<< "Rx Timeout";
    return false;
}

bool DriverS::write(QByteArray txData)
{

    unsigned int chk = 0;
    int ret ;

    for(int i = 0;i<txData.size();i++)
    {
        chk+=txData.at(i);
    }

    txData.append(chk);
    ret = serialPort->write(txData);
    return (txData.size()==ret);

}
4

2 に答える 2

0

私はまったく同じ状況にいることに気づきました。私は読書ルーチンで立ち往生していました。ポートを非バッファ モードで開いてみてください。

port->open(QIODevice::ReadWrite | QIODevice::Unbuffered)

これを見つけたのは1台のコンピューターだけでした。これまでに行う必要はありませんでしたが、穴から抜け出すことができるかもしれません.

于 2014-02-02T15:28:35.803 に答える