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

📄 comoper.cpp

📁 上微机与单片机的通讯
💻 CPP
字号:

#include "StdAfx.h"
#include "ComOper.h"


/*****************************************************************
*	函数名 	:InitDCB
*	功能  	: 用来为指定的串口设备设置固定的硬件协议,包括串口工作的波特率
*             数据长度,校验位,和帧停止位
*	输入参数: 
*		Param1: hPort 有效的串口设备句柄
*	返回值	: 0 失败 非0成功
******************************************************************/
int InitDCB(HANDLE hPort)
{
		DCB PortDCB;//DCB串口参数结构
		PortDCB.DCBlength = sizeof(DCB);
		GetCommState(hPort,&PortDCB);
       	PortDCB.BaudRate = CBR_9600;//9600..波特率             
       	PortDCB.ByteSize = 8; //数据位                  
      	PortDCB.Parity = NOPARITY; //校验位             
       	PortDCB.StopBits = ONESTOPBIT; //停止位         
        return SetCommState (hPort, &PortDCB);      
}
/*****************************************************************
*	函数名 	:InitCommTimeouts
*	功能  	: 为指定的串口设置响应延时时间参数
*	输入参数: 
*		Param1: hPort 有效的串口设备句柄
*	返回值	: 0 失败 非0成功
******************************************************************/
int InitCommTimeouts(HANDLE hPort)
{
       COMMTIMEOUTS CommTimeouts;//时间参数
       GetCommTimeouts (hPort, &CommTimeouts);//取得时间参数
       CommTimeouts.ReadIntervalTimeout = MAXDWORD; //最大时间参数
       CommTimeouts.ReadTotalTimeoutMultiplier = 0;  
       CommTimeouts.ReadTotalTimeoutConstant = 0;    
       CommTimeouts.WriteTotalTimeoutMultiplier = 0;  
       CommTimeouts.WriteTotalTimeoutConstant = 0;    
       return SetCommTimeouts (hPort, &CommTimeouts);
}
/*****************************************************************
*	函数名 	:OpenPort
*	功能  	: 开启串口设备1,并初始化
*	返回值	: 串口设备的上下文句柄
******************************************************************/
HANDLE OpenPort(int port)//打开函数实现
{				//打开串口
	HANDLE hPort = NULL;
	switch(port)
	{
	case 1:
		hPort = CreateFile("COM1:", GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL); 
		break;
	case 2:
		hPort = CreateFile("COM2:", GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL); 
		break;
	case 3:
		hPort = CreateFile("COM3:", GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL); 
		break;
	default:
		return NULL;
	}
	if(hPort == INVALID_HANDLE_VALUE)//失败
	{
		return hPort;
	}
	if(!InitDCB(hPort))//串口参数初始化
	{
		ShutPort(hPort);
		hPort = NULL;
		return hPort;
	}
	if(!InitCommTimeouts(hPort))//时间参数设置
	{
		ShutPort(hPort);
		hPort = NULL;
		return hPort;
	}
	if(!SetCommMask(hPort, EV_RXCHAR))//设置字符事件
	{
		ShutPort(hPort);
		hPort = NULL;
		return hPort;
	}
	if(!SetupComm(hPort,2048,2048))//设置串口读写缓冲区大小	
	{
		ShutPort(hPort);
		hPort = NULL;
		return hPort;
	}
	return hPort;
}
/*****************************************************************
*	函数名 	:ShutPort
*	功能  	: 关闭串口
*		Param1: hPort 有效的串口设备句柄
*	返回值	: 无
******************************************************************/
void ShutPort(HANDLE hPort)//关闭串口
{
	 	SetCommMask(hPort,0);//取消串口事件
	  	CloseHandle(hPort); //关闭串口句柄
}


⌨️ 快捷键说明

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