我正在使用 QT 执行应用程序,以通过 rs-232 将我的 PC 与 8 位微控制器通信。我正在使用 QtSerialPort 库并且通信工作正常,但是每次我从 PC 写东西到 micro 并收到响应时,我必须关闭并打开串行端口,否则我无法继续通信.. 我的配置为: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);
}