主要目标:在本机通过com1串口对数据进行读写,可是怎么也接收不到数据,望高人指点......
发送按钮的代码如下:
m_strPort = "COM1";
hCom=CreateFile(m_strPort,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,//|FILE_FLAG_OVERLAPPED,
NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开通信端口错误!"), MB_OK, 0);
return false;
}
UpdateData(true);
// 对已经打开的串口进行设置
SetupComm(hCom,1024,1024);
// 全部清空发送缓冲区和接收缓冲区
PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);
COMMTIMEOUTS Timeouts;
//DCB dcb;
Timeouts.ReadIntervalTimeout=50;
Timeouts.ReadTotalTimeoutConstant=2000;
Timeouts.ReadTotalTimeoutMultiplier=0;
Timeouts.WriteTotalTimeoutConstant=2000;
Timeouts.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(hCom,&Timeouts);
m_nSetupbt = 9600;
GetCommState(hCom,&dcb);
dcb.BaudRate=m_nSetupbt;
dcb.ByteSize=8;
dcb.StopBits=ONESTOPBIT;
dcb.Parity=NOPARITY;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
if(!SetCommState(hCom,&dcb))
{
AfxMessageBox(_T("通信端口设置错误!"), MB_OK, 0);
CloseHandle(hCom);
return false;
}
UpdateData(false);
// 开始传送数据
DWORD length;
//unsigned send[10];
BOOL bWriteStat;
//send[0]=m_sSend;
char send[6]={"china"};
for (int i=0; i<sizeof(send); i++)
{
bWriteStat = WriteFile(hCom,(LPSTR)&send[i],1,&length,m_LpOverlappedWrite);
/*unsigned accept[10] = {0};
bReadStatus = ReadFile(hCom, accept,5,&length,m_OverlappedRead);*/
if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){
if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) length = 0;
else{
GetOverlappedResult( hCom, &m_OverlappedWrite, &length, FALSE );
m_OverlappedWrite.Offset += length;
}
}
length++;
}
return( TRUE );
然后接收是按钮的代码如下:
UpdateData(true);
DWORD length;
//unsigned accept[10] = {0};
char accept[6];
//char accept[20];
UpdateData(false);
// 接收已经写入串口的数据
bReadStatus = ReadFile(hCom, &accept,5,&length,m_LpOverlappedRead);
if (!bReadStatus)
{
if(GetLastError()==ERROR_IO_PENDING)
{
WaitForSingleObject(m_OverlappedRead.hEvent,1000);
return ((int)length);
}
return(0);
}
发送按钮的代码如下:
m_strPort = "COM1";
hCom=CreateFile(m_strPort,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,//|FILE_FLAG_OVERLAPPED,
NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开通信端口错误!"), MB_OK, 0);
return false;
}
UpdateData(true);
// 对已经打开的串口进行设置
SetupComm(hCom,1024,1024);
// 全部清空发送缓冲区和接收缓冲区
PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);
COMMTIMEOUTS Timeouts;
//DCB dcb;
Timeouts.ReadIntervalTimeout=50;
Timeouts.ReadTotalTimeoutConstant=2000;
Timeouts.ReadTotalTimeoutMultiplier=0;
Timeouts.WriteTotalTimeoutConstant=2000;
Timeouts.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(hCom,&Timeouts);
m_nSetupbt = 9600;
GetCommState(hCom,&dcb);
dcb.BaudRate=m_nSetupbt;
dcb.ByteSize=8;
dcb.StopBits=ONESTOPBIT;
dcb.Parity=NOPARITY;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
if(!SetCommState(hCom,&dcb))
{
AfxMessageBox(_T("通信端口设置错误!"), MB_OK, 0);
CloseHandle(hCom);
return false;
}
UpdateData(false);
// 开始传送数据
DWORD length;
//unsigned send[10];
BOOL bWriteStat;
//send[0]=m_sSend;
char send[6]={"china"};
for (int i=0; i<sizeof(send); i++)
{
bWriteStat = WriteFile(hCom,(LPSTR)&send[i],1,&length,m_LpOverlappedWrite);
/*unsigned accept[10] = {0};
bReadStatus = ReadFile(hCom, accept,5,&length,m_OverlappedRead);*/
if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){
if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) length = 0;
else{
GetOverlappedResult( hCom, &m_OverlappedWrite, &length, FALSE );
m_OverlappedWrite.Offset += length;
}
}
length++;
}
return( TRUE );
然后接收是按钮的代码如下:
UpdateData(true);
DWORD length;
//unsigned accept[10] = {0};
char accept[6];
//char accept[20];
UpdateData(false);
// 接收已经写入串口的数据
bReadStatus = ReadFile(hCom, &accept,5,&length,m_LpOverlappedRead);
if (!bReadStatus)
{
if(GetLastError()==ERROR_IO_PENDING)
{
WaitForSingleObject(m_OverlappedRead.hEvent,1000);
return ((int)length);
}
return(0);
}