怎么判断串口已发送完毕?(qt5, c++)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么判断串口已发送完毕?(qt5, c++)相关的知识,希望对你有一定的参考价值。

大概意思如下:
//以下代码只表示执行思路,望见谅
//----------------------------------------------------------------------
qCom = new QSerialPort();
string1[] = "123";
string2[] = "456";

qCom->open(QIODevice::writeOnly); //先以只写打开
qCom->writeData(string1, 2);
qCom->writeData(string2, 2);
while(???); //此处想等待第6个字符发送完毕
qCom->open(QIODevice::readOnly); //发送完毕后设置为只读模式
//----------------------------------------------------------------------
串口顺序发送了“1 2 3 4 5 6”六个字符,请问第六个字符“6”发送完毕的时刻怎么捕捉到呢?有木有更好的方法来实现?
求指点,谢谢!

参考技术A 写6个 异步延迟等待1秒肯定能写完 然后判断 重叠结构
判断写的数据 跟 真正写的数据 是不是相等

bool CComControl::Send(BYTE* pBuff,DWORD dwBytesSend)


if (!PortOpened()) return false;

BOOL wRes;
DWORD dwBytesW;
wRes = WriteFile(m_hCom,pBuff,dwBytesSend,&dwBytesW,&m_ovWrite);
if (!wRes)

if (GetLastError() == ERROR_IO_PENDING)

WaitForSingleObject(m_ovWrite.hEvent,1000);
wRes = GetOverlappedResult(m_hCom,&m_ovWrite,&dwBytesW,false);
if (!wRes || dwBytesW !=dwBytesSend)

ClearInOut();

return false;


else

ClearInOut();

return false;



return true;

 

本回答被提问者采纳

qt串口设置停止位出现

Qt串口设置停止位的出现是因为在串行通信中,停止位是用来终止数据传输的一个特定位。当发送端发送一个字节的数据时,接收端会接收到这个字节数据,然后会根据停止位来判断数据传输是否结束。所以在设置Qt串口时,一定要正确设置停止位,以保证数据传输的正确性。 参考技术A

停止位是指在发送的数据中,最后一个字符后必须加上一个特殊的字符,以标识数据的结束。Qt串口设置停止位的默认值是100字符。

以上是关于怎么判断串口已发送完毕?(qt5, c++)的主要内容,如果未能解决你的问题,请参考以下文章

如何判断网页是不是加载完毕

QT5 串口收发实例代码

STM32怎么接收不定长串口数据

易语言串口调试怎么判断串口数据接收完成。最好有源码每次接收到的数据长度不一样。(无自定义规约)

qt5 qbytearray 怎么判断里面的内容

arduino串口接收的问题