Qt撰寫UART(RS232)

1.首先到官網去下載QextSerialPort 1.1
按此連結

2.解壓縮後
將裡面的
posix_qextserialport.cpp
posix_qextserialport.h
win_qextserialport.cpp 
win_qextserialport.h
qextserialbase.cpp
qextserialbase.h
qextserialport.cpp
qextserialport.h
複製到你的專案資夾底下

3.開啟pro輸入
HEADERS += qextserialbase.h /
qextserialport.h
SOURCES += qextserialbase.cpp /
qextserialport.cpp
unix:HEADERS += posix_qextserialport.h
unix:SOURCES += posix_qextserialport.cpp
win32:HEADERS += win_qextserialport.h
win32:SOURCES += win_qextserialport.cpp
unix:DEFINES = _TTY_POSIX_
win32:DEFINES = _TTY_WIN_

4.接下來就可以在程式裡面開始使用qextserial
首先先include qextserialport.h
宣告一個
QextSerialPort port = new QextSerialPort;
開始使用
port.setPortName("COM1");  //port的位置
port.setBaudRate(BAUD38400);  //包率
port.setFlowControl(FLOW_OFF);  //滿載控制
port.setParity(PAR_NONE);  //同位元
port.setDataBits(DATA_8);  //資料大小
port.setStopBits(STOP_1);  //停止bit
port.open(QIODevice::ReadWrite);  //開啟UART的port
這樣久就設定完成並且開啟

常用函數:
isOpen()
此函數用來檢查使否開啟
a = read(array, 10)
此函數用來接收值
array為放資料的地方
10為接收的值
a為所接收到的值
write(array, 10)
array為放傳送的地方
10為傳送的值

因為此程式沒有接收後自動中斷的機制
所以需要隔一段時間接收資料

QT編譯成靜態還是出現"找不到mingwm10.dll"解決辦法

程式編譯成靜態還是出現
找不到mingwm10.dll

是因為你的Make有將mtheard
編譯進去
所以要將Makefile.Release
中找到
-mthreads
刪除
存檔重新編譯即可
但是注意
你的.pro
有修改過Qt Creator會自動產生新的Makefile.Release
因此要編譯完
再做修改
再編譯一次即可

要是想要一勞永逸
就開啟
Qt底下的\qt\mkspecs\win32-g++\qmake.conf

-mthreads
全部刪除
這樣之後生成的Makefile都不會出現了

QT編譯成靜態還是出現"找不到libgcc_s_dw2-1.dll"解決辦法

程式編譯成靜態還是出現
找不到libgcc_s_dw2-1.dll

是因為你的minGW 4.4以上
所以有關GCC的函數
都用動態來連接
所以需要下命令
將有關GCC的函數編譯成靜態
打開你的專案的副檔名為pro的檔案
加入
CONFIG += staticlib


儲存後編譯即可

QT編譯成靜態(static)

為什麼要編譯成靜態的
因為時常把程式寫好編譯後
要將程式去別台執行
就會出現缺少XXXXX.dll
這就是編譯器是用動態連結
除非把所有需要的dll都一起複製帶著走
要不然程式是無法動作的
因此要將程式所用到的函數都包在一個執行檔裡面
所以要編譯成靜態的

要是沒編譯成靜態 開啟檔案會出現下面的警告
找不到QtCored4.dll

所以接下來就要將QT編譯成靜態
複製你安裝QT的資料夾
預設路徑為C:\qt\發布的版本
例如我的是C:\qt\2010.02.1
複製一份命名為C:\qt\2010.02.1-static
接下來開啟QT的Qt Command Prompt
預設路徑為
開始→程式集→Qt SDK by Nokia v2010.02.1 (open source)→Qt Command Prompt
開啟後將目錄轉到你複製完成的資料夾底下的qt
cd C:\qt\2010.02.1-ststic\qt


接下來所要下的命令為
configure -static -release -fast -no-phonon -no-opengl

會出現
Which edition of Qt do you want to use ?
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.

這時候就要打
o
然後按Enter
因為通常安裝的都是開放原始碼的授權程式
除非你有去購買授權版的

接下來就是會出現
This is the Qt for Windows Open Source Edition.

You are licensed to use this software under the terms of
the GNU Lesser General Public License (LGPL) version 2.1
or the GNU General Public License (GPL) version 3.

Type '3' to view the GNU General Public License version 3 (GPLv3).
Type 'L' to view the Lesser GNU General Public License version 2.1 (LGPLv2.1).
Type 'y' to accept this license offer.
Type 'n' to decline this license offer.

Do you accept the terms of the license?

輸入3或L是看那些開放原始碼的法律條文
要看的可以自己進去看
所以在這裡輸入
y
案Enter

像上面出現
Qt is now configured for building. Just run mingw32-make.
To reconfigure, run mingw32-make confclean and configure.
就成功了

接下來就會開始自動設定檔案
設定完成就輸入
mingw32-make
輸入完後要等大約2-3小時
出現類似以下的訊息
就代表編譯完成
mingw32-make[4]:
mingw32-make[3]:
mingw32-make[2]:
mingw32-make[1]:

編完後此Qt的檔案就會變成靜態的模式
接下來就是去Qt Creator設定
將編譯器指向此靜態的函式庫
開啟Qt Creator
功能表的Tools→Options→Qt4
按下新增按鈕
version name  填入你知道的名子
QMake Location  填入你編好的靜態Qt函式庫裡的bin的qmake.exe檔案
MinGW Directory  填入MinG編譯器的位置
不管是靜態的那個資料夾或是動態的都可以
所以可以將靜態的MinGW刪除然後指向動態的
OK就可以了
接下來就是將你所寫好的Qt程式用靜態編譯
先開啟你的專案
點到Project
新增你剛剛設定好的環境
它會要你輸入新的Configuration的名子
輸入完後選到你剛剛設定完後的debug
將它刪除
因為Qt的靜態版本不能用來編譯debug
所以將它刪除以免選錯
接下來就可以將上面的編譯模式設定為靜態
 編譯後就可以了