0
点赞
收藏
分享

微信扫一扫

c++ builder Api 串口 demo 发送数据

小_北_爸 2022-02-14 阅读 57

//调试通过

#include <vcl.h>
#include <windows.h>
#include <iostream>
using namespace std;
HANDLE hComm;
bool InitSerialPort()
{
    DCB dcb;
    String ComNo ="COM1"; //串口(COM1) 通信初始化
    hComm =CreateFile (ComNo.c_str(),GENERIC_READ |GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
    if(hComm==INVALID_HANDLE_VALUE)
    //如果通信端口未打开
    {cout<<"打开通信端口错误!!"<<endl;
        return false;
    }
    //将 dcb 地址传入,以取得通信参数
    GetCommState(hComm,&dcb);
    //将 dcb 地址传入,以取得通信参数
    dcb.BaudRate =CBR_9600; //设置波特率为 9600
    dcb.ByteSize =8; //字节为 8 位
    dcb.Parity =NOPARITY; //校验位为 None
    dcb.StopBits =ONESTOPBIT; //停止们为 1
    //通信端口设置
    if(! SetCommState(hComm,&dcb)) //设置通信端口状态
    {cout<<"通信端口设置错误!!! "<<endl;
    CloseHandle(hComm);
    return false;
    }
    return true;
}

bool SendData()

{
    char Data[50]={0} ;
    unsigned long lnb ,nBS;
    if (hComm==0) return false; //检查 Handle 值
    Data[0]='h';
    Data[1]='e';
    Data[2]='l';
    Data[3]='l';
    Data[4]='o';
    //cout<<Data<<endl;
    nBS=strlen(Data);
return WriteFile(hComm, Data,nBS,&lnb,NULL);
}

void ReceiveData()

{     char buff[512]={0};
    DWORD nBytesRead,dwEvent,dwError;
    COMSTAT cst;
    ClearCommError(hComm,&dwError,&cst); //读取通信端口状态
    if (cst.cbInQue>sizeof(buff)) //数据长度是否大于缓冲区大小
    {    PurgeComm(hComm,PURGE_RXCLEAR);
        //清除通信端口数据
        return;
    }
    ReadFile(hComm,buff,cst.cbInQue ,&nBytesRead,NULL);
    cout<<buff;//显示接受串口数据

}
int _tmain(int argc, _TCHAR* argv[])
{
    if (InitSerialPort())
    {
       std::cout<<SendData();//发送数据到另一个串口
       //Sleep(5000);//延时,给另一个串口给足时间,手动发数据
       //ReceiveData();//接受数据,并显示到屏幕上
       CloseHandle(hComm);
    }
    system("pause");
    return 0;
}

//参考文章:

//《C++ Builder 中串口通信的实现》-张捍卫, 韦鹏宽 ( 海军蚌埠士官学校, 安徽 蚌埠 233012

举报

相关推荐

0 条评论