把PC串口2,3脚短接,没有其他连线。程序用CreateFile打开串口,WriteFile往串口写数据,ReadFile从串口读数据。可以打开并进行DCB和超时设定,返回值为成功;WriteFile和ReadFile均返回0,错误号87,ERROR_INVALID_PARAMETER。
设定串口的代码如下,左看右看实在是没啥:
m_hComm = CreateFile(_T("COM1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if (INVALID_HANDLE_VALUE == m_hComm)
{
MessageBox(_T("Port cannot be opened or has been opened!"));
return;
}
BOOL ret = GetCommState(m_hComm, &dcb);
dcb.BaudRate = 115200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fParity = FALSE;
dcb.fBinary = TRUE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = 0;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fTXContinueOnXoff = 0;
dcb.EvtChar = 'q'; //设置状态参数
ret = SetCommMask(m_hComm, EV_RXFLAG | EV_RXCHAR);
ret = SetupComm(m_hComm, 512, 512);
if(!SetCommState(m_hComm, &dcb))
{
MessageBox(_T("Cannot set port state. Please verify parameters!"));
ClosePort();
return;
} //设置超时参数
ret = GetCommTimeouts(m_hComm, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 100;
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
CommTimeOuts.ReadTotalTimeoutConstant = 100;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
if(!SetCommTimeouts(m_hComm, &CommTimeOuts))
{
MessageBox(_T("Cannot set timeouts!"));
ClosePort();
return;
}

ret = PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);请教各位大侠。