新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C++Builder串口通信設計(二)-發送字節包

        C++Builder串口通信設計(二)-發送字節包

        作者: 時間:2016-11-28 來源:網絡 收藏
        一、組成

        1、PC機

        本文引用地址:http://www.104case.com/article/201611/322878.htm

        2、STM32F10x

        通過通過串口連接(由相應的硬件芯片支持:MAX323或USB轉串口芯片等)。

        設計一個由PC機通過串口發送數據包的程序。串口也可采用USB轉串口。串口與單片機(stm32F10x通信)。單片機程序是收到數據后再通過串口發回去(發給PC機)。

        二、設計工程

        1、界面

        一個mscomm控件;

        一個memo1控件顯示串口接收的內容;

        三個button分別用于串口初始化、發送、終止程序;


        2、串口初始化化部分

        //---------------------------------------------------------------------------
        void __fastcall TForm1::Button1Click(TObject *Sender) //串口初始化
        {
        static st=0;
        AnsiString s;
        if(st==0)
        {
        try
        {
        Form1->MSComm1->_CommPort=3;//COM3( 采用USB轉串口)
        Form1->MSComm1->Settings="9600,n,8,1"; //初始化串口
        Form1->MSComm1->InputMode=type; //采用全局變量type設置傳入數據的格式,0表示文本形式 ,1表示二進制格式,初始默認取為1。
        Form1->MSComm1->RThreshold=1;
        Form1->MSComm1->PortOpen=true; //打開串口
        Application->MessageBoxA("串口初始化成功","串口初始化",0);
        }
        catch(...)
        //catch(EOleException&e)
        {
        Application->MessageBoxA("串口未連接好或已經打開","故障提示");
        }

        Button1->Caption="關閉";
        st=1;
        }
        else
        {
        Form1->MSComm1->PortOpen=false;
        Button1->Caption="打開";
        st=0;
        }
        }
        3、串口中斷接收部分

        //---------------------------------------------------------------------------
        void __fastcall TForm1::MSComm1Comm(TObject *Sender) //串口接收事件
        {
        AnsiString str; //聲明一個AnsiString類型的變量
        OleVariant rec; //聲明一個用于接收數據的OleVariant變量。
        int count;
        int j;
        unsigned char buf[128];

        switch(MSComm1->CommEvent)
        {
        case comEvReceive: //接收事件
        if(type==0) //字符型接收
        {
        str=MSComm1->Input;//收到字符串;
        Memo1->Text=Memo1->Text+str+" "; //顯示收到的字符串
        }
        else //type=1 為二進制接收
        {
        count=MSComm1->InBufferCount; //字節數
        rec=MSComm1->Input; //取出接收緩沖器內容
        for(j=0;j
        {
        buf[j]=rec.GetElement(j); //轉換成字節類型
        }
        Memo1->Text=Memo1->Text+"";
        for(j=0;j
        {
        Memo1->Text=Memo1->Text+IntToHex(buf[j],2)+" "; //顯示接收的字節(以十六進制顯示)
        }
        }
        break;
        default: break;
        } //switch(MSComm1->CommEvent)
        }
        //---------------------------------------------------------------------------

        4、串口發送部分

        //---------------------------------------------------------------------------
        void __fastcall TForm1::Button2Click(TObject *Sender) //發送
        {
        int i;
        OleVariant send;
        int count=5; //發送包的字節數
        unsigned char pc_to_stm32[5]={0x80,0x81,0xff,0x05,0x05}; //PC發出的數據包
        send=VarArrayCreate(OPENARRAY(int,(0,count-1)),varByte); //創建一個動態數組
        for(i=0;i
        {
        send.PutElement(pc_to_stm32[i],i); //填充待發送的數據元素
        }
        MSComm1->Output=send;//從串口發送
        }

        5、程序終止部分

        void __fastcall TForm1::Button3Click(TObject *Sender) //退出應用程序
        {
        Application->Terminate();
        }

        三、運行結果



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岐山县| 靖边县| 平度市| 蓬溪县| 恭城| 泸西县| 安阳市| 牙克石市| 辰溪县| 靖远县| 泰和县| 博湖县| 亚东县| 新和县| 加查县| 将乐县| 太仆寺旗| 壤塘县| 云梦县| 金乡县| 湖北省| 阜康市| 禄丰县| 龙井市| 平和县| 徐州市| 都匀市| 海安县| 昌吉市| 邵阳市| 孟津县| 江川县| 绥滨县| 梁平县| 增城市| 梧州市| 开阳县| 寻甸| 乐东| 景东| 琼结县|