我已经安装了较旧的PL2303驱动程序。 devicemanager识别设备没有任何错误。在设备和官方软件之间发送和接收数据工作正常。
我的问题是,在执行ReadFile之后,程序什么都不做。我认为ReadFile正在等待来自设备的更多输入,因此坚持使用此功能。 在win7系统上尝试它会遇到同样的问题。
我写给设备的消息是有效的消息。
以下代码显示了通信。
hComm = CreateFile("COM3", //port name
GENERIC_READ | GENERIC_WRITE, //Read/Write
0, // No Sharing
NULL, // No Security
OPEN_EXISTING,// Open existing port only
0, // Non Overlapped I/O
NULL); // Null for Comm Devices /* establish connection to serial port */
if (hComm == INVALID_HANDLE_VALUE)
printf("Error in opening serial port");
else
printf("opening serial port successfully");
nNumberOfBytesToWrite = sizeof(message);
resW = WriteFile(
hComm,
message,
nNumberOfBytesToWrite,
&lpNumberOfBytesWritten,
NULL);
do
{
printf("\nread");
resR = ReadFile(
hComm,
&answer,
sizeof(lpNumberOfBytesRead),
&lpNumberOfBytesRead,
NULL);
SerialBuffer[i] = answer;
i++;
}
while (lpNumberOfBytesRead > 0);
return 0;
请帮助我,我不知道问题可能是什么。 托马斯
答案 0 :(得分:1)
在ReadFile()
调用中,第三个参数应该是sizeof(answer)
(或者可能只是1,因为它看起来像是一个字节),但肯定不是sizeof(lpNumberOfBytesRead)
。当假设DWORD
是单个字节时,它阻塞等待4个字节(answer
的大小)?
此外,如果您没有明确设置Comm timeout,您不知道ReadFile()在返回0退出循环之前会等待多长时间。如果超时是无限期的,那么它将永远不会存在循环。
此调用中还存在其他潜在问题,但未查看参数的声明方式,则无法说明。