📄 communic.cpp
字号:
#include "StdAfx.h"
#include "Communic.h"
#include "string.h"
HANDLE hComRece;
HANDLE hComTrans;
CWinThread *lpReceiveThread;
CWinThread *lpTransmitThread;
char ReceiveData[MAXSTRLNGTH];
BOOL StopFlag=0;
void InitCom()
{
//创建发送串口Com1
hComTrans=CreateFile("COM1",//通信端口
GENERIC_READ|GENERIC_WRITE,
0,//FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hComTrans==INVALID_HANDLE_VALUE)
{
AfxMessageBox("Com1 Error");
return;
}
else
{
AfxMessageBox("Com1 OK !");
}
//设置串口缓冲区大小
SetupComm(hComTrans,COMBUFFER,COMBUFFER);
//Set the timeout of the COM
COMMTIMEOUTS TmOutTrans;
TmOutTrans.ReadIntervalTimeout=0;
TmOutTrans.ReadTotalTimeoutMultiplier=0;
TmOutTrans.ReadTotalTimeoutConstant=0;
TmOutTrans.WriteTotalTimeoutMultiplier=0;
TmOutTrans.WriteTotalTimeoutConstant=0;
SetCommTimeouts(hComTrans,&TmOutTrans);
//设置串口通信格式
DCB ComDcbTrans;
GetCommState(hComTrans,&ComDcbTrans);//取得当前设置
ComDcbTrans.BaudRate = 19200;//波特率设置
ComDcbTrans.ByteSize = 8;//数据位设置
ComDcbTrans.Parity =NOPARITY;//校验设置
ComDcbTrans.StopBits =ONESTOPBIT;//停止位设置
ComDcbTrans.fBinary = TRUE;
ComDcbTrans.fParity = TRUE;
ComDcbTrans.fOutX = 0;
ComDcbTrans.fInX = 0;
ComDcbTrans.ErrorChar= 63;
ComDcbTrans.EofChar = 0;
SetCommState(hComTrans,&ComDcbTrans);//重新设置通信格式
//创建发送串口Com2
hComRece=CreateFile("COM2",//通信端口
GENERIC_READ|GENERIC_WRITE,
0,//FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hComRece==INVALID_HANDLE_VALUE)
{
AfxMessageBox("Com2 Error");
return;
}
else
{
AfxMessageBox("Com2 OK !");
}
//设置串口缓冲区大小
SetupComm(hComRece,COMBUFFER,COMBUFFER);
//Set the timeout of the COM
COMMTIMEOUTS TmOutRece;
TmOutRece.ReadIntervalTimeout=INTERVALTM;
TmOutRece.ReadTotalTimeoutMultiplier=0;
TmOutRece.ReadTotalTimeoutConstant=0;
TmOutRece.WriteTotalTimeoutMultiplier=0;
TmOutRece.WriteTotalTimeoutConstant=0;
SetCommTimeouts(hComRece,&TmOutRece);
//设置串口通信格式
DCB ComDcbRece;
GetCommState(hComRece,&ComDcbRece);//取得当前设置
ComDcbRece.BaudRate = 19200;//波特率设置
ComDcbRece.ByteSize = 8;//数据位设置
ComDcbRece.Parity =NOPARITY;//校验设置
ComDcbRece.StopBits =ONESTOPBIT;//停止位设置
ComDcbRece.fBinary = TRUE;
ComDcbRece.fParity = TRUE;
ComDcbRece.fOutX = 0;
ComDcbRece.fInX = 0;
ComDcbRece.ErrorChar= 63;
ComDcbRece.EofChar = 0;
SetCommState(hComRece,&ComDcbRece);//重新设置通信格式
}
UINT TransmitThread(LPVOID pParam)
{
char TransBuff[MAXDATALNGTH+1];
DWORD TransNumber;
for (int i=0;i<MAXDATALNGTH;i++)
TransBuff[i]=0x41+i%MAXDATALNGTH;
TransBuff[i]=0;
for (i=0;i<10;i++)
{
WriteFile(hComTrans,TransBuff,MAXDATALNGTH,&TransNumber,NULL);
//Sleep(INTERVALTM+1);
}
return 0;
}
UINT ReceiveThread(LPVOID pParam)
{
char ReceBuff[MAXDATALNGTH+1];
DWORD ReceNumber;
for (int i=0;i<MAXSTRLNGTH;i++)
ReceiveData[i]=0;
while (!StopFlag)
{
for (i=0;i<MAXDATALNGTH+1;i++)
ReceBuff[i]=0;
ReadFile(hComRece,ReceBuff,MAXDATALNGTH,&ReceNumber,NULL);
if (ReceNumber!=0)
{
strcat(ReceiveData,ReceBuff);
PostMessage((HWND)pParam,CWM_RECEIVEDATA,0,0);
}
Sleep(1);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -