奇怪的串口问题,各位帮忙

fang_jb 2003-03-12 01:54:29
我的程序里开串口读写都是正常的,但却存在一个很奇怪的问题

每次重新启动机器以后,用我的程序第一次去读串口都是读不到任何信息,
需要用超级终端去连一下,连过之后再用我的程序,就可以工作了,
似乎是需要有个东西去引导一下还是怎么样的,是不是串口的初始化有什么问题?

请各位有经验的帮忙,谢谢先
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fang_jb 2003-03-12
  • 打赏
  • 举报
回复
写的部分里面有一些port->那些是传递进来的一个参数,把它去掉就可以看了
fang_jb 2003-03-12
  • 打赏
  • 举报
回复
BOOL bRead = TRUE;
BOOL bResult = TRUE;
DWORD dwError = 0;
DWORD BytesRead = 0;
COMSTAT comstat;
unsigned char RXBuff;
for(;;)
{
EnterCriticalSection(m_csCommunicationSync);
bResult = ClearCommError(m_hComm, &dwError, &comstat);
LeaveCriticalSection(m_csCommunicationSync);
if (comstat.cbInQue == 0)
break;
EnterCriticalSection(&port->m_csCommunicationSync);
if(bRead)
{
m_ov.Offset = 0;
m_ov.OffsetHigh = 0;
bResult = ReadFile(port->m_hComm,&RXBuff,1,&BytesRead,&port->m_ov);
if(!bResult)
{
switch (dwError = GetLastError())
{
case ERROR_IO_PENDING:
bResult = GetOverlappedResult(m_hComm,&m_ov,&BytesRead,TRUE);
if (!bResult)
ProcessErrorMessage("GetOverlappedResults() in ReadFile()");
break;
default:
ProcessErrorMessage("ReadFile()");
break;
}
}
else
bRead = TRUE;
}
if (!bRead)
{
bRead = TRUE;
bResult = GetOverlappedResult(port->m_hComm, // Handle to COMM port
&port->m_ov, // Overlapped structure
&BytesRead, // Stores number of bytes read
TRUE); // Wait flag
if (!bResult)
port->ProcessErrorMessage("GetOverlappedResults() in ReadFile()");
} // close if (!bRead)
LeaveCriticalSection(&m_csCommunicationSync);
}
这里是读串口的部分,暂时没使用写串口

求教
fang_jb 2003-03-12
  • 打赏
  • 举报
回复
if (m_ov.hEvent != NULL)
ResetEvent(m_ov.hEvent);
m_ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (m_hWriteEvent != NULL)
ResetEvent(m_hWriteEvent);
m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (m_hShutdownEvent != NULL)
ResetEvent(m_hShutdownEvent);
m_hShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

m_hEventArray[0] = m_hShutdownEvent;
m_hEventArray[1] = m_ov.hEvent;
m_hEventArray[2] = m_hWriteEvent;

InitializeCriticalSection(&m_csCommunicationSync);

bool bResult = FALSE;
char *szPort = new char[10];
EnterCriticalSection(&m_csCommunicationSync);
if (m_hComm != NULL)
{
CloseHandle(m_hComm);
m_hComm = NULL;
}
sprintf(szPort, "COM%d", m_data.portnr);
m_hComm = CreateFile(szPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); delete [] szPort;
if (m_hComm == INVALID_HANDLE_VALUE)
return FALSE;
PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
SetCommMask(m_hComm, EV_RXCHAR);
GetCommState(m_hComm, &m_dcb);
//这里的m_data是一个设置好的结构,里面就是些串口的基本参数
m_dcb.BaudRate = m_data.baud;
m_dcb.ByteSize = m_data.databits;
m_dcb.Parity = m_data.parity;
m_dcb.StopBits = m_data.stopbits;
m_dcb.fBinary = TRUE;
m_dcb.fParity = FALSE;
SetCommState(m_hComm, &m_dcb);

LeaveCriticalSection(&m_csCommunicationSync);
unsigned dThreadNb = 0;
m_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL,0,SerialPortThread,this,0,&dThreadNb));
if (m_hThread == NULL)
return FALSE;
return TRUE;


这里是打开串口的部分
morningsun 2003-03-12
  • 打赏
  • 举报
回复
源代码呢?
yzb1000 2003-03-12
  • 打赏
  • 举报
回复
学习,up
fang_jb 2003-03-12
  • 打赏
  • 举报
回复
我顶
fang_jb 2003-03-12
  • 打赏
  • 举报
回复
顶一下顶一下,高手进来帮忙啊

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