экстранное поведение последовательного порта с использованием Qt

Я выполняю приложение с QT для связи моего ПК с 8-битным микроконтроллером через RS-232. Я использую библиотеку QtSerialPort, и связь работает нормально, но каждый раз, когда я записываю что-то с ПК на микро и получаю ответ, мне приходится закрывать и открывать последовательный порт, или я не могу продолжить общение .. Мой Конфигурация: 10500 бит / с, 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);

}

0

Решение

Я просто оказался в точно такой же ситуации. Я застрял в рутине чтения. Попробуйте открыть порт в небуферизованном режиме.

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

Я нашел это только на одном компьютере, мне никогда не приходилось делать это раньше, но это может вытащить тебя из дыры.

0

Другие решения

Я исправил две мои проблемы (несмотря на то, что я не уверен в методах).

Для проблемы номер 1 (открывать и закрывать порт каждый раз, когда я хотел общаться), я просто добавил waitFoBytesWritten () в моем методе записи.

Для моей проблемы номер 2 (я только смог работать с портом 22), я изменил конфигурацию, и теперь я сначала обнаруживаю, какие порты доступны с помощью availablePorts () вместо того, чтобы заставить порт, который я хочу использовать. Теперь я могу подключить свое устройство к любому свободному порту, и это работает ..

0

По вопросам рекламы [email protected]