鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c++ > >

串口的一些基本操作

来源:互联网 作者:佚名 时间:2016-06-06 10:05
串口操作 无 /*********************create by linhs 2016-5-26 16:51:15*********************/#ifndef SERIALPORTFUN_H#define SERIALPORTFUN_HHANDLE openPort(char* portName);BOOL InitPort( char* portName ,//端口名 UINT baud ,//波特率 char parity
串口操作 <无>
/*********************
create by linhs 
2016-5-26 16:51:15
*********************/
#ifndef SERIALPORTFUN_H
#define SERIALPORTFUN_H


HANDLE openPort(char* portName);
BOOL InitPort( 
			  char* portName ,//端口名
			  UINT baud ,//波特率
			  char parity ,//校验位
			  UINT databits ,//数据位
			  UINT stopsbits, //停止位
			  HANDLE &hComm
			  );


BOOL WritePort(	HANDLE & hComm,char pData[],int length);
BOOL ReadPort(HANDLE &hComm,char buffer[],int len,int &iAcLen);
void ClosePort(HANDLE hComm);

#endif 
#include "stdafx.h"
#include "SerialPortFun.h"



HANDLE openPort(char* portName){
	
	HANDLE hComm;
	hComm = CreateFileA(portName,//"COM4",//     
        GENERIC_READ | GENERIC_WRITE,       
        0,         //共享模式设置,串口只能设置为零                      
        NULL,      //安全属性设置,NULL时采用默认的安全属性                
        OPEN_EXISTING,      //对于串口的创建只能设置为“OPEN_EXISTING”
        0,       //文件属性及操作标志,当不使用用重叠操作时,不用设置
        0		//读操作时,指向苏格拉底句柄,对于串口操作,该参数可以设为“NULL”
		); 
	return hComm;
}

BOOL InitPort( 
			  char* portName ,//端口名
			  UINT baud ,//波特率
			  char parity ,//校验位
			  UINT databits ,//数据位
			  UINT stopsbits, //停止位
			  HANDLE &hComm
			  )
{
	hComm = openPort(portName);
	if(!hComm)
	{
		return FALSE;
	}
	/** 设置串口的超时时间,均设为0,表示不使用超时限制 */   
	
	
	//设置串口超时参数
	COMMTIMEOUTS  CommTimeouts; 
	CommTimeouts.ReadIntervalTimeout         = 0;  
	CommTimeouts.ReadTotalTimeoutMultiplier  = 50;   
	CommTimeouts.ReadTotalTimeoutConstant    = 300;  
	CommTimeouts.WriteTotalTimeoutMultiplier = 50;    
	CommTimeouts.WriteTotalTimeoutConstant   = 300;  
	BOOL bIsSuccess;
	bIsSuccess =SetCommTimeouts(hComm, &CommTimeouts);  
	
	/** 使用DCB参数配置串口状态 */  
	DCB dcb;
	SetCommState(hComm, &dcb); 
	PurgeComm(hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);   
	return bIsSuccess;
}



BOOL WritePort(	HANDLE & hComm,char pData[],int length)
{
	
	BOOL   bResult     = TRUE;   
    DWORD  BytesToSend = 0;   
    if(hComm == INVALID_HANDLE_VALUE)   
    {   
        return   FALSE;
    }   
	
    bResult = WriteFile(hComm,
		pData, 
		length, 
		&BytesToSend,
		NULL);       
    
	return bResult;
}


BOOL ReadPort(HANDLE &hComm,char buffer[],int len,int &iAcLen){
	
	//int bufferSize=SerialPort::BytesToRead();
	
	int count=0;
	BOOL bRet=0;
	iAcLen=0;
	unsigned long lAcLen;
	bRet = ReadFile(hComm,
		buffer,
		len,
		&lAcLen,
		NULL);
	iAcLen=lAcLen;
	return bRet;
}
void ClosePort(HANDLE hComm)
{
	if( hComm != INVALID_HANDLE_VALUE )  
	{       
		CloseHandle( hComm );      
		hComm = INVALID_HANDLE_VALUE; 	
	}
}
网友评论
<