关于西门子MC35模块的串口读写问题!

halleyw 2004-08-28 01:56:16
定义:
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什么也没有。

...全文
49 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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