當前位置:首頁 » 編程軟體 » qt編譯安卓串口通信

qt編譯安卓串口通信

發布時間: 2023-09-18 04:35:43

A. 如何使用Qt編程實現串口接收不定長數據幀

1、不管數據幀的長度,只要定義每個包的協議格式,比如頭尾,然後解析這組數據,只要檢測到協議正確,就可以處理數據了。
2、讀取方法不變。
3、serialport->readAll();

B. QT開發(五十)——QT串口編程基礎

一、QtSerialPort簡介

1、串口通信基礎

目前使用最廣泛的串口為DB9介面,適用於較近距離的通信。一般小於10米。DB9介面有9個針腳。

串口通信的主要參數如下:

A、波特率:衡量通信速度的參數,表示每秒鍾傳送的bit的個數。例如9600波特表示每秒鍾發送9600個bit。

B、數據位:衡量通信中實際數據位的參數,當計算機發送一個信息包,實際包含的有效數據位個數。

C、停止位:用於表示單個包的最後一位。典型的值為1和2位。

D、奇偶校驗位:串口通信中一種檢錯方式。常用的檢錯方式有:偶、奇校驗。

2、QtSerialPort模塊簡介

QtSerialPort模塊是QT5中附加模塊的一個模塊,為硬體和虛擬的串口提供統一的介面。

串口由於其簡單和可靠,目前在像嵌入式系統、機器人等工業中依舊用得很多。使用QtSerialPort模塊,開發者可以大大縮短開發串口相關的應用程的周期。

Qt SerialPort提供了基本的功能,包括配置、I/O操作、獲取和設置RS-232引腳的信號。

Qt SerialPort模塊暫不支持以下特性:

A、終端的特性,例如回顯,控制CR/LF等等

B、文本模式

C、讀或寫操作的超時和延時配置

D、當RS-232引腳信號變化通知

#include <QtSerialPort/QtSerialPort>

要鏈接QtSerialPort模塊,需要在.pro文件中添加如下內容:

QT += serialport

二、QSerialPort

1、QSerialPort簡介

QSerialPort提供了訪問串口的介面函數。使用輔助類QSerialPortInfo可以獲取可用的串口信息。將QSerialPortInfo輔助類對象做為參數,使用setPort()或setPortName()函數可以設置要訪問的串口設備。

設置好埠後,可以使用open()函數以只讀、只寫或讀寫的模式打開使用。

注意,串口使用獨占方式打開。

使用close()函數關閉串口並且取消IO操作。

串口成功打開後,QSerialPort會嘗試確定串口的當前配置並初始化。可以使用setBaudRate()、setDataBits()、setParity()、setStopBits()和setFlowControl()函數重新配置埠設置。

有一對名為QSerialPort::dataTerminalReady、QSerialPort::requestToSend的屬性

QSerialPort提供了中止正在調用線程直到信號觸發的一系列函數。這些函數用於阻塞串口。

waitForReadyRead():阻塞調用,直到有新的數據可讀

waitForBytesWritten():阻塞調用,直到數據以及寫入串口

阻塞串口編程與非阻塞串口編程完全不同。阻塞串口不會要求時間循環並且通常會簡化代碼。然而,在GUI程序中,為了避免凍結用戶界面,阻塞串口編程只能用於非GUI線程。

QSerialPort也能使用QTextStream和QDataStream的流操作符。在試圖使用流操作符>>讀時,需要確保有足夠可用的數據。

2、QSerialPort成員函數

QSerialPort::QSerialPort(QObject *parent = Q_NULLPTR)

QSerialPort::QSerialPort(const QString &name, QObject *parent = Q_NULLPTR)

QSerialPort::QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = Q_NULLPTR)

[virtual] bool QSerialPort::atEnd() const

[signal] void QSerialPort::baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

[virtual] qint64 QSerialPort::bytesAvailable() const

[virtual] qint64 QSerialPort::bytesToWrite() const

[virtual] void QSerialPort::close()

void QSerialPort::setPort(const QSerialPortInfo &serialPortInfo)

void QSerialPort::setPortName(const QString &name)

三、QSerialPortInfo

1、QSerialPortInfo簡介

QSerialPortInfo類提供已有串口設備的信息。使用QSerialPortInfo類的靜態成員函數生成QSerialPortInfo對象的鏈表。鏈表中的每個QSerialPortInfo對象代表一個串口,每個串口可以使用埠名、系統定位、描述、製造商查詢。QSerialPortInfo類對象也可以用做QSerialPort類的setPort()成員函數的參數。

2、QSerialPortInfo成員函數

QSerialPortInfo::QSerialPortInfo(const QSerialPort &port)

QSerialPortInfo::QSerialPortInfo(const QString &name)

QSerialPortInfo::QSerialPortInfo(const QSerialPortInfo &other)

[static] QList<QSerialPortInfo> QSerialPortInfo::availablePorts()

QString QSerialPortInfo::description() const

bool QSerialPortInfo::hasProctIdentifier() const

bool QSerialPortInfo::hasVendorIdentifier() const

bool QSerialPortInfo::isBusy() const

QString QSerialPortInfo::manufacturer() const

QString QSerialPortInfo::portName() const

quint16 QSerialPortInfo::proctIdentifier() const

QString QSerialPortInfo::serialNumber() const

[static] QList<qint32> QSerialPortInfo::standardBaudRates()

void QSerialPortInfo::swap(QSerialPortInfo &other)

QString QSerialPortInfo::systemLocation() const

quint16 QSerialPortInfo::vendorIdentifier() const

3、QSerialPortInfo顯示串口信息實例

C. 用QT編寫一個串口通信的程序。為什麼標題為中文的時候顯示是亂碼,標題為英文則是對的。

中文編碼問題,在主函數加入:
QTextCodec *codec = QTextCodec::codecForName("System"); //獲取系統編碼
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
肯定就ok啦

熱點內容
emc存儲圖標 發布:2024-11-19 05:39:03 瀏覽:646
查詢電腦主板配置怎麼看 發布:2024-11-19 05:33:10 瀏覽:464
蘋果手機怎麼查看wifi密碼 發布:2024-11-19 05:26:57 瀏覽:498
上級伺服器ip英語 發布:2024-11-19 05:24:43 瀏覽:329
資料庫是數 發布:2024-11-19 05:16:55 瀏覽:188
linux線程id 發布:2024-11-19 05:05:36 瀏覽:428
雲堡壘伺服器 發布:2024-11-19 05:05:31 瀏覽:340
php高端培訓 發布:2024-11-19 05:04:11 瀏覽:974
源碼智慧路燈 發布:2024-11-19 05:02:33 瀏覽:635
天翼生活登錄密碼是什麼 發布:2024-11-19 04:51:30 瀏覽:96