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

📄 serial1.cpp

📁 windows环境下的串口调试工具。具有配置串口,自动接受,手动发送数据的功能.
💻 CPP
字号:
// Serial1.cpp: implementation of the CSerial class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Serial.h"
#include "Serial1.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSerial::CSerial()
{
	hCom=NULL;
}

CSerial::~CSerial()
{

}

HANDLE CSerial::OpenCommPort(LPSTR lpCom)
{
//打开串口

		hCom=CreateFile( lpCom, GENERIC_READ | GENERIC_WRITE,/* 允许读写*/
				0,
				NULL,
				OPEN_EXISTING,
				FILE_FLAG_OVERLAPPED,
				NULL);
		ASSERT(hCom!=INVALID_HANDLE_VALUE);//检测打开串口操作是否成功
		return hCom;
}

void CSerial::InitialCommPort()
{
	memset(&m_ReadOverlapped,0,sizeof(OVERLAPPED));//使OVERLAPPED结构成员为0
	memset(&m_WriteOverlapped,0,sizeof(OVERLAPPED));
	m_WriteOverlapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
	m_ReadOverlapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);


//设置输入、输出缓冲区的大小

	SetupComm( hCom, 4096,4096) ; 
	PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR
				| PURGE_RXCLEAR ); //清干净输入、输出缓冲区
	
//定义超时结构,并填写该结构

	COMMTIMEOUTS TimeOuts ; 

//把间隔超时设为最大,把总超时设为0,将导致ReadFile函数立即返回并完成操作

	TimeOuts.ReadIntervalTimeout=MAXDWORD;
	TimeOuts.ReadTotalTimeoutConstant=2000;
	TimeOuts.ReadTotalTimeoutMultiplier=0;

//设置写超时,以指定WriteComm成员函数中的GetOverlappedResult函数

	TimeOuts.WriteTotalTimeoutConstant=2000;//2000
	TimeOuts.WriteTotalTimeoutMultiplier=50;//50
	
	SetCommTimeouts(hCom,&TimeOuts);

//设置串口的DCB
	
//	DCB dcb;// 定义数据控制块结构

	GetCommState(hCom,&dcb);
	BuildCommDCB("9600,N,8,1",&dcb);
	SetCommState(hCom,&dcb);
}

void CSerial::SetCommDCB(DCB *Commdcb)
{
	GetCommState(hCom,&dcb);
	dcb.BaudRate=Commdcb->BaudRate;
	dcb.ByteSize=Commdcb->ByteSize;
	dcb.Parity=Commdcb->Parity;
	dcb.StopBits=Commdcb->StopBits;
	SetCommState(hCom,&dcb);
}

BOOL CSerial::ReadComm(char *buffer, DWORD dwLength)
{
	DWORD dwBytesRead=0;

//	buffer=NULL;
	if(!hCom)return 0;

	dwBytesRead=dwLength;
	int t=0;

	if(dwBytesRead)
	{
		if(!(t=ReadFile(hCom,buffer,dwLength,&dwBytesRead,&m_ReadOverlapped)))
			return 0;
	}
	
	return 1;
}

BOOL CSerial::WriteComm(char *buffer, DWORD dwLength)
{
	int t;
	DWORD dwBytesWrite=0;
	if(!hCom)return 0;
	
	if(!(t=WriteFile(hCom,buffer,dwLength,&dwBytesWrite,&m_WriteOverlapped)))return 0;
	else
		return 1;
}

void CSerial::CloseCommPort()
{
	if(hCom)CloseHandle(hCom);
	if(m_WriteOverlapped.hEvent)CloseHandle(m_WriteOverlapped.hEvent);
	if(m_ReadOverlapped.hEvent)CloseHandle(m_ReadOverlapped.hEvent);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -