串口代码有问题。
我只是这样做:
opencomm();
send();
closecomm();
ClearCommError()(在 recv() 内)
返回
comstat.cbInQue
发送的数量相同。
因此,如果 sizeof (sendbuff)
为 100,
我在 comstat.cbInQue
中得到 100。
在使用 ReadFile
读取一个字节后,comstat.cbInQue
递减(当然是在随后的 ClearCommError()
之后)。
读取的值不是写入的值。 没有设备连接到该端口。
最奇怪的是这段代码曾经可以工作,但现在不行了。
WORD sendbuff[128];
static HANDLE hComm;
static void opencomm (void)
{
static COMMTIMEOUTS timeouts = {0,0,0,0,0};
static DCB dcb = {
sizeof (DCB), // DCBlength
115200, // * BaudRate
1, // fBinary
0, // * fParity
0, // fOutxCtsFlow
0, // fOutxDsrFlow
0, // fDtrControl
0, // fDsrSensitivity
1, // fTXContinueOnXoff
0, // fOutX
0, // fInX
0, // fErrorChar
0, // fNull
0, // fRtsControl
0, // fAbortOnError
0, // fDummy2
0, // wReserved
8*k, // XonLim
2*k, // XoffLim
8, // * ByteSize
0, // * Parity
0, // * StopBits
0, // XonChar
1, // XoffChar
0, // ErrorChar
0, // EofChar
0, // EvtChar
0 // wReserved1
};
hComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hComm != INVALID_HANDLE_VALUE) {
SetupComm(hComm, 16*k, 16*k);
SetCommState(hComm, &dcb);
SetCommTimeouts(hComm, &timeouts);
}
}
static void closecomm (void)
{
CloseHandle(hComm);
}
static BYTE recv (void)
{
BYTE text;
DWORD temp;
COMSTAT comstat;
while (1) {
ClearCommError(hComm, &temp, &comstat);
if (comstat.cbInQue != 0) break;
Sleep(1);
}
ReadFile(hComm, &text, 1, &temp, NULL);
return text;
}
static void send (void)
{
DWORD temp;
// send to other comp
WriteFile(hComm, sendbuff, sizeof (sendbuff), &temp, NULL);
// check other comp done
if (recv() != 0xAA) {
Beep(1000, 100);
quit(); // comm error
}
}
最佳答案
是电缆。未正确屏蔽且太长。
关于c - 串口,WriteFile影响ReadFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16118096/