⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.cpp

📁 CPLDFPGA嵌入式应用开发技术白金手册所配套源代码
💻 CPP
字号:

//刚才是串口发,这里是串口收的程序:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <mmsystem.h>

static HANDLE hComm;
static DCB Current_Comm_dcb = {0};
static DCB Previous_Comm_dcb = {0};
static OVERLAPPED osRead = {0};

BOOL ReadABuffer(BYTE * lpBuf, DWORD dwToRead)
{
static DWORD dwRead,dwRes;
static BOOL fWaitingOnRead = FALSE;
static BOOL fRes;
if (!fWaitingOnRead) {
   // Issue read operation.
   if (!ReadFile(hComm, lpBuf, dwToRead, &dwRead, &osRead)) {
      if (GetLastError() != ERROR_IO_PENDING)     // read not delayed?
         // Error in communications; report it.
   fRes = FALSE;
      else
         fWaitingOnRead = TRUE;
   }
   else {
      // read completed immediately
//   HandleASuccessfulRead(lpBuf, dwRead);
   fRes = TRUE;
    }
}
if (fWaitingOnRead) {
   dwRes = WaitForSingleObject(osRead.hEvent, INFINITE);
   switch(dwRes)
   {
      // Read completed.
      case WAIT_OBJECT_0:
          if (!GetOverlappedResult(hComm, &osRead, &dwRead, FALSE))
             // Error in communications; report it.
    fRes = FALSE;
          else
             // Read completed successfully.
//            HandleASuccessfulRead(lpBuf, dwRead);
   fRes = TRUE;
          //  Reset flag so that another opertion can be issued.
          fWaitingOnRead = FALSE;
          break;
//      case WAIT_TIMEOUT:
          // Operation isn't complete yet. fWaitingOnRead flag isn't
          // changed since I'll loop back around, and I don't want
          // to issue another read until the first one finishes.
          //
          // This is a good time to do some background work.
//         break;
      default:
          // Error in the WaitForSingleObject; abort.
          // This indicates a problem with the OVERLAPPED structure's
          // event handle.
    fRes = FALSE;
          break;
   }
}
return(fRes);
}

int main(int argc,char *argv[])
{
BYTE c;
printf("Writen by jxj.2001.5. All rights reserved\n\n");
printf("Open serial communication port ... ");
hComm = CreateFile( "com1",
                    GENERIC_READ | GENERIC_WRITE,
                    0,
                    0,
                    OPEN_EXISTING,
                    FILE_FLAG_OVERLAPPED,
                    0);
if (hComm == INVALID_HANDLE_VALUE)
{
 printf("error!\n");
 getch();
 return(1);
}
else
{
 printf("successful!\n");
}
FillMemory(&Previous_Comm_dcb, sizeof(Previous_Comm_dcb), 0);
FillMemory(&Current_Comm_dcb, sizeof(Current_Comm_dcb), 0);
Previous_Comm_dcb.DCBlength = sizeof(Previous_Comm_dcb);
Current_Comm_dcb.DCBlength = sizeof(Current_Comm_dcb);
printf("Get previous CommState ... ");
if (!GetCommState(hComm, &Previous_Comm_dcb))
{
 printf("error!\n");
 getch();
 return(1);
}
else
{
 printf("successful!\n");
}
printf("Set current CommState ... ");
Current_Comm_dcb = Previous_Comm_dcb;
Current_Comm_dcb.BaudRate = 115200;
Current_Comm_dcb.fBinary = TRUE;
Current_Comm_dcb.fParity = TRUE;
Current_Comm_dcb.StopBits = ONESTOPBIT;
Current_Comm_dcb.fDtrControl = DTR_CONTROL_DISABLE;
Current_Comm_dcb.fRtsControl = RTS_CONTROL_DISABLE;
Current_Comm_dcb.ByteSize = 8;
Current_Comm_dcb.Parity = ODDPARITY;
Current_Comm_dcb.fOutX = FALSE;
Current_Comm_dcb.fInX = FALSE;
if (!SetCommState(hComm, &Current_Comm_dcb))
{
 printf("error!\n");
 getch();
 return(1);
}
else
{
 printf("successful!\n");
}
//上面跟上一篇文章里都一样。

printf("Initialize read ... ");
//准备读
osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (osRead.hEvent == NULL)
{
 printf("error!\n");
 getch();
 return(1);
}
else
{
 printf("successful!\n");
}

if(!ReadABuffer(&c,1)){
//现在这个函数写成有错误才立刻返回,如果没错误,则直到对方发送才返回。
printf("Read Com Error!\n");
}
else
{
 printf("%c\n",c);
 getch();
}
 printf("Recover the previous CommState ... ");
//恢复串口设置
 if (!SetCommState(hComm, &Previous_Comm_dcb))
 {
  printf("error!\n");
  getch();
  return(1);
 }
 else
 {
  printf("successful!\n");
 }
 CloseHandle(osRead.hEvent);
 CloseHandle(hComm);
 return(0);
}

//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -