串口操作 无 /*********************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; } }