我想使用QSerialPort
进行通信。这是我正在尝试的:
QByteArray bytes;
bytes.append(( char) 0x6E);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
bytes.append(( char) 0x0B);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
bytes.append(( char) 0x2F);
bytes.append(( char) 0x4A);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
int transmitted = qSerialPort->write(bytes); //returns no error, transmitted = 11
QSerialPort
的配置如下:
qSerialPort = new QSerialPort(path);
qSerialPort->setBaudRate(QSerialPort::Baud9600);
qSerialPort->setDataBits(QSerialPort::Data8);
qSerialPort->setParity(QSerialPort::NoParity);
qSerialPort->setStopBits(QSerialPort::OneStop);
qSerialPort->setFlowControl(QSerialPort::NoFlowControl);
qSerialPort->open(QIODevice::ReadWrite);
我没有从硬件设备得到正确的答复。有没有什么我忽略了使用QSerialPort
将十六进制值发送到串口?感谢。
答案 0 :(得分:0)
你应该在" set"之前打开端口。操作。例如,在baudRate的Qt文档中:
注意:如果在打开端口之前设置了设置,则为实际串口 端口设置在QSerialPort :: open()方法中自动完成 在此之后,港口的开通成功。
代码示例:
QList<QSerialPortInfo> portsInfo = QSerialPortInfo::availablePorts();
foreach(const QSerialPortInfo& portInfo, portsInfo){
if (portInfo.portName().trimmed().toUpper() != /*your port name*/)
continue;
_port = new QSerialPort(portInfo, this);
if (!_port->open(QIODevice::ReadWrite)){
QSerialPort::SerialPortError error = _port->error();
delete _port;
_port = nullptr;
}
if (!_port->setBaudRate(/*your baudRate*/, /*your direction)*/){
QSerialPort::SerialPortError error = _port->error();
_port->close();
delete _port;
_port = nullptr;
return;
}
if (!_port->setParity(/*your parity*/)){
QSerialPort::SerialPortError error = _port->error();
_port->close();
delete _port;
_port = nullptr;
return;
}
if (!_port->setDataBits(/*your dataBits*/)){
QSerialPort::SerialPortError error = _port->error();
_port->close();
delete _port;
_port = nullptr;
return;
}
if (!_port->setStopBits(/*your stopBits */)){
QSerialPort::SerialPortError error = _port->error();
_port->close();
delete _port;
_port = nullptr;
return;
}
if (!_port->setFlowControl(/* your flowControl*/)){
QSerialPort::SerialPortError error = _port->error();
_port->close();
delete _port;
_port = nullptr;
return;
}
}