1

我正在尝试使用 QextSerialPort 与 Arduino Diecimila 板进行串行连接。每次我调用 port->open() 时,我的应用程序都会挂起。我认为发生这种情况的原因是每次与它建立串行连接时,Arduino 板都会自行重置。有一种方法可以不重置此处描述的电路板,但我不知道如何让 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 的新手。

更新:我注意到,如果我在运行上述代码之前运行一个连接到同一端口(使用 pySerial)的 python 脚本,一切正常。

4

4 回答 4

2

我有一个类似的问题。

在我的情况下,QExtSerial 会打开端口,我会看到板上的 RX/TX 灯闪烁,但不会收到任何数据。如果我用另一个终端程序打开端口,首先 QExtSerial 将按预期工作。

为我解决的问题是打开端口,配置端口设置,然后在短时间内使 DTR 和 RTS 处于高电平。

这是在带有 ATMega32u4 (SFE Pro Micro) 的 Windows 7 上。




    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;
    }

于 2012-10-29T22:00:33.003 回答
1

libserial是一个令人难以置信的库,用于我的 Arduino Duemilanove 的独立串行应用程序。

于 2011-03-18T22:26:23.477 回答
1

qserialdevice 使用!

例子:

http://robocraft.ru/blog/544.html

于 2011-06-15T11:18:21.457 回答
0

您可以只使用没有 DTR、RTS 线的 3 线串行电缆(tx/rx/gnd)吗?

于 2011-03-26T15:57:11.997 回答