WINCE中串口通信很郁闷的问题。

xing1983 2002-10-18 04:08:47
1。我向串口发送AT指令集,然后接受数据,
我发现发送指令后,有时接受得到完整的数据,有时不能接受的到,
我在读和写之间加了个Sleep后,接收到数据的成功率搞了一点,
请问有什么办法能 100%地接收到完整正确的数据啊。
2。我每次运行程序的时候是不是要先清空缓冲区啊。
怎么去清空啊。
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xing1983 2002-10-22
  • 打赏
  • 举报
回复
那可要花点时间哦
roson 2002-10-22
  • 打赏
  • 举报
回复
同意楼上的说法!!!!!!!!!!!!!
smiles 2002-10-21
  • 打赏
  • 举报
回复
我的经验:缓冲区设为1024,串口设备每一秒发送一次数据,含有多条报文,程序sleep(2000)(睡眠两秒),后读数据,每次都不超过缓冲区长度,可以把缓冲区读到的数据写入文件,然后清空缓冲区,继续循环读,如果不sleep直接读数据,只会读到不完整的报文,只能丢弃他们
airy1727 2002-10-20
  • 打赏
  • 举报
回复
前來學習
謝謝
xing1983 2002-10-20
  • 打赏
  • 举报
回复
也不知道是为什么?
xing1983 2002-10-20
  • 打赏
  • 举报
回复
但是不使用Sleep就读不到正确的数据
snaill 2002-10-20
  • 打赏
  • 举报
回复
使用Sleep是不严谨的,应该使用线程不停的读串口才行
friends1979 2002-10-19
  • 打赏
  • 举报
回复
1.在定义串口时,要对他的串口时间进行调整。这个根据自己的情况。
我在读和写之间也加了sleep.
2.PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清除缓冲区

我的一些定义:
SetCommState(hCom,&dcb); //串口初始化设置
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清除缓冲区
SetCommMask(hCom,EV_RXCHAR);//指定要监视的事件监测是否有字符。

TimeOuts.ReadIntervalTimeout=MAXDWORD; //读间隔超时
TimeOuts.ReadTotalTimeoutMultiplier=0; //读超时系数
TimeOuts.ReadTotalTimeoutConstant=0; //读超时常量
TimeOuts.WriteTotalTimeoutMultiplier=0; //写超时系数
TimeOuts.WriteTotalTimeoutConstant=0; //写超时常量
SetCommTimeouts(hCom,&TimeOuts);

这是一个监测线程
ClearCommError(dlg->hCom,&Error,&stat);
WaitCommEvent(dlg->hCom,&dwMask,NULL);
if(dwMask==EV_RXCHAR) //串口有数据到达
{
//等待上次消息处理完(INFINITE 内部函数,无限等待写操作完成)
WaitForSingleObject(dlg->m_MsgEvent,INFINITE);
ResetEvent(dlg->m_MsgEvent); //重新初始化消息事件给初始化窗体发送消息,请求接收数据
Sleep(500);
PostMessage(m_hTermWnd,WM_COMMNOTIFY,EV_RXCHAR,0);
continue;
}
}

希望对你有用

19,498

社区成员

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

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