C语言读写串口例子程序

#include "SerialPort.h"

HANDLE hComm;
//SYSTEMTIME etime;

bool openPort(TCHAR *gszPort) {
    printf("try to open the port %s \n", gszPort);

    hComm = CreateFile(gszPort,                                     // pointer to name of the file
                       GENERIC_READ | GENERIC_WRITE,								// access (read-write) mode
                       0,                                                          // share mode
                       0,                                                          // pointer to security attributes
                       OPEN_EXISTING,												// how to create
                       0,                                                          // file attributes
                       0);															// handle to file with attributes to copy

    if (hComm == INVALID_HANDLE_VALUE) {
        printf("failed to open serial port %s \n", gszPort);
        return 0;
    } else {
        printf("serial port %s opened \n", gszPort);
        return 1;
    }
}

bool setupPort() {
    printf("try to set up the port \n");

    DCB dcb;

    //printf("setting up DCB\n");
    //FillMemory(&dcb, sizeof(dcb), 0);   //initalize dcb
    //dcb.DCBlength = sizeof(dcb);

//	printf("getting DCB\n");

    if (!GetCommState(hComm, &dcb)) {
        printf("getDCB failed\n");
        return 0;
    }

    dcb.BaudRate = 115200;
    dcb.fParity = FALSE;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.ByteSize = 8;
    dcb.fOutxCtsFlow = FALSE;
    dcb.fOutxDsrFlow = FALSE;
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;

    //      if (!BuildCommDCB("9600,n,8,1", &dcb)) {
    //              printf("Port configuration failed\n");
    //              return FALSE;
    //  }
//	printf("DCB ready for use\n");
    if (!SetCommState(hComm, &dcb)) {
        printf("failed to set port state (%d)\n", GetLastError());
        return 0;
    } else {
        printf("Port setup complete\n");
        return 1;
    }
}

/*
	Discards all characters from the output or input buffer of a specified communications resource. 
	It can also terminate pending read or write operations on the resource.
*/
bool purgePort() {
	if (PurgeComm(hComm, PURGE_RXCLEAR)) {
	 	//printf("Port purged\n");
		return 1;
	}
	else {
		printf("Port purge failed\n");
		return 0;
	}
}

bool closePort() {
    printf("try to close the port \n");

    if (CloseHandle(hComm)) {
        printf("Port closed\n");
        return 1;
    } else {
        printf("Port close failed\n");
        return 0;
    }
}

bool sendSByte(unsigned char byteToWrite) {
    DWORD dwWritten;
    if (WriteFile(hComm, &byteToWrite, sizeof(byteToWrite), &dwWritten, 0)) {
        printf("wrote byte %Xh (%c) to serial port\n", byteToWrite, byteToWrite);
        return 1;
    } else {
        printf("serial port write failed\n");
        return 0;
    }
}

unsigned char readSByte() {
    DWORD dwRead;
    unsigned char lpBuf;
	
    ReadFile(hComm,                     // handle of file to read
             &lpBuf,                         // address of buffer that receives data
             sizeof(lpBuf),                  // number of bytes to read
             &dwRead,                        // address of number of bytes read
             0);                             // address of structure for data
    //printf("Read byte %Xh from serial port\n",lpBuf);
    return lpBuf;
}

#ifndef SERIALPORT_H
#define SERIALPORT_H

#include 
#include 
#include 	//Contain definations for handle, DWORD and DCB
#include 		//Contain definations for _T

//int portId;				//e.g Com#3 's portId is 3.
//TCHAR commPort[11];		//e.g "\\\\.\\com3"

/*
    Definitions for the methods about serial port operations.
*/
bool openPort(TCHAR *gszPort);

bool setupPort();

bool purgePort();

bool closePort();

bool sendSByte(unsigned char byteToWrite);

unsigned char readSByte();

#endif  //SERIALPORT_H

 

 

 

 

 

使用方法:
    char portId[5];

	char gszPort[20];   //The port number for serial communication, please change it to the right one.

	printf("input the port COM number: \n");
	scanf("%s", &portId);

	strcpy(gszPort, "\\\\.\\com");
	strcat(gszPort, portId);

	printf("port Id: %s\n", gszPort);



	if (openPort(gszPort)) {

		if (setupPort()) {

                //程序逻辑
                    }

                closePort();
           }

 

 

 

 

 

 

你可能感兴趣的:(C)