欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

c++builderApi串口demo发送数据

时间:2023-06-02

//调试通过

#include
#include
#include
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<<"打开通信端口错误!!"<         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<<"通信端口设置错误!!! "<     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<     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<

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

//参考文章:

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。