chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開源的Qt串口助手的使用方法

Q4MP_gh_c472c21 ? 來源:21ic論壇 ? 作者:一路向北lm ? 2021-02-02 10:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

串口調試助手是一款用于串口調試的工具,目前網上存在很多個版本,功能都差不多,但穩(wěn)定性有好有壞,如果只用于一般的串口調試,這些工具夠用了,如果想開發(fā)一款適于自己的串口調試助手,本文也許可以幫你。本文中的調試助手用QT開發(fā),QT的開發(fā)環(huán)境不在這里詳述了,不會安裝的可以在網上找找類似的博文吧,以下僅供參考。

第一部分:代碼托管:此部分可能存在一些未知的bug,歡迎廣大網友指出。

第二部分:效果展示:

實現(xiàn)的功能:

1.自動獲取計算機的端口號;

2.串口參數(shù)可更改:包括 波特率、數(shù)據位、停止位、校驗和等。

3.串口數(shù)據的發(fā)送和接收

4.支持十六進制數(shù)據的發(fā)送和接收

5.支持時間戳功能,方便文件的存儲查看

6.發(fā)送從窗口和接收窗口的清理

7.定時發(fā)送功能

簡單設置一下背景色,好看多了!

第二部分:代碼部分:

1.當我們的計算機的端口號發(fā)生改變時,串口助手要具備實時掃面本機的端口號的功能,具有實時獲取有效的串口信息,并將其刷新到下拉框中供我們選擇。有些自己編寫的串口助手是沒有這個功能的,這里我給大家補充上去。

//使用foreach獲取有效的串口信息 foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { //這里相當于自動識別串口號之后添加到了cmb,如果要手動選擇可以用下面列表的方式添加進去 Serial.setPort(info); if(Serial.open(QIODevice::ReadWrite)) { //將串口號添加到cmb ui-》comboBox_Port-》addItem(info.portName()); //關閉串口等待人為(打開串口按鈕)打開 Serial.close(); } }

2.填充下拉框的波特率、數(shù)據位、停止位、效驗位…。,初始化下拉框默認參數(shù),這個參數(shù)設置大部分的串口助手都會具備,因此不足為奇。該有的功能個咱還是得有的。

// 填充波特率 QStringList Baud; Baud《《“1200”《《“2400”《《“4800”《《“9600”《《“38400”《《“115200”; ui-》comboBox_Baud-》addItems(Baud); // 填充數(shù)據位 QStringList DataBit; DataBit《《“5”《《“6”《《“7”《《“8”; ui-》comboBox_DataBit-》addItems(DataBit); // 填充停止位 QStringList StopBit; StopBit《《“1”《《“1.5”《《“2”; ui-》comboBox_StopBit-》addItems(StopBit); // 填充效驗位 QStringList CheckBit; CheckBit《《“奇效驗”《《“偶效驗”《《“無”; ui-》comboBox_CheckBit-》addItems(CheckBit);

//初始化默認參數(shù) ui-》comboBox_Baud-》setCurrentIndex(3); //默認9600 ui-》comboBox_DataBit-》setCurrentIndex(3); //默認8bit Data ui-》comboBox_StopBit-》setCurrentIndex(0); //默認1bit Stop ui-》comboBox_CheckBit-》setCurrentIndex(2); //默認 無效驗

3.串口打開和關閉按鈕操作,這個就是打開串口按鈕和關閉按鈕的邏輯操作,成功打開串口后,相應的參數(shù)將會被設置。串口即可以用于數(shù)據的發(fā)送和接收了,這里也處理,打開失敗時的邏輯操作,可謂是“疏而不漏也!”。

//串口打開和關閉按鈕void MainWindow::on_pushButton_Open_clicked(){ //設置串口號;也就是說打開的是當前顯示的串口 if(ui-》comboBox_Port-》currentText().isEmpty()) { QMessageBox::information(this,“提示”,“沒有可用的串口”); return; } Serial.setPortName(ui-》comboBox_Port-》currentText()); if(ui-》pushButton_Open-》text() == “打開串口”) { if(Serial.open(QIODevice::ReadWrite))//讀寫方式打開,成功后設置串口 { //設置波特率 Serial.setBaudRate(ui-》comboBox_Baud-》currentText().toInt());

