c++ windows串口傳輸資料

來源:互聯網
上載者:User

標籤:led   串口   data   int   測試   time   event   interval   return   

用虛擬串口軟體  測試 

/////////////////////////////////////////////////////SerialPort.h////////////////////////////////////////////////////////

#include "SerialPort.h"

HANDLE OpenSerialPort(string & strPort, ULONG ulBaudrate)
{
HANDLE hSerial;
hSerial = CreateFile((strPort.c_str()),
GENERIC_READ | GENERIC_WRITE,
NULL,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if (hSerial == INVALID_HANDLE_VALUE)//Open serial port failed.
{
return hSerial;
}
//Config serial port
DCB PortDCB;
PortDCB.DCBlength = sizeof(DCB);
// Get the default serial parameter.
GetCommState(hSerial, &PortDCB);
PortDCB.BaudRate = ulBaudrate; // baudrate
PortDCB.ByteSize = 8; // Number of bits/byte, 4-8
PortDCB.Parity = NOPARITY;
PortDCB.StopBits = ONESTOPBIT;
if (!SetCommState(hSerial, &PortDCB))
{
//config the serial port failed.
CloseHandle(hSerial);
return (INVALID_HANDLE_VALUE);
}
//Config the serial port timeout property.
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(hSerial, &CommTimeouts);//Get the serial port default timeout.
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 10;
CommTimeouts.ReadTotalTimeoutConstant = 10;
CommTimeouts.WriteTotalTimeoutMultiplier = 50;
CommTimeouts.WriteTotalTimeoutConstant = 100;
if (!SetCommTimeouts(hSerial, &CommTimeouts))
{
//config the serial port timeout failed;
CloseHandle(hSerial);
return (INVALID_HANDLE_VALUE);
}
return (hSerial);
};
void CloseSerialPort(HANDLE hSerial)
{
CloseHandle(hSerial);
};
bool WriteSerial(char* btData, ULONG ulSize, HANDLE hSerial)
{
DWORD dwNumBytes, dwRet;
dwRet = WriteFile(hSerial, //Handle
btData, //Data buffer
ulSize, //Buffer size
&dwNumBytes, //written bytes
NULL); //don‘t support
return (dwRet != 0);
};
bool ReadSerial(BYTE *btData, ULONG *ulSize, HANDLE hSerial)
{
//SetCommMask (hSerial, EV_RXCHAR);
ULONG ulRdSize = 0;
BYTE Byte;
DWORD dwBytes;
bool blRd = false;
DWORD dwMask = EV_RXCHAR;
//WaitCommEvent(hSerial,&dwMask,NULL);
SetCommMask(hSerial, EV_RXCHAR);
while (ReadFile(hSerial, &Byte, 1, &dwBytes, 0) != 0) {
if (dwBytes>0) {
btData[ulRdSize++] = Byte;
if (ulRdSize == *ulSize) {
blRd = true;
break;
}
}
else {
blRd = true;
break;
}
}

*ulSize = ulRdSize;
return (blRd);
};

 

 


//===========================SerialPort.H的開始=========================

#pragma once
#include <windows.h>
#include <string>

using namespace std;
HANDLE OpenSerialPort(string & strPort, ULONG ulBaudrate);
void CloseSerialPort(HANDLE hSerial);
bool WriteSerial(char* btData, ULONG ulSize, HANDLE hSerial);
bool ReadSerial(BYTE *btData, ULONG *ulSize, HANDLE hSerial);
//===========================SerialPort.H的結束=========================

 

////////////////////////////////////////////////////////////////main.cpp////////////////////////////////////////////////////////////////////

//使用程式碼範例:
#include "SerialPort.h"
#include <iostream>
using namespace std;

HANDLE hSerialPort;

int main()
{
string portname = "COM4:";
string buff = "HELLO!";
char c[20];
strcpy_s(c, buff.c_str());

hSerialPort = OpenSerialPort( portname, 9600);//Open serial port com1

if (hSerialPort != INVALID_HANDLE_VALUE)
{
if (!WriteSerial(c, 7, hSerialPort))//Send data hello to com1
//MessageBox(0, "ERROR", "ERROR", MB_ICONWARNING);//show error message
printf("ERROR!!");
//CloseSerialPort(hSerialPort);
}
system("pause");
}

c++ windows串口傳輸資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.