我们,我在Qt中使用qextserialport进行串行通信。 发生的事情是,当我从控制器板发送数据时,它会读取数据,但即使我关闭了电路板,它也会继续读取数据。 这意味着它读取速度非常慢,当我关闭电路板时,还有剩余字节要在终端上读取。那么如何解决这个问题?
当关闭电路板时,它应该停止读取字节。
答案 0 :(得分:0)
串口中的奇偶校验检查配置错误。
你应该遵循这种类型的初始化:
...
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流程, 在串行序列中,应检查正确放置起始位和发送结束时一个字节是否足以容纳一个停止位。