//設置數(shù)據位 switch(ui-》comboBox_DataBit-》currentText().toInt()) { case 5: Serial.setDataBits(QSerialPort::Data5); break; case 6: Serial.setDataBits(QSerialPort::Data6); break; case 7: Serial.setDataBits(QSerialPort::Data7); break; case 8: Serial.setDataBits(QSerialPort::Data8); break; default: QMessageBox::information(this,“提示”,“數(shù)據位配置出錯”); return; break; }

//設置校驗位 if (ui-》comboBox_CheckBit-》currentText() == “奇效驗”) { Serial.setParity(QSerialPort::OddParity); } else if (ui-》comboBox_CheckBit-》currentText() == “偶效驗”) { Serial.setParity(QSerialPort::EvenParity); } else if (ui-》comboBox_CheckBit-》currentText() == “無”) { Serial.setParity(QSerialPort::NoParity); }

//設置停止位 if (ui-》comboBox_StopBit-》currentText().toFloat() == 1) { Serial.setStopBits(QSerialPort::OneStop); } else if(ui-》comboBox_StopBit-》currentText().toFloat() == 1.5) { Serial.setStopBits(QSerialPort::OneAndHalfStop); } else if(ui-》comboBox_StopBit-》currentText().toFloat() == 2) { Serial.setStopBits(QSerialPort::TwoStop); }

//設置流控制 Serial.setFlowControl(QSerialPort::NoFlowControl); ui-》pushButton_Open-》setText(“關閉串口”);

//建立串口接收的槽函數(shù) connect(&Serial,&QSerialPort::readyRead ,this,&MainWindow::ReadRecData);

// timer0-》start(100);

} else//串口打開失敗 { QMessageBox::about(NULL, “提示”, “打開出錯,串口被占用!”); return ; } } else if(ui-》pushButton_Open-》text() == “關閉串口”) { Serial.close();//關串口 //timer0-》stop(); ui-》pushButton_Open-》setText(“打開串口”); }}

4. 串口接收數(shù)據函數(shù)(支持時間戳、HEX接收) 這個是很關鍵的地方了,要保證數(shù)據接收的完整性和實時性,可采用兩種接收數(shù)據的模式:定時器觸發(fā)和槽觸發(fā),定時器觸發(fā)我這里采用的是100ms的中斷接收,大家還可以調的更小一點。

void MainWindow::ReadRecData(){ QByteArray readData = Serial.readAll();//讀取串口數(shù)據 QByteArray NewData; QString current_date;

if(readData != NULL)//將讀到的數(shù)據顯示到數(shù)據接收區(qū) { if(HexRecvFlag) //判斷是否使用HEX { //判斷是否使用時間戳 if(EnableTimeFlag == 1) { current_date_time = QDateTime::currentDateTime(); current_date += “[”; current_date += current_date_time.toString(“yyyy-MM-dd hhss”); current_date += “]收-》”; ui-》textEdit_Recv-》append(current_date.toUtf8() + readData.toHex()); } else { ui-》textEdit_Recv-》append(readData.toHex()); }

} else { //判斷是否使用時間戳 if(EnableTimeFlag == 1) { current_date_time = QDateTime::currentDateTime(); current_date += “[”; current_date += current_date_time.toString(“yyyy-MM-dd hhss”); current_date += “]收-》”; ui-》textEdit_Recv-》append(current_date.toUtf8() + readData); } else { ui-》textEdit_Recv-》append(readData); } }

}}

5. 串口發(fā)送數(shù)據函數(shù)(支持時間戳、HEX接收) 這個是很關鍵的地方了,串口發(fā)送數(shù)據的方式就比較簡單了,直接將數(shù)據送入緩沖區(qū)

//發(fā)送數(shù)據void MainWindow::on_pushButton_Send_clicked(){ QString DataStr; QString NewData; QString current_date;

DataStr = ui-》textEdit_Send-》toPlainText(); if(ui-》pushButton_Open-》text() == “打開串口”) { QMessageBox::information(this,“提示”,“未打開串口”); return; }

if(EnableTimeFlag == 1) { current_date_time = QDateTime::currentDateTime(); current_date += “[”; current_date += current_date_time.toString(“yyyy-MM-dd hhss”); current_date += “]發(fā)-》”; NewData = current_date + DataStr; } else { NewData = DataStr; }

if(HexSendFlag) { Serial.write(DataStr.toUtf8().toHex());//寫入緩沖區(qū) } else {

ui-》textEdit_Recv-》append(NewData.toUtf8()); }}

6.清除接收和發(fā)送窗口數(shù)據函數(shù),為了方便調試和觀察,這里添加了清除接收和發(fā)送窗口數(shù)據函數(shù)的操作。

//清除接收窗口數(shù)據void MainWindow::on_pushButton_ClearRecv_clicked(){ ui-》textEdit_Recv-》clear();}

//清除發(fā)送窗口數(shù)據void MainWindow::on_pushButton_2_clicked(){ ui-》textEdit_Send-》clear();}

7.使能時間戳,時間戳的主要目的在于通過一定的技術手段,對數(shù)據產生的時間進行認證,從而驗證這段數(shù)據在產生后是否經過篡改。所以時間戳服務的提供者必須證明服務中使用的時間源是可信的,所提供的時間戳服務是安全的。

void MainWindow::on_checkBox_EnableTime_clicked(bool checked){ if(checked == true) { EnableTimeFlag = 1; } else { EnableTimeFlag = 0; }}

8. 使能定時發(fā)送,定時發(fā)送很香了,必須得有啊!

void MainWindow::on_checkBox_clicked(bool checked){ if(checked == true) { if(ui-》pushButton_Open-》text() == “打開串口”) { QMessageBox::information(this,“提示”,“未打開串口”); ui-》checkBox-》setChecked(false); return; } quint32 stime= ui-》lineEdit_STime-》text().toInt(); timer_id1 = startTimer(stime); ui-》lineEdit_STime-》setEnabled(false); } else { killTimer(timer_id1); ui-》lineEdit_STime-》setEnabled(true); }}

9. 使能HEX 發(fā)送和接收按鈕,HEX那是標配,我只希望不要出bug,慢慢完善吧!

void MainWindow::on_checkBox_HexRecv_clicked(bool checked){ if(checked) { HexRecvFlag = 1; }

else HexRecvFlag = 0;}

void MainWindow::on_checkBox_HexSend_clicked(bool checked){ if(checked) HexSendFlag = 1; else HexSendFlag = 0;}

10. 定時器中斷函數(shù) 觸發(fā)接收串口數(shù)據的核心,沒它啥也干不了。

void MainWindow:: timerEvent(QTimerEvent *ev){ if(ev-》timerId() == timer_id1) { on_pushButton_Send_clicked(); }}

串口助手部分最后的展示效果

8f9c2dd0-624f-11eb-8b86-12bb97331649.png

原文標題:開源的Qt串口助手:一學就會

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 串口
    +關注

    關注

    15

    文章

    1597

    瀏覽量

    81393
  • Qt
    Qt
    +關注

    關注

    2

    文章

    317

    瀏覽量

    39898

