这个问题已被多次询问,我阅读了所有的答案,但仍然无法找出问题。
我已经设置了与COM1端口的连接 使用WriteFile将数据写入COM1端口 现在我正在尝试使用ReadFile从端口读取数据,但它没有读取任何内容。 我有硬件环回RS232的第二和第三,所以输入可以作为输出读取
#include <windows.h>
#include <stdio.h>
# include <tchar.h>
int main(int argc, char *argv[])
{
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
char *pcCommPort = "COM3";
hCom = CreateFile( _T("COM3"), //pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
0, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n", GetLastError());
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
}
dcb.BaudRate = 9600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n", GetLastError());
}
printf ("Serial port %s successfully reconfigured.\n", pcCommPort);
char Buff[] = "Hello";
char Buff2[50] = {};
DWORD dwNumBytesWritten;
DWORD dwBytesTransferred;
printf("\n\n\n\n\n\n Start writting ! \n");
WriteFile (hCom, // Port handle
Buff, // Pointer to the data to write
sizeof(Buff), // Number of bytes to write
&dwNumBytesWritten, // Pointer to the number of bytes written
NULL // Must be NULL for Windows Embedded CE
);
printf("\n Bytes Written to the terminal ");
for( int j=0; j<dwNumBytesWritten; j++)
printf("%c",Buff[j]);
printf("\n Byte length %d \n", dwNumBytesWritten);
printf("\n\n\n\n\n\n Start reading !\n");
ReadFile (hCom, // Port handle
Buff2, // Pointer to data to read
dwNumBytesWritten, // Number of bytes to read
&dwBytesTransferred, // Pointer to number of bytes read
NULL // Must be NULL for Windows Embeddded CE
);
for( int j=0; j<dwNumBytesWritten; j++)
printf("%c",Buff2[j]);
printf("\n BytesRead from the terminal:%d \n",dwBytesTransferred);
CloseHandle(hCom);
int num;
scanf("%d", &num);
}
程序没有返回任何错误代码,但是它一直等待从COM1端口读取数据并且从不接收任何内容。我陷入困境,因为我无法解决问题所在。任何指针都会有所帮助。
谢谢,
约杰什
答案 0 :(得分:1)
您没有做任何明显的设置硬件握手信号。串行端口设备几乎总是检查RTS和DTR信号,并且在它们处于活动状态之前不会发送任何信号。从EscapeCommFunction缩短以强制它们开启,设置DCB.fDtrControl和fRtsControl成员以打开硬件握手。
如果默认值不合适或被其他程序更改,则不设置波特率,奇偶校验,数据位和停止位等基本通信属性也会导致失败。
使用像Putty或Hyperterminal这样的单独程序检查接线是否合适。