用函数WriteFile()写串口时总是写不进去,这是为什么呢?哪位大神指教一下,串口打开了,也初始化了
------解决方案--------------------
[b]
apiReturn _stdcall ConnectScanner(HANDLE *hScanner, char *szPort, int nBaudRate)
{
apiReturn ret=_OK;
//WORD gwHardVer;
//WORD gwSoftVer;
HANDLE hComm;
hComm = CreateFile( szPort,
GENERIC_READ
------解决方案--------------------
GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
if (hComm == INVALID_HANDLE_VALUE)
return _init_rs232_err;
SetupComm(hComm, 0xFA00, 0xFA00); //InQueueSize,OutQueueSize
SetCommMask(hComm, 0); // disable events
COMMTIMEOUTS cto;
GetCommTimeouts(hComm, &cto);
cto.ReadIntervalTimeout = 1000;
cto.ReadTotalTimeoutMultiplier = 200 ;
cto.ReadTotalTimeoutConstant = 2000 ;
cto.WriteTotalTimeoutMultiplier = 200 ;
cto.WriteTotalTimeoutConstant = 2000 ;
/*cto.ReadIntervalTimeout = 4;
cto.ReadTotalTimeoutMultiplier = 2 ;
cto.ReadTotalTimeoutConstant = 50 ;
cto.WriteTotalTimeoutMultiplier = 20 ;
cto.WriteTotalTimeoutConstant = 50 ;*/
if (!SetCommTimeouts( hComm, &cto))
{
CloseHandle(hComm);
return _init_rs232_err;
}
int BaudRate[]={115200,57600,38400,19200,9600};
int i;
DCB dcb;
GetCommState(hComm,&dcb);
if (nBaudRate==0)
dcb.BaudRate = 115200;
else
{
for (int i=0; i<9; i++)
if (nBaudRate==BaudRate[i])
break;
if (i>8)
return _baudrate_error;
dcb.BaudRate = nBaudRate;
}
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY; // 如果8位数据, 则必须无校验
if(!SetCommState(hComm, &dcb))
{
CloseHandle(hComm);
return _init_rs232_err;
}
PurgeComm(hComm, PURGE_TXCLEAR); // flush transimition queue
PurgeComm(hComm, PURGE_RXCLEAR); // flush receiveing queue
GetCommTimeouts(hComm, &cto);
GetCommTimeouts(hComm, &cto);
cto.ReadIntervalTimeout = 1000;
cto.ReadTotalTimeoutMultiplier = 1000 ;
cto.ReadTotalTimeoutConstant = 10000 ;
cto.WriteTotalTimeoutMultiplier = 1000 ;
cto.WriteTotalTimeoutConstant = 10000 ;
SetCommTimeouts( hComm, &cto);
*hScanner = hComm;
return _OK;
}