This problem has been asked many times, I read all the answers but still not able to figure out the problem.
I have set up connection with COM1 port Wrote data to COM1 port using WriteFile Now I am trying to read data from the port using ReadFile but it is not reading anything. I have hard ware loopback the 2nd and 3rd of RS232 so that input can be read as output
#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 // hTem开发者_JAVA技巧plate 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);
}
The program is not returning any error code, but it continously waits to read data from COM1 port and never receives anything. I am stuck as I can't really decifer where the problem is. Any pointers will be helpful.
Thanks,
Yogesh
You are not doing anything obvious to set the hardware handshake signals. A serial port device almost always checks the RTS and DTR signals and won't send anything until they are active. Short from EscapeCommFunction to force them on, set the DCB.fDtrControl and fRtsControl members to turn on hardware handshaking.
Not setting the basic communication properties like baudrate, parity, databits and stopbits leaves you open to failure as well if the defaults are not appropriate or were changed by another program.
And do check that wiring is okay with a separate program like Putty or Hyperterminal.
精彩评论