資源簡介
這是本人畢業設計的一部分,可以直接編譯使用。在虛擬機下實現兩個COM端口的數據傳輸, 首先開啟虛擬機,然后將兩個的串口端COM1和COM2連接起來,設置對兩個對話框的串口端口分別為COM1和COM2,將波特率,數據位,停止位,校驗位設置相同參數。接下里打開串口,如果串口打開失敗會有提示設置串口屬性失敗,本次測試時,打開串口之后虛擬機中可以清楚的看到COM1和COM2發生了變化,后面多了波特率,數據位,校驗位和停止位,這也是串口開啟成功的標志. 并且打開串口按鈕自動變為了關閉串口,表示串口打開成功。隨后在發送框中寫入要發送的數據,點擊發送消息按鈕即可將數據從一個對話框發送到另一個對話框。這樣就完成了在虛擬機串口虛擬成功的條件下,檢測串口通信的測試。
代碼片段和文件信息
#include?“StdAfx.h“
#include?“SerialPort.h“???
#include“Thread.h“
CSerialPort::CSerialPort(void)
{
m_hComm?=?NULL;????//窗口句柄的初始化
}
CSerialPort::~CSerialPort(void)
{
CloseComm();?????//釋放
}
void?CSerialPort::StartComm()???//打開線程
{
m_threadComm.SetThreadData((DWORD)this);??//設計數據開啟
m_threadComm.Start();
}
BOOL?CSerialPort::OpenComm(CString?strComm)???
{
if(NULL?==m_hComm?)??//首先判斷串口是不是NULL
{
m_hComm?=CreateFile((TCHAR*)(LPCTSTR)strCommGENERIC_READ|GENERIC_WRITE
0NULLOPEN_EXISTINGFILE_ATTRIBUTE_NORMAL?|FILE_FLAG_OVERLAPPEDNULL);
?????//指定哪一個串口???可以讀?可以寫(訪問模式)?共享模式為0(不能共享)??創建方式?文件重疊屬性???0
if(INVALID_HANDLE_VALUE?==?m_hComm)??//判斷窗口句柄無效?
{
????int?nError?=?GetLastError();?????//若不存在?返回錯誤類型
m_hComm?=?NULL;???????
????return???FALSE;
}
?????????return?TRUE;??//創建文件??打開成功
?}
?return?FALSE;???//?打開失敗?????////////////////////////////////////////////////////////////////////////////////
}
BOOL?CSerialPort::SetCommState(DWORD?dwBaudrateBYTE?byParity?BYTE?byByteSizeBYTE?byStopBits)
{
if(m_hComm?==?NULL)?return?FALSE;
DCB?dcb;???????????
BOOL?bRet?=?::GetCommState(m_hComm&dcb);????//返回關于串口的所有屬性
if(!bRet)??????????????//返回值是否正確
{???if(m_hComm)?????????//是否已經打開了
???{
?CloseHandle(m_hComm);
?m_hComm?=?NULL;??????//然后釋放掉
????}
????return?FALSE;??
}?
dcb.BaudRate?=?dwBaudrate;????
dcb.ByteSize?=?byByteSize;
dcb.Parity???=??byParity;
dcb.StopBits?=?byStopBits;
bRet?=::SetCommState(m_hComm&dcb);???//設置串口的dcb塊???////問題可能出在這里??設置了的DCB的塊
if(!bRet)???????????????????//屬性設置是否失敗
{
if(m_hComm)
{
CloseHandle(m_hComm);
m_hComm?=NULL;
}
return?FALSE;?????????//返回去執行
}
return?TRUE;??????????????//設置串口屬性成功的
}
BOOL?CSerialPort::SetupComm(DWORD?dwInqueueDWORD?dwQutQueue)?????
{
if(m_hComm?==?NULL)?return?FALSE;??????//判斷串口是否存在
return?::SetupComm(m_hCommdwInqueuedwQutQueue);???
}
BOOL?CSerialPort::PurgeComm(DWORD?dwFlags)
{
if(m_hComm?==?NULL)?return?FALSE;
return?::PurgeComm(m_hCommdwFlags);????//清除函數標志位
}
BOOL?CSerialPort::SetCommMask(DWORD?dwEvtMask)
{
if(m_hComm?==?NULL)?return?FALSE;
return?::SetCommMask(m_hCommdwEvtMask);???//設置事件類型
}
BOOL?CSerialPort::WriteFile(IN?LPCVOID?lpBufferIN?DWORD?nNumberOfBytesToWriteOUT?LPDWORD?lpNumberOfBytesWrittenIN?LPOVERLAPPED?lpOverlapped)
{???
if(m_hComm?==?NULL)?return?FALSE;
return::WriteFile(m_hCommlpBuffernNumberOfBytesToWritelpNumberOfBytesWrittenlpOverlapped);
}
BOOL?CSerialPort::ReadFile(OUT?LPVOID?lpBufferIN?DWORD?nNumberOfBytesToReadOUT?LPDWORD?lpNumberOfBytesReadIN?LPOVERLAPPED?lpOverlapped?)
{
if(m_hComm?==?NULL)?return?FALSE;
return::ReadFile(m_hCommlpBuffernNumberOfBytesToReadlpNumberOfBytesReadlpOverlapped);
}
BOOL?CSerialPort::ClearCommError(OUT?LPDWORD?lpErrorsOUT?LPCOMSTAT?lpStat)
{
if(m_hComm?==?NULL)?return?FALSE;
return?::ClearCommError(m_hCommlpErrorslpStat);
}
BOOL?CSerialPort::GetOverlappedResult
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-08-20?17:28??基于VS2010MFC的上位機源程序\
?????目錄???????????0??2018-04-22?16:23??基于VS2010MFC的上位機源程序\Debug\
?????文件??????166912??2018-08-20?17:27??基于VS2010MFC的上位機源程序\Debug\WinDemo.exe
?????文件?????1079244??2018-08-20?17:27??基于VS2010MFC的上位機源程序\Debug\WinDemo.ilk
?????文件?????5655552??2018-08-20?17:27??基于VS2010MFC的上位機源程序\Debug\WinDemo.pdb
?????目錄???????????0??2018-08-20?17:25??基于VS2010MFC的上位機源程序\ipch\
?????目錄???????????0??2018-08-20?17:25??基于VS2010MFC的上位機源程序\ipch\windemo-23b32b7c\
?????目錄???????????0??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\
?????文件????58609664??2018-08-20?17:28??基于VS2010MFC的上位機源程序\WinDemo.sdf
?????文件?????????888??2018-04-20?14:34??基于VS2010MFC的上位機源程序\WinDemo.sln
?????文件???????23040??2018-08-20?17:28??基于VS2010MFC的上位機源程序\WinDemo.suo
?????目錄???????????0??2018-08-20?17:28??基于VS2010MFC的上位機源程序\WinDemo\Debug\
?????文件????????8698??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\cl.command.1.tlog
?????文件??????112824??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\CL.read.1.tlog
?????文件????????8906??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\CL.write.1.tlog
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
?????文件???????????2??2018-08-20?17:27??基于VS2010MFC的上位機源程序\WinDemo\Debug\li
............此處省略52個文件信息
- 上一篇:C++內存管理課件——侯捷老師
- 下一篇:CC3D飛控資料(代碼原理圖)
評論
共有 條評論