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

📄 com.cpp

📁 C语言编写的简单串口通讯基础代码
💻 CPP
字号:
#include "stdafx.h"
#include "stdio.h"


HANDLE hHandle = INVALID_HANDLE_VALUE;

BOOL ClosePort()
{
	if (CloseHandle(hHandle)) {
		hHandle = INVALID_HANDLE_VALUE;
		return TRUE;
	}

	return FALSE;
}

// 0 -- SetupPort Failed  >0 Successed
BOOL SetupPort(LPCTSTR lpszPortName, int nTimeOut)
{
	if(hHandle != INVALID_HANDLE_VALUE)
    {
        ClosePort();
        Sleep(2000);
    }

    DCB	dcb;
    COMMTIMEOUTS commtimeouts;

    hHandle = CreateFile(lpszPortName,
			    GENERIC_READ | GENERIC_WRITE,
			    0,							// comm devices must be opened w/exclusive-access
			    NULL,							// no security attrs
			    OPEN_EXISTING,				// comm devices must use OPEN_EXISTING
			    0,							// overlapped I/O
			    NULL							// hTemplate must be NULL for comm devices
			    );

    if ((HANDLE)hHandle == INVALID_HANDLE_VALUE)
        return FALSE;

    //fills in a device-control block with the current control settings
    if (!GetCommState(hHandle, &dcb))
    {
    	CloseHandle(hHandle);
    	return FALSE;     //error
    }

    //fills in a device-control block
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.fDtrControl  = DTR_CONTROL_ENABLE;

    if (!SetCommState(hHandle, &dcb))
    {
    	CloseHandle(hHandle);
    	return FALSE;
    }

    if(!GetCommTimeouts(hHandle, &commtimeouts))
    {
    	CloseHandle(hHandle);
    	return FALSE;
    }
    commtimeouts.ReadIntervalTimeout  = MAXDWORD;
    commtimeouts.ReadTotalTimeoutMultiplier  = MAXDWORD;
    commtimeouts.ReadTotalTimeoutConstant = nTimeOut * 1000;

    if(!SetCommTimeouts(hHandle, &commtimeouts))
    {
    	CloseHandle(hHandle);
    	return FALSE;
    }

    return TRUE;
}

BOOL WritePortLen(LPSTR szData, int nDataLen)
{
    DWORD dwByteWriteRead = 0;
    return WriteFile(hHandle, szData, nDataLen, &dwByteWriteRead,NULL);
}

BOOL WritePort(LPSTR szData)
{
    DWORD dwByteWriteRead = 0;
    return WriteFile(hHandle, szData, strlen(szData), &dwByteWriteRead,NULL);
}

char  ReadC()
{
    DWORD  dwRead = 0;
    char ch = 0;

    if(ReadFile(hHandle, &ch, sizeof(char), &dwRead, NULL))
        return ch;
    else
        return 0;
}

int ReadPort(LPSTR szData, char StopChar, LPDWORD dwLen)
{
    char data[300];
    char ch = 0;
    int count = 0;

    memset(data, 0, 300);
    while(ch = ReadC())
    {
        count++;
        if(ch == StopChar)
        {
//            data[count-1] = ch;
            strncpy(szData, data, count);
            *dwLen = count-1;
            return 0;
        }
        else
            data[count-1] = ch;
    }
    return -1;

}

int ReadPort(LPSTR szData, int nDataLen)
{
    char data[300];
    char ch = 0;
    int count = 0;

    memset(data, 0, 300);
    while(ch = ReadC())
    {
        count++;
        if(count == nDataLen)
        {
            data[count-1] = ch;
            strncpy(szData, data, count);
            return 0;
        }
        else
            data[count-1] = ch;
    }
    return -1;
}


int SetTimeOut(int nTimeOut)
{
    COMMTIMEOUTS commtimeouts;

    if(!GetCommTimeouts(hHandle, &commtimeouts))
    {
//    	CloseHandle((HANDLE)handle);
    	return -1;
    }
    commtimeouts.ReadIntervalTimeout  = MAXDWORD;
    commtimeouts.ReadTotalTimeoutMultiplier  = MAXDWORD;
    commtimeouts.ReadTotalTimeoutConstant = nTimeOut*1000;

    if(!SetCommTimeouts(hHandle, &commtimeouts))
    {
//    	CloseHandle((HANDLE)handle);
    	return -1;
    }

    return 0;
}

⌨️ 快捷键说明

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