當前位置:首頁 » 編程軟體 » qt串口編程實例

qt串口編程實例

發布時間: 2024-03-16 03:20:01

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

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

2. qt在如何循環50ms讓串口發送數據

一. 完善數據接收功能
主要有以下幾點需要完善:

需要接收中文
打開串口的pushbotton,點擊打開後需要改為關閉串口功能
1. 完善接收中文功能
這一塊我在幫助手冊上是找不到解決辦法,只能在網上看有沒有解決辦法了, 參考了網上這位博主的https://blog.csdn.net/ouening/article/details/89469468,接收函數修改為

/*顯示串口數據函數*/
void MainWindow::displayData()
{
QByteArray rx_data;
rx_data = this->serialPortUsing.readAll();

QString str = QString::fromLocal8Bit(rx_data);

qDebug() << str;
rx_data.clear();
}
就可以愉快的顯示中文了
2. 完善打開串口和關閉串口功能
做這個功能的思路是先定義一個bool類型的打開與否標志位,點擊了打開串口就把這個標志位翻轉,再次點擊時 在槽函數裡面判斷這個標志位,做相應的打開或者關閉操作。
mainwindow.cpp代碼

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QComboBox>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
/*顯示波特率*/
this->BaudList << "9600" << "19200" <<"115200";
ui->baudComboBox->addItems(this->BaudLis

3. 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顯示串口信息實例

4. QT下的串口編程我想從串口讀數據,但是讀第3次的時候程序自動崩潰了

str2 = list1.at(2)+","+list1.at(3)+","+list.at(4)//
我覺得問題可能在這 因為你每次讀到得數據時不一樣的 不能確保切割後都能分成4個 對list的越界訪問造成程序崩潰 你可以把buf的內容輸出看一下 看是不是能分割成四個!

熱點內容
編程計算nk 發布:2024-11-15 22:35:07 瀏覽:832
資料庫第一章 發布:2024-11-15 22:27:07 瀏覽:592
測試php性能工具 發布:2024-11-15 22:19:37 瀏覽:580
安卓手機怎麼給王者榮耀差評 發布:2024-11-15 22:16:47 瀏覽:269
c調用python返回 發布:2024-11-15 22:14:23 瀏覽:943
優酷無法上傳高清視頻 發布:2024-11-15 22:13:13 瀏覽:732
源碼倉 發布:2024-11-15 22:07:29 瀏覽:721
極路由外網訪問 發布:2024-11-15 21:49:56 瀏覽:489
lispc語言 發布:2024-11-15 21:45:32 瀏覽:851
linux誤刪除目錄恢復 發布:2024-11-15 21:41:13 瀏覽:286