2013-12-14 5 views
2

Я пытаюсь подключить микроконтроллер с моим настольным ПК через последовательный кабель USB. ОС моего настольного ПК - Ubuntu 13.10. Последовательный кабель USB - TTL-232R-3V3 (FTDI).QSerialPort не может открыть «/ dev/ttyUSB0» на Ubuntu

Вот мой исходный код. При запуске программы он заканчивается сбоем. (В этом случае, «Сбой» был напечатан на консоли.)

#include <QCoreApplication> 
#include <QtSerialPort/QtSerialPort> 
#include <QtSerialPort/QSerialPortInfo> 

QT_USE_NAMESPACE 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    // Example use QSerialPortInfo 
    QSerialPort serial("/dev/ttyUSB0"); 
    if (serial.open(QIODevice::ReadWrite)){ 
     qDebug() << "Pass\n"; 
     serial.close(); 
    } else { 
     qDebug() << "Fail\n"; 
    } 

    return a.exec(); 
} 

Согласно this article, после заявления должны быть добавлены в файл .pro.

QT += serialport 

Если последовательный кабель USB подключен, то он распознается как "/ DEV/ttyUSB0" на Ubuntu. Кажется, что хорошо работает.

$dmesg | grep ttyUSB 
>>[ 27.653383] usb 6-1: FTDI USB Serial Device converter now attached to ttyUSB0 

$ls -la | grep ttyUSB 
>> crw-rw---- 1 root dialout 188, 0 12月 14 17:30 ttyUSB0 

Для того, чтобы избежать разрешений проблемы, мое имя пользователя добавляется DialOut группы gpasswd команды. В результате я могу общаться с последовательным USB-устройством в терминальном программном обеспечении.

Но я не могу решить проблему QSerialPort. У кого-нибудь есть идеи? Любая помощь будет оценена по достоинству.

Заранее благодарен!

+0

Проверьте serial.error() и serial.errorString(). Возможно, вам также придется сначала установить свойства, такие как скорость передачи. –

+0

@FrankOsterfeld Благодаря вашему совету, я понял причину проблемы. serial.error() возвращает 2, seria.errorString() возвращает «устройство или ресурс, занятый при попытке открыть». Возможно, зомби-процессы терминального программного обеспечения сделали устройство занятым. Он работает после перезагрузки моего настольного ПК. Большое спасибо. –

ответ

1

Как предложил Фрэнк, вы всегда можете получить диагностику ошибок с помощью ошибкиString(). Подробнее см. Наши примеры.

Я не могу воспроизвести проблему, но на основе вашего комментария ваш последовательный порт уже использовался другим процессом, поэтому это означает, что это не проблема QtSerialPort. У любого другого программного обеспечения была бы проблема с этим, например. новый сеанс minicom.

Рад, что он работает сейчас. :)