qt中使用串口類接收數據不完整


問題:當用QT中的serial->readAll()的時候,不會把全部的數據一次性都讀取出來,而是階段性的。原因是因為當串口有信號時候,readyRead()信號就會被拋出,那么一幀完整的數據幀就可能被分多次接收進來,會影響一些后續的操作。

解決方法:

  1.通訊雙方提前定義好幀頭和幀尾,方便進行校驗。當檢測到到幀頭和幀尾,才認定一幀數據時完整的。

  2.在readyRead()信號拋出后,再readAll()函數前使用延時函數,等待一幀數據完全發送完成。

 1 /* 以下只是部分代碼 */
 2 #include <QTimer>
 3 
 4 int main()
 5 {
 6     QTimer *timer = new QTimer();
 8     connect(timer, SIGNAL(timeout()), this, SLOT(timerStop()));
 9 }
10 
11 void Dialog::timerStop(void)
12 {
13     g_RecBuf.prepend(0xBB);
14     timer->stop();
15     {
16         qDebug()<<g_RecBuf;
17         Dialog::saveDataToFile(g_RecBuf);
18     }
19     g_RecBuf.clear();
20 }
21 
22 void Dialog::readParam()
23 {
24     timer->start(100);
25     g_RecBuf.append(serial->readAll());
26 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM