如果用qt寫程式作為上位機,然後通過和usb和下位機通訊的時候,就需要用到qt中的串列埠通訊了。
1).pro 新增:
qt +
=serialport
2)主函式 main.cpp 新增:
#include
"mywidget.h"
#include
intmain
(int argc,
char
*ar**)
3)mywidget.h 新增:
#ifdef win32
#pragma execution_character_set("utf-8")
#endif
#ifndef mywidget_h
#define mywidget_h
#include
#include
#include
#include
#include
namespace ui
class
mywidget
:public qwidget
;#endif
// mywidget_h
4)mywidget.cpp 新增:
#include
"mywidget.h"
#include
"ui_mywidget.h"
mywidget::
mywidget
(qwidget *parent)
:qwidget
(parent),ui
(new ui::mywidget)
mywidget::
~mywidget()
// 1、獲得有效串列埠
qstringlist mywidget::
getportnamelist()
return m_serialportname;
}// 2、連線、斷開
void mywidget::
on_m_openportbutton_clicked()
else
// 串列埠設定:
m_serialport-
>
setflowcontrol
(qserialport::noflowcontrol)
;//無流控制
// 1、波特率和讀寫方向
switch
(ui-
>cbox_baudrate-
>
currentindex()
)// 2、資料位
switch
(ui-
>cbox_databits-
>
currentindex()
)// 3、停止位
switch
(ui-
>cbox_stopbits-
>
currentindex()
)// 4、校驗位
switch
(ui-
>cbox_parity-
>
currentindex()
)connect
(m_serialport,
signal
(readyread()
),this
,slot
(receiveinfo()
));}
ui->m_openportbutton-
>
settext
(m_serialport-
>
isopen()
?tr("關閉串列埠"):
tr("連線串列埠"))
; ui-
>m_openportbutton-
>
setstylesheet
(m_serialport-
>
isopen()
?"color: red;"
:"color: black;");
}// 3、資訊接收
void mywidget::
receiveinfo()
info.
clear()
;// qbytearray hexdata = info.tohex();
// //這裡面的協議 你們自己定義就行 微控制器發什麼 代表什麼 我們這裡簡單模擬一下
// if(hexdata == "0x10000")
//
// else if(hexdata == "0x100001")
//
}// 4、傳送按鈕
void mywidget::
on_btn_send_clicked()
//寫兩個函式 向微控制器傳送資料:
// 資訊傳送函式一:
void mywidget::
sendinfo
(char
* info,
int len)
m_serialport-
>
write
(info,len)
;//這句是真正的給微控制器發資料 用到的是qiodevice::write 具體可以看文件
}// 資訊傳送函式二:
void mywidget::
sendinfo
(qstring &info)
qdebug()
<<
"write to serial: "
<
convertstringtohex
(info, sendbuf)
;//把qstring 轉換 為 hex
m_serialport-
>
write
(sendbuf)
;//這句是真正的給微控制器發資料 用到的是qiodevice::write 具體可以看文件
}// 基本和微控制器互動資料都是16進製制的
// qstring 轉為16進製制的函式
void mywidget::
convertstringtohex
(const qstring &str, qbytearray &bytedata)
i++;if
(i >= len)
break
; lstr = str[i]
.tolatin1()
; hexdata =
convertchartohex
(hstr)
; lowhexdata =
convertchartohex
(lstr);if
((hexdata ==16)
||(lowhexdata ==16)
)break
;else
hexdata = hexdata*
16+lowhexdata;
i++; bytedata[hexdatalen]=(
char
)hexdata;
hexdatalen++;}
bytedata.
resize
(hexdatalen);}
//另乙個 函式 char 轉為 16進製制
char mywidget::
convertchartohex
(char ch)
Qt串列埠通訊
1.在早期的qt版本中,主要是採用第三方類作為qt對串列埠通訊的支援,具體可參考 2.在進入qt5的時代後,串列埠通訊已經作為qt的乙個附件部分,但沒有作為qt的正式模組。使用這樣的串列埠模組時,需要自行編譯串列埠部分,具體可參考 鑑於以上兩種做法都比較複雜,本人一直沒有除錯串列埠通訊部分,直到最近...
Qt 串列埠通訊
開發環境 qt5.5.1 qt creator 3.5.1 1 建立專案 qtserialdemo 2 新增元件 修改 專案名.pro qtserialdemo.pro 新增 qt serialport 3 新增如下使用 qt串列埠 所需的標頭檔案 include include 4 主要串列埠通訊...
Qt 串列埠通訊
1.概述 因為專案需要,對qt的串列埠通訊進行了一些學習,這個專案的乙個需求是將乙個測溫儀器的資料讀取到電腦進行處理,根據這個儀器的通訊協議,每次讀取前都需要對它寫入命令。這裡用到了qt進行了讀寫操作,其中遇到了關於十六進製制write問題並得以解決。使用到的qt庫 qtserialport 2.詳...