PC机和单片机通讯,利用了CSerial类。
1、利用PL2303串口转USB芯片来通讯,可以正常工作;
2、用机器自带标准串口来通讯,用 铭心软体 的UartAssist可以正常工作,用龚建伟老师的串口例程,有时候会出错,但是如果再用UartAssist运行下,再切换过来,就可以正常工作了;
3、调试自己用CSerial写的程序,在write to port 这一步就失败了,,下面是代码,WaitForSingleObject超时,GetOverlappedResult中返回的dwBytesWritten为0。
4、没遇到过这么诡异的问题,,问题应该还是出在PC机串口上,但不知道怎么回事,希望大虾们指点一二。
 BOOL CSerial::WriteCommBlock(BYTE *lpByteBuffer, DWORD nNumberOfBytesToWrite)
{
         BOOL bWriteStat;
DWORD dwBytesWritten;
bWriteStat = WriteFile( m_hIDComDev, (LPSTR) lpByteBuffer, nNumberOfBytesToWrite,
                                  &dwBytesWritten, &m_OverlappedWrite );
if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) )
{
if( WaitForSingleObject( m_OverlappedWrite.hEvent, 20000 ) ) 
dwBytesWritten = 0;
else
{
GetOverlappedResult( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE );
m_OverlappedWrite.Offset += dwBytesWritten;
}
}
return( TRUE );
}