我正在尝试使用QextSerialPort与Arduino Diecimila电路板建立串行连接。每次我调用port-> open()时,我的应用程序都会挂起。我认为这种情况发生的原因是因为Arduino板每次与它串行连接时都会重置。有一种方法可以不重置电路板here,但我无法弄清楚如何让QextSerialPort这样做。我只能在打开端口后将DTR设置为false,因为当时电路板已经自动重置,因此没有多大帮助。
连接的代码如下所示:
port = new QextSerialPort("/dev/tty.usbserial-A4001uwj");
port->open(QIODevice::ReadWrite);
port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setDtr(false);
port->setRts(false);
有关如何完成此任务的任何想法。如果有人知道另一个能够解决问题的库,我不一定需要使用QextSerialPort。
我是C ++和Qt的新手。
更新: 我注意到如果我在运行上面的代码之前运行连接到同一端口的python脚本(使用pySerial),一切正常。
答案 0 :(得分:2)
我遇到了类似的问题。
在我的情况下,QExtSerial将打开端口,我会看到主板上的RX / TX指示灯闪烁,但不会收到任何数据。如果我用另一个终端程序打开端口,首先QExtSerial将按预期工作。
为我解决的问题是打开端口,配置端口设置,然后在短时间内使DTR和RTS保持高电平。
这是在Windows 7上使用的是ATMega32u4(SFE Pro Micro)。
bool serialController::openPort(QString portName) {
QString selectPort = QString("\\\\.\\%1").arg(portName);
this->port = new QextSerialPort(selectPort,QextSerialPort::EventDriven);
if (port->open(QIODevice::ReadWrite | QIODevice::Unbuffered) == true) {
port->setBaudRate(BAUD38400);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setTimeout(500);
port->setDtr(true);
port->setRts(true);
Sleep(100);
port->setDtr(false);
port->setRts(false);
connect(port,SIGNAL(readyRead()), this, SLOT(onReadyRead()));
return true;
} else {
// Device failed to open: port->errorString();
}
return false;
}
答案 1 :(得分:1)
libserial是一个令人难以置信的库,我用于Arduino Duemilanove的独立串行应用程序。
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以使用没有DTR,RTS线路的3线串行电缆(tx / rx / gnd)吗?