大家好,我在 Qt 中使用 qextserialport 进行串行通信。发生的情况是,当我从控制器板发送数据时,它会读取数据,但即使我关闭板,它也会继续读取数据。这意味着它的读取速度非常慢,当我关闭电路板时,终端上仍有字节要读取。那么如何解决这个问题?
当关闭电路板时,它应该停止读取字节。
大家好,我在 Qt 中使用 qextserialport 进行串行通信。发生的情况是,当我从控制器板发送数据时,它会读取数据,但即使我关闭板,它也会继续读取数据。这意味着它的读取速度非常慢,当我关闭电路板时,终端上仍有字节要读取。那么如何解决这个问题?
当关闭电路板时,它应该停止读取字节。
串行端口中的奇偶校验配置错误。
您应该遵循这种类型的初始化:
...
bool uart_openPort(QString name, PortSettings *setting) {
static bool port_created = false;
if (port_created == false) {
port = new QextSerialPort();
port->setQueryMode(QextSerialPort::Polling);
port_created = true;
}
if (connection_ready) {
uart_closePort();
connection_ready = false;
}
port->setPortName(name);
port->setBaudRate (setting->BaudRate);
port->setDataBits(setting->DataBits);
port->setStopBits(setting->StopBits);
port->setParity(setting->Parity);
port->setFlowControl(setting->FlowControl);
port->setTimeout(1);
if (port->open(QextSerialPort::ReadWrite)) {
connection_ready = true;
qDebug("INFORMATION (UART OPEN PORT): Port open Successful!");
} else {
connection_ready = false;
qDebug("CRITICAL (UART OPEN PORT): Error open Port!");
}
return(connection_ready);
}
...
或者您可以在此模式下使用一些固定参数
...
port->setPortName("/dev/ttyUSB0");
port->setBaudRate(BAUD9600);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setParity(PAR_NONE);
port->setFlowControl(FLOW_OFF);
port->setTimeout(1);
...
如果您在任何软件中都无法正常运行,则应检查板上的控制奇偶校验设置;
如果您使用软件生成的 uart 流,则在串行序列中应检查正确放置起始位和传输结束时的一个字节是否足以容纳一个停止位。