我必须为基于 FriendlyARM 的嵌入式处理器系统开发 C++ 程序。我在台式计算机上使用 Qt Creator 3.0.0(基于 Qt 5.2.0)。我的程序应该能够从 Mini2440 FriendlyARM 处理器的串口读取。
在进入目标系统(嵌入式系统)之前,我尝试读写笔记本电脑上的串行端口。我的主要问题是如何从串口读取。如您所知,新电脑和笔记本电脑没有串口,所以我尝试使用手工制作的 USB 转串口适配器电缆模拟串口编程。插入 USB 串行电缆后,在 Ubuntu 上识别为“/dev/ttyUSB0”。它似乎运作良好。请注意,电缆的另一端(串行端口)没有连接任何东西。
我的第一个问题是:这样配置电缆是否可以,或者我必须将其连接到其他设备?我尝试每 10 秒写入 /dev/ttyUSB0 并读取数据。我结束了以下代码:
void MainWindow::refreshNotificationArea()
{
generateNotifAreaData(); // a typical random data-generator
QList<QSerialPortInfo> L = QSerialPortInfo::availablePorts();
for (auto e : L)
qDebug() << e.portName() << '\n'; // it prints 1 serial port: :ttyUSB0
// write to the port
QSerialPort notifAreaPort;
// 1. set properties
notifAreaPort.setBaudRate(QSerialPort::Baud9600);
notifAreaPort.setStopBits(QSerialPort::OneStop);
notifAreaPort.setParity(QSerialPort::NoParity);
notifAreaPort.setDataBits(QSerialPort::Data8);
notifAreaPort.setFlowControl(QSerialPort::NoFlowControl);
QObject::connect(¬ifAreaPort,SIGNAL(error(QSerialPort::SerialPortError)),
this, SLOT(errorReport(QSerialPort::SerialPortError)));
notifAreaPort.setPortName(serial_device.c_str());
// 2. open port
notifAreaPort.open(QIODevice::ReadWrite);
if (!notifAreaPort.isOpen())
qDebug() << "Open failed"; // open is OK, no error message printed
string s = convertNotifAreadData2Str();
qDebug() << "Generated data " << s.c_str(); // OK
int a = notifAreaPort.write(s.c_str()); // write done
qDebug() << "Write count" << a; // OK
// now read the info
QByteArray ba = notifAreaPort.readLine(3); // read failed
QSerialPort::SerialPortError err = notifAreaPort.error();
qDebug() << "Error code" << err;
qDebug() << "What? " << notifAreaPort.errorString();
qDebug() << "Read count " << ba.size(); // 0
notifAreaPort.close();
}
void MainWindow::errorReport(QSerialPort::SerialPortError error)
{
if(error!=0)
qDebug()<<"ERROR:"<<endl<<error; // nothing printed
}
写入串口是可以的。但有时阅读问题“没有这样的文件或目录”!有时“文件暂时不可用!奇怪的是notifAreaPort.error()返回0,表示没有发生错误!
想法?
——赛义德·阿姆罗拉希·博尤基