⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 communic.cpp

📁 采用VC编写的串口通信程序
💻 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 + -