关于西门子MC35模块的串口读写问题!
定义:
LPCTSTR lpcsCommand = "AT+CPMS=SM,SM,SM\r"; \\设置收到短信存储位置为SIM卡
使用WriteFile写串口
if ( !WriteFile ( m_hComm, lpcsCommand, strlen(lpcsCommand) , &dwWrittenBytes, &m_oWrite ) )
{
if ( GetLastError() == ERROR_IO_PENDING )
{
GetOverlappedResult ( m_hComm, &m_oWrite, &dwTransferred, TRUE));
}
else
{
....
}
}
然后用WaitCommEvent( m_hComm, &dwEvtMask, &m_o ) 等待串口返回事件
if(!WaitCommEvent( m_hComm, &dwEvtMask, &m_o ))
{
if(GetLastError() == ERROR_IO_PENDING )
GetOverlappedResult(m_hComm, &m_o, &dwTransferred, TRUE);
}
最后用ReadFile读串口,看是否接收到“OK”
if ( !ReadFile ( m_hComm, pszRead, RECEIVE_BUFFER, &dwReadBytes, &m_oRead ) )
{
if ( GetLastError() == ERROR_IO_PENDING )
{
GetOverlappedResult(m_hComm, &m_oRead, &dwTransferred, TRUE);
}
else
{
...
}
}
if(strstr(pszRead,"OK"))
return TRUE;
else
return FALSE;
程序大体就这样。
这里使用了WaitCommEvent()函数,一直等待串口事件,也就是串口收到字符事件,它才返回。然后再去ReadFile()读串口,把字符读出来。
如果lpcsCMGF = "AT+CMGF=1\r";这个命令,一切正常,ReadFile()可以读到“OK”。
但是如果第一次使用 "AT+CPMS=" 这个命令去更改存储位置的时候,串口需要等待很长一段时间才能收到MC35模块是否设置成功的回复。所以使用WaitCommEvent(),应该是串口有数据才能返回,然后ReadFile()读到数据放入pszRead。但是为什么我什么也字符没接收到????即WaitCommEvent()好像没有收到任何字符事件它就返回了,ReadFile()中pszRead什么也没有。