熟悉串口编程的朋友请进

UpbeatJackson 2005-04-11 11:56:00
最近遇到一个怪问题。当我通过串口向硬件发送一个“00”字节之后,按照协议,该硬件应该回复“00 05”。但是在有的机器上,发送“00”之后,使用以下的伪代码读不到任何数据。调试时在这里检测到了EV_TXEMPTY和EV_RXCHAR事件,但是使用ClearCommError函数,得到的COMSTAT结构中的cbInQue为0。强行读取,也只能读到0个字节。

但是以上代码在另外机器上却可以通过,我发现出错机器上的串口位置是“Intel(R) 82801BA LPC Interface Controller - 2440”,而通过的机器上,串口位置是“PCI bus”。

使用MSCOMM32控件,在两种机器上都不存在这种问题。只是按照要求只能使用API。

希望熟悉这方面问题的朋友多多帮忙,谢谢!

伪代码如下:

DWORD dwEvents = EV_RING | EV_ERR | EV_BREAK |
EV_RLSD | EV_DSR | EV_CTS | EV_TXEMPTY | EV_RXCHAR;
DWORD dwCommEvent;
DWORD dwRead;
char chRead;

if (!SetCommMask(hComm, dwEvents))
// Error setting communications event mask

for ( ; ; ) {
if (WaitCommEvent(hComm, &dwCommEvent, NULL)) {
//调试时在这里检测到了EV_TXEMPTY和EV_RXCHAR事件。
//但是使用ClearCommError函数,得到的COMSTAT结构中的cbInQue为0。

do {
if (ReadFile(hComm, &chRead, 1, &dwRead, NULL))
// A byte has been read; process it.
else
// An error occurred in the ReadFile call.
break;
} while (dwRead);
}
else
// Error in WaitCommEvent
break;
}
...全文
144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nytony 2005-04-18
  • 打赏
  • 举报
回复
gxz
98440622 2005-04-18
  • 打赏
  • 举报
回复
to Jackson : 邮件发给你了,请查收,有什么问题可以发邮件过来。

UpbeatJackson 2005-04-18
  • 打赏
  • 举报
回复
to: 98440622(民工++)
邮件收到,谢谢!我马上看看,希望保持联系
UpbeatJackson 2005-04-13
  • 打赏
  • 举报
回复
有谁知道MSCOMM32控件使用什么访问技术?
我的问题会不会和主机的串口硬件有关?
UpbeatJackson 2005-04-13
  • 打赏
  • 举报
回复
等……
nytony 2005-04-13
  • 打赏
  • 举报
回复
帮你丁一下,我问下我们老大
98440622 2005-04-12
  • 打赏
  • 举报
回复
我写了一个串行通信动态库,就是简单的函数封装,使用方便,不涉及任何组件注册,完全API编写,实现串口阻塞方式读写,同时提供对特定串口协议的直接读写、编解码支持功能,完全免费,如果需要可以与我联系。

98440622@163.com

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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