Я пишу код последовательной связи в C++ в Visual Studio 2010. Для этого примера I try this, который работает нормально. Теперь я пытаюсь отправить строку и прочитать ее, закоротив Rx и Tx контакты моего оборудования. Вот мой код для отправки строки: -Невозможно прочитать запись на последовательном порту в C++
char *buffer ="hello";
DWORD bytesSend;
DWORD errors;
COMSTAT status;
DWORD numWritten;
WriteFile(hCom, buffer, strlen(buffer), &numWritten, NULL);
printf("send succesfully\n");
и вот мой приемный код: -
DWORD numRead;
BOOL ret = ReadFile(hCom, buffer, 5, &numRead, NULL);
if(!ret)
{
printf("Read Fail\n");
}
else
{
printf("%s\n",buffer);
}
На мой код работает, получают становится не удалось. Итак, пожалуйста, скажите мне, где проблема. вот мой полный код.
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
void PrintCommState(DCB dcb)
{
// Print some of the DCB structure values
_tprintf(TEXT("\nBaudRate = %d, ByteSize = %d, Parity = %d, StopBits = %d\n"),
dcb.BaudRate,
dcb.ByteSize,
dcb.Parity,
dcb.StopBits);
}
int _tmain()
{
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
TCHAR *pcCommPort = TEXT("COM1"); // Most systems have a COM1 port
// Open a handle to the specified com port.
hCom = CreateFile(pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // default security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // 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());
return (1);
}
// Initialize the DCB structure.
SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
// Build on the current configuration by first retrieving all current
// settings.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
return (2);
}
PrintCommState(dcb); // Output to console
// Fill in some DCB values and set the com state:
// 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_57600; // baud rate
dcb.ByteSize = 8; // data size, xmit and rcv
dcb.Parity = NOPARITY; // parity bit
dcb.StopBits = ONESTOPBIT; // stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n", GetLastError());
return (3);
}
// Get the comm config again.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
return (2);
}
PrintCommState(dcb); // Output to console
_tprintf (TEXT("Serial port %s successfully reconfigured.\n"), pcCommPort);
char *buffer ="hello";
DWORD bytesSend;
DWORD errors;
COMSTAT status;
DWORD numWritten;
WriteFile(hCom, buffer, strlen(buffer), &numWritten, NULL);
printf("send succesfully\n");
DWORD numRead;
BOOL ret = ReadFile(hCom, buffer, 5, &numRead, NULL);
if(!ret)
{
printf("Read Fail\n");
}
else
{
printf("%s",buffer);
}
return (0);
}
Вот мой результат: -
Необходимо больше узнать о вашем коде. На вашем снимке экрана отображаются два открытых порта: один на скорости 9600 бод, а другой на 57600, и вы не показываете код, который его выполняет. Вы используете один процесс или два процесса? –
Вы только что изменили крышку экрана, чтобы показать 57600 дважды. Если вы пытаетесь открыть порт дважды, это проблема. Вы можете открыть порт только один раз. –
Почему? Вы можете изменить его снова. –