簡體   English   中英

無法在C ++中的串行端口上進行讀寫

[英]Unable to read write on serial port in C++

我正在Visual Studio 2010上用c ++編寫串行通信代碼。為此,我嘗試使用本示例, 示例運行良好。 現在,我嘗試通過短接硬件的Rx和Tx引腳來發送字符串並讀回。 這是我發送字符串的代碼:

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);
}

這是我的輸出:- 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM