求教串口通讯有关问题

求教串口通讯问题
我写的串口通讯程序与一般的迷你USB串口,虚拟串口以及串口卡的串口通讯都没有问题,今天用标准USB串口(与设备连接的一方是方型的U口,与电脑连接的是普通扁平型usb接口)进行通讯时发现数据包发送了一遍(通过监控工具发现数据发送完全),但是没有任何数据返回,同时接着发送第二遍时通过监控工具就看不到有数据发送了,应该是串口死掉,重启串口再次发送,又与上面情况一致。
请问这是什么原因呢?麻烦大家给分析提供个解决思路,谢谢了
代码及问题描述如下:

unsigned long WINAPI TSerialPort::CommThread(LPVOID Param)
{
TSerialPort *Port = (TSerialPort *)Param;
if (NULL == Port)
{
        ExitThread(0);
}

if (INVALID_HANDLE_VALUE == Port->m_Comm)
{
ExitThread(0);
}

Port->m_ThreadAlive = true;

unsigned long Event = 0;
unsigned long CommEvent = 0;
unsigned long Error = 0;
COMSTAT Comstate;
bool Result = true;

    if( Port->m_Comm )
PurgeComm(Port->m_Comm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
while(1)
{
Result = WaitCommEvent(Port->m_Comm, &Event, &Port->m_Overlapped);
if (Result)
{
Result = ClearCommError(Port->m_Comm, &Error, &Comstate);
if (Comstate.cbInQue == 0)
{
continue;
}
}
else
{
 switch (Error = GetLastError())
            {   
case ERROR_IO_PENDING:
                {    
                    break;  
                }  
            case 87:  
                {   
                    break;  
                }
            default:  

                    Port->ProcessErrorMessage("WaitCommEvent()");  
                    break;  
}
}
}

Event = WaitForMultipleObjects(3, Port->m_EventArray, false, INFINITE);
switch(Event)
{
case 0:
         Port->m_ThreadAlive = false;
         ExitThread(0);
break;
case 1:
GetCommMask(Port->m_Comm, &CommEvent);
if (CommEvent & EV_RXCHAR)    //如果屏蔽掉这句,能够接收到完整的数据包;
{                             //但是接收完后还在这里死循环,不解。。。
                                                      //如果不屏蔽,就在这里死循环。
ReceiveChar(Port, Comstate);
}
break;
case 2:
SendChar(Port);
break;
}
}
return 0;
}

------解决方案--------------------
以前通讯没问题不要先怀疑程序问题,先用串口调试工具试一下有反应吗?再确定问题在那儿。
------解决方案--------------------
二楼说的对, 若程序以往没问题的话, 先用工具排查接口的问题, USB转串口硬件、驱动都有过不稳定的情况出现
------解决方案--------------------
冯华亮的一段源码, 用了近10年了,一直没问题,你参考一下
//线程执行函数
void __fastcall TComThread::Execute()
{
if(hComm==INVALID_HANDLE_VALUE)  //串口句柄有效
{
Application->MessageBox("串口句柄无效,串口监控线程无法工作.","错误",MB_ICONSTOP);
return;
}
//清空串口缓冲区,退出所有相关操作
PurgeComm(hComm, PURGE_RXCLEAR
------解决方案--------------------
PURGE_TXCLEAR
------解决方案--------------------

PURGE_RXABORT
------解决方案--------------------
PURGE_TXABORT);