使用QT的串行端口的外部行为
extrange behavior of serial port using Qt
我正在用QT执行一个应用程序,以通过RS-232与8位微控制器传达PC。我正在使用qtSerialport库,并且通信运行正常,但是每次我将某些内容从PC到Micro编写,我都会收到响应,我必须关闭和打开串行端口,或者我无法继续进行通信。配置为:10500 bps,8位,1个停止,没有奇偶校验,没有流量控制。
用于配置的代码和端口的讲座/写入是下一个:
bool DriverS::configure(int port, int baudRate)
{
if(port!=22)
return false;
serialPort->setPortName("COM22");
if (serialPort->open(QIODevice::ReadWrite)==true){
if (!serialPort->setBaudRate(baudRate)) {
return false ;
}
if (!serialPort->setDataBits(QSerialPort::Data8)) {
return false ;
}
if (!serialPort->setParity(QSerialPort::NoParity)) {
return false;
}
if (!serialPort->setStopBits(QSerialPort::OneStop)) {
return false;
}
if (!serialPort->setFlowControl(QSerialPort::NoFlowControl)){
return false;
}
};
return true;
}
bool DriverS::read(QByteArray & rxData, int * size)
{
Sleep(200);
*size = 0;
if (serialPort->waitForReadyRead(TIMEOUT_SERIAL)) {
rxData = serialPort->readAll();
*size = rxData.size() ;
if (!this->checkCRC(rxData))
{
qDebug()<< "Rx Checksum Error";
return false;
}
return true;
}
qDebug()<< "Rx Timeout";
return false;
}
bool DriverS::write(QByteArray txData)
{
unsigned int chk = 0;
int ret ;
for(int i = 0;i<txData.size();i++)
{
chk+=txData.at(i);
}
txData.append(chk);
ret = serialPort->write(txData);
return (txData.size()==ret);
}
我刚刚发现自己的情况完全相同。我陷入了读取的例程中。尝试以无封闭模式打开端口。
port-> open(qiodevice :: dardwrite | qiodevice :: unboffered)
那只是在我发现的一台计算机上,我从来没有这样做,但它可能会让您摆脱困境。
我解决了两个问题(尽管我不确定这些方法)。
对于问题NUM 1(每次我想交流时打开和关闭端口),我刚刚在写作方法中添加了一个waitfobyteswritten()。
对于我的问题num 2,(我只能与port22一起使用),我修改了配置,现在我首先检测到wich端口可用可用ports(),而是强迫我要使用的端口。现在我可以将设备连接到任何自由端口,并且可以工作。
相关文章:
- Qt Q串行端口未编程设备未关闭
- 在 linux c++ 中没有通过串行端口发送的数据
- 检查串行端口Linux中是否有传入数据(cbInQue for linux)
- 在不传输的情况下更改 Win32 中的串行端口波特率
- 增强 ASIO 和串行端口异步读取
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何将参数这些串行端口传递到函数中
- 从 C/C++ 访问 Android 中的串行端口
- Qt两个串行端口发送和接收
- 通过串行端口从GPS传感器读取
- 提升 asio 串行端口"end of file"
- 通过串行端口发送多个值
- 与QSerialPort配合使用的串行端口仿真
- 如何通过boost::asio和shared_ptr创建串行端口
- 串行端口编码
- 使用来自串行端口的字符串数据来操作振镜扫描仪在更高的速度下会出错
- 写入和读取十六进制 TRAM QT 串行端口
- Qt串行端口数据接收
- Qt modbus 串行端口流量控制处理
- 使用QT的串行端口的外部行为