hur.cn - 华软网

 热门搜索

串口问题

  作者:未知    来源:网络    更新时间:2011/1/10
DWORD dwError;
COMSTAT Stat;  
char error [10];
if(::ClearCommError(m_hCom, &dwError, &Stat) && dwError > 0) //消灭毛病
{
::PurgeComm(m_hCom, PURGE_RXABORT | PURGE_RXCLEAR); //消灭输入缓冲区
return 0;
}
CPMUtility::WriteDebugOut(_T("open success!!!"));
if(!Stat.cbInQue)// 缓冲区无数据
{
CPMUtility::WriteDebugOut(_T("no data!!!"));
return 0;
}
    
unsigned long uReadLength = 0;
dwBufferLength = dwBufferLength - 1 > Stat.cbInQue ? Stat.cbInQue : dwBufferLength - 1;

SetCommMask (m_hCom, EV_RXCHAR); //设置程序响应的事件
PurgeComm(m_hCom,PURGE_RXCLEAR|PURGE_TXCLEAR); //清空串口的接收缓冲区,需要性不大,但有保证作用
//ClearCommError(hPort,&dwErrorFlags,&ComStat); //消灭串口状态标志,并前往当前状态
while (m_hCom != INVALID_HANDLE_VALUE) //程序在串口有效的状态下,无限循环
{
if(WaitCommEvent(m_hCom, &dwCommModemStatus,0)) //期待串口的事件发生,当dwCommModemStatus值为1时表示接收到数据
{
SetCommMask (m_hCom, EV_RXCHAR); //重新设置程序响应的事件,但这个只是保证程序的平安性,一般其实不起作用


if (dwCommModemStatus & EV_RXCHAR) //检测收到的事件是否为"接收字符"的事件
{
ClearCommError(m_hCom,&dwErrorFlags,&ComStat); //消灭串口状态标志,并前往当前状态

dwLength=ComStat.cbInQue; //cbInQue前往在串行驱动程序输入行列中的字符数 if(dwLength>0)//防止无故产生事件
{
//从串口读取数据
//读入数据,并前往数据长度,采取同步方式
if(dwLength <10240)
{
fReadState=ReadFile(m_hCom, buff, dwBufferLength, &dwLength, NULL);
if(!fReadState)
{
CPMUtility::WriteDebugOut(_T("read  falied"));
}
else
{
CPMUtility::WriteDebugOut((char *)buff,Btlength);
}
}
else//当缓存溢出就措置惩罚读掉
{
DWORD j=dwLength%10240;
for(int i=0;i <dwLength/10240;i++)
fReadState=ReadFile(m_hCom,buff,dwLength,&dwLength,NULL);
fReadState=ReadFile(m_hCom,buff,j,&j,NULL);
}
}
}
}
PurgeComm(m_hCom,PURGE_RXCLEAR);//清空串口的接收缓冲区,需要性不大,但有保证作用
//重新获得串口状态,需要性不大,48表示没有事件产生
GetCommModemStatus (m_hCom, &dwCommModemStatus);
}


上面是我在网上找的一段代码,可是Stat.cbInQue一直为0,列位帮我看看,谢谢
---华软 网友回答---
你这个代码放在什么函数里面? 设置了异步窗口事件消息? 是否是一直没有读写相关串口操作?
---华软网友回复---
放在读串口的线程函数中的,这是wince下的,不支持异步
---华软网友回复---
能够参照这个http://www.naughter.com/serialport.html,这个是对win32 api操作串口的封装
---华软网友回复---
Stat.cbInQue表示串口读缓冲区的size;
需要有数据往你监听这个串口发送数据,
你这个才能有状态。


---华软网友回复---
数据肯定是在发的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。