这种情况下怎么进行串口通信?

edmond98 2003-10-20 11:39:33


一个串口设备每隔一定的时间产生一定的数据

如果我用计时器每个相同的时间读取串口的数据,有可能每次得到的数据都只是

设备产生数据的一部分,也就破坏了完整性,那样读入的数据也就没有意义了

这样的话,怎么才能重串口读取有效的数据那

用API

...全文
38 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人丁 2003-10-24
  • 打赏
  • 举报
回复
对串口的数据间隔时间设置一个合理的值,这样串口数据包发送间隔时间超过这个时间时串口缓冲区内才能取得数据,你的定时器间隔要更短一些,不然会丢失数据……不过我建议采用线程方案除非你的数据量非常小并且实时性很低……
DCB Dcb;
GetCommState(hCommDevice,&Dcb);
Dcb.BaudRate=9600;//
Dcb.ByteSize=8;
Dcb.Parity=NOPARITY;
Dcb.StopBits=ONESTOPBIT;
Dcb.fDtrControl=0;
SetCommState(hCommDevice,&Dcb); COMMTIMEOUTS Timeouts;
GetCommTimeouts(hCommDevice,&Timeouts);
Timeouts.ReadIntervalTimeout=500;//数据间隔时间
Timeouts.ReadTotalTimeoutMultiplier=0;
Timeouts.ReadTotalTimeoutConstant=0;
SetCommTimeouts(hCommDevice,&Timeouts);
EscapeCommFunction(hCommDevice,SETDTR|SETRTS);
zler1999 2003-10-21
  • 打赏
  • 举报
回复
我用VC作过你说的这样的程序!我把我的思路告诉你!
串口传上来的数据,应该可以知道什么时候结束,比如说判断上传的数据的校验,结束标志,数据长度等等!
这样你就可以在接收到数据时判断一下数据是否完全了!如果接收不完全,把数据存储在数组,再进行下一次的接收,直到接收完全就可以了.当然也可能出现其他的错误,这要自己处理了哦!
要是无法判断数据是否结束,我的办法就是让读取数据的延时足够长,保证接收完全吧!
哈哈,第一次给人家回答问题,不对的地方多多指教哦!

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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