原文標題:開源的Qt串口助手:一學就會

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    創(chuàng)龍 瑞芯微 RK3588 國產2.4GHz八核 工業(yè)開發(fā)板—Qt工程編譯、GPU核心使用說明

    本文圍繞創(chuàng)龍科技研發(fā)的評估板,詳細說明 Qt 工程編譯與 GPU 核心使用方法。涵蓋基于命令行和 Qt Creator 工具的 Qt 工程編譯流程,包括交叉編譯工具鏈、
    的頭像 發(fā)表于 09-29 14:16 ?186次閱讀
    創(chuàng)龍 瑞芯微 RK3588 國產2.4GHz八核 工業(yè)開發(fā)板—<b class='flag-5'>Qt</b>工程編譯、GPU核心使用說明

    錫膏的儲存及使用方法詳解

    錫膏是一種常用的焊接輔助材料,廣泛應用于電子、電器、通訊、儀表等行業(yè)的焊接工藝中。正確的儲存和使用方法對于保證錫膏的品質和焊接效果至關重要。本文將就錫膏的儲存和使用方法進行詳細介紹,希望能對廣大焊接工作者有所幫助。
    的頭像 發(fā)表于 07-18 17:36 ?840次閱讀
    錫膏的儲存及<b class='flag-5'>使用方法</b>詳解

    如何在2K0300開發(fā)板上搭建Qt環(huán)境

    近期迅為售后團隊反饋,許多用戶咨詢:2K0300處理器采用了LA264處理器核,若要在該處理器上運行Qt程序,由于架構發(fā)生了變化,其使用方法是否仍與ARM平臺保持一致?
    的頭像 發(fā)表于 05-16 14:27 ?349次閱讀
    如何在2K0300開發(fā)板上搭建<b class='flag-5'>Qt</b>環(huán)境

    LCR測試儀的使用方法與注意事項

    LCR測試儀的使用方法、操作注意事項及常見故障處理,幫助讀者高效、安全地掌握這一儀器的使用技巧。 ? 二、LCR測試儀的基本使用方法 1. 準備階段 (1)設備檢查:確保測試儀電源線、連接線完好,電源開關關閉。檢查測試夾具或探針
    的頭像 發(fā)表于 04-29 10:36 ?4152次閱讀
    LCR測試儀的<b class='flag-5'>使用方法</b>與注意事項

    【技術案例】Qt 環(huán)境部署 - Ubuntu 篇

    什么是Qt?Qt是一個跨平臺C++圖形用戶界面應用程序開發(fā)框架,可構建高性能的桌面、移動及Web應用程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成
    的頭像 發(fā)表于 04-16 17:17 ?1100次閱讀
    【技術案例】<b class='flag-5'>Qt</b> 環(huán)境部署 - Ubuntu 篇

    西門子PLC-模擬量采集計算使用方法

    西門子PLC-模擬量采集計算使用方法,很實用
    發(fā)表于 04-09 15:29 ?0次下載

    PXI-8433/4的規(guī)范使用方法分享

    應用中,因兩線制接線配置不當導致通訊障。本文將以此問題為入點,系統(tǒng)講解PXI-8433/4的規(guī)范使用方法。
    的頭像 發(fā)表于 03-14 10:38 ?1201次閱讀
    PXI-8433/4的規(guī)范<b class='flag-5'>使用方法</b>分享

    STM32串口通信,上電和斷電串口助手會返回數(shù)是怎么回事?

    STM32串口通信,上電和斷電串口助手會返回數(shù),是為什么呢
    發(fā)表于 03-12 07:57

    電網模擬器使用方法入門指南

    電網模擬器是一種強大的工具,可以模擬電力系統(tǒng)的運行情況,非常有助于電力系統(tǒng)的設計、測試、運行和維護。下面我們將一步步介紹如何使用電網模擬器,幫助初學者輕松上手。 一、連接設備 首先,使用方法就是將
    的頭像 發(fā)表于 02-11 17:38 ?1116次閱讀
    電網模擬器<b class='flag-5'>使用方法</b>入門指南

    精密空調操作使用方法詳解

    精密空調操作使用方法詳解
    的頭像 發(fā)表于 02-10 14:44 ?1577次閱讀
    精密空調操作<b class='flag-5'>使用方法</b>詳解

    快速了解電源模塊的使用方法

    電源是整個電路可靠工作的核心部分。然而,由于電源電路的電流和發(fā)熱量較大,容易出現(xiàn)故障。今天我為大家介紹一下電源模塊的使用方法。
    的頭像 發(fā)表于 01-21 15:24 ?1186次閱讀

    Qt Group發(fā)布Qt Accelerate,加速數(shù)字產品開發(fā)進程

    Qt Group近日正式推出了Qt Accelerate,這是一款專為快速構建數(shù)字應用而設計的解決方案,旨在滿足工業(yè)制造、移動出行、消費類電子等多個領域的需求。 Qt Accelerate基于
    的頭像 發(fā)表于 01-13 11:19 ?824次閱讀

    瑞芯微開發(fā)板/主板Android系統(tǒng)APK簽名文件使用方法,實用干貨

    瑞芯微主板/開發(fā)板Android系統(tǒng),APK系統(tǒng)簽名文件使用方法
    的頭像 發(fā)表于 12-26 09:43 ?1371次閱讀
    瑞芯微開發(fā)板/主板Android系統(tǒng)APK簽名文件<b class='flag-5'>使用方法</b>,實用干貨

    AB伺服軟件使用方法

    AB伺服軟件使用方法
    發(fā)表于 12-24 14:45 ?1次下載

    為什么通信要使用虛擬串口串口助手?

    串口助手和虛擬串口是什么?串口助手和虛擬串口串口
    的頭像 發(fā)表于 11-15 01:04 ?4253次閱讀
    為什么通信要使用虛擬<b class='flag-5'>串口</b>和<b class='flag-5'>串口</b><b class='flag-5'>助手</b>?