Win32串口通讯函数PurgeComm不能清接收缓冲区的问题

这两天在做串口通讯上位机的开发,遇到了一个比较棘手的问题。使用Win32函数PurgeComm始终不能成功清除接收缓冲区中的数据,老是接收到不需要的数据。

刚开始,我以为是我的串口配置出了问题,检查了一遍,没发现什么问题。

然后,就开始百度,搜到的相关网页挺多的,却没什么卵用。

后来,抱着试试看的态度,我使用国外搜索引擎“http://www.aol.com/”。国外一位同行说,他也遇到了这样的问题,后来在使用PurgeComm函数之前,Sleep了一段时间,问题就解决了。

好奇怪。我的相应代码:

// ......

Sleep(16);				// i don't know why, without Sleep(16), PurgeComm function below
							// can't work. maybe it's a timing problem. and "16" is the minimum
							// value that make it works.

// discards all characters in the input buffer
if (!PurgeComm(hSerial, PURGE_RXCLEAR))
{
	strErrorMsg = "CSerialComm::OneWireRecv : error occured when clear receive buffer";
	return -1;
}

// ......


在做串口开发之前,在网上看了一些文档。

我觉得

PurgeComm,应该在需要的时候再用,而不是单纯的每次收发数据时都调用一次。

ClearCommError,应该在串口出错的时候,再调用,清除通讯设备的错误标志,使接收操作继续正常运行。

还有一个最重要的,一定要判断返回值,一定要判断返回值。



  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值