Я пытаюсь подключить микроконтроллер с моим настольным ПК через последовательный кабель 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. У кого-нибудь есть идеи? Любая помощь будет оценена по достоинству.
Заранее благодарен!
Проверьте serial.error() и serial.errorString(). Возможно, вам также придется сначала установить свойства, такие как скорость передачи. –
@FrankOsterfeld Благодаря вашему совету, я понял причину проблемы. serial.error() возвращает 2, seria.errorString() возвращает «устройство или ресурс, занятый при попытке открыть». Возможно, зомби-процессы терминального программного обеспечения сделали устройство занятым. Он работает после перезагрузки моего настольного ПК. Большое спасибо. –