欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    、實驗思路

    連接兩個STM32單片機的串口引腳,單片機A進行發送,單片機B進行接收。單片機B根據接收到單片機A的指令來點亮或熄滅板載LED燈,通過實驗現象來驗證是否通訊成功。

    二、實驗器材

    兩套STM32F103C8T6單片機開發板、ST-Link下載器、杜邦線。

    三、實驗步驟

    3.1 配置單片機基本參數

    使用STM32CubeIDE進行配置兩個單片機的時鐘信息、引腳狀態、串口信息、中斷等基本參數。兩單片機均采用串口1進行通訊,對應串口引腳均為PA9(發送引腳)、PA10(接收引腳);單片機B的GPIOC 13引腳設置為輸出狀態,以控制開發板LED的亮滅。具體配置如下圖:

    單片機A引腳配置信息

    單片機B的引腳配置信息

    串口配置信息

    3.2 編寫代碼

    計劃單片機B接收到單片機A發送的“1”后點亮LED,接收到單片機A發送的“2”后熄滅LED。現設計單片機A的主程序中循環發送“1”和“2”,期間間隔1s,故單片機主程序如下:

    間隔1s循環發送“1”、“2”

    單片機B采用中斷接收的方式,當接收到串口數據時進入接收中斷回調函數。在回調函數中判別接收到的數值,如果數值為1,則點亮LED,數值為2,則熄滅LED,其它數值則沒反應。編寫回調函數如下:

    接收中斷回調函數

    3.3 將程序進行編譯燒錄單片機,可點擊以下鏈接觀察實驗現象。

    實驗視頻

    業現場在使用觸摸屏的時候,與第三方控制器進行通信連接的時候,一般都是使用成熟的通信協議進行通信連接。而這些協議的實現過程,觸摸屏廠商也已經在編程環境中進行了封裝集成,對于使用的工程師來說,通信的數據交換過程我們無需要關心。僅需要設置配置好控制器(PLC)的品牌,型號系列及基本的通信通道就可以了。當然,這是觸摸屏通信的常規使用方法,這里就使用自定義協議如何實現觸摸屏與控制器(如,單片機)的通信方法,分享給大家。以下通信測試方法除電腦外無需任何硬件,感興趣的話可以依照以下步驟還原測試過程。

    工具及環境準備

    在開始測試前,我們需要準備以下工具及軟件。

    • 觸摸屏編程軟件:臺達DOPSoft 2.00.07
    • 虛擬串口:Virtual Serial Port Driver
    • 串口助手調試工具:stc-isp-15xx-v6.86v


    DOPSoft 2.00.07


    Virtual Serial Port Driver


    stc-isp-15xx-v6.86v

    虛擬串口

    打開“Virtual Serial Port Driver”軟件,添加COM1、COM2兩個串口。添加完成后,如下所示;

    串口助手設置

    打開串口助手軟件(stc-isp-15xx-v6.86v)。在串口助手的串口號中設置為COM1,9600,8,n,1。此處設置為COM1后,觸摸屏中就只能配置為COM2。其必須與虛擬串口設置的串口號對應。


    到此,就完成了測試環境的搭建。以下開始觸摸屏部分的配置。

    觸摸屏設置

    觸摸屏設置為本次測試的核心。

    STEP1

    打開“DOPSoft 2.00.07”軟件,并新建工程。


    STEP2

    在通信端口配置頁面,按照如下配置通信端口。這里以觸摸屏的COM2作為此處測試的連接端口,故需要將觸摸屏的COM2的“連接“復選框取消選中。這樣才可以將其用作自定義通信方式使用。


    SETP3

    在畫面編輯頁面,按照下圖所示,設置10個數值輸入框。并將其地址設置為觸摸屏內部存儲區域的>在畫面編輯頁面,按照下圖所示,設置10個數值輸入框。并將其地址設置為觸摸屏內部存儲區域的$0-$10。<-。

    雙擊數值輸入框,彈出數值輸入框的配置對話框,如下所示。

    在寫入地址對話框的后側,點擊“…”,彈出輸入對話框。將連線名稱設置為內部存儲區域(Internal Memory)。再將原件地址設置為“0”。

    依照以上方法,將其他數值輸入框設置到地址1-10.

    STEP4

    設置畫面運行過程中的腳本程序。

    選中畫面,在右側的屬性欄,選擇“畫面Cycle宏”。

    彈出觸摸屏腳本編輯對話框,點擊下圖所示按鈕,打開腳本程序代碼編寫向導對話框。

    在腳本程序代碼編寫向導對話框中,選擇“命令”-“通信”-選擇命令。配置完成代碼參數后,選擇“更新宏”,完成代碼的添加。

    代碼添加完成后,如下圖所示。

    $M0=INITCOM(1, 0, 1, 0, 0, 6, 0)//初始化端口

    SELECTCOM(1)//設置觸摸屏通信端口為2號端口

    $M1=PUTCHARS(>$M1=PUTCHARS($0, 20, 3000)//發送觸摸屏內部$0開始的20個連續地址數據<, 20, 3000)//發送觸摸屏內部>$M1=PUTCHARS($0, 20, 3000)//發送觸摸屏內部$0開始的20個連續地址數據<>

    Delay(300)//延時

    $M0=0//清除端口初始化標志

    $M1=0//清除數據發送完成標志

    CLEARCOMBUFFER(1, 1)//清除串口緩存

    STEP5

    啟動觸摸屏在線仿真。彈出如下所示的對話框,按照如圖所示的方式配置。


    STEP6

    按照地址,從上到下設置為1到10.

    STEP7

    打開串口助手,可以看到在串口助手的接收區域,已經接收到觸摸屏在線仿真發送出來的數據,且數據中可以看到有1到10(串口助手配置為16進制顯示模式,其中16進制的A即為十進制的10)。

    STEP8

    在觸摸屏在線仿真頁面,將第一個數據改為9999。

    再次查看串口助手中接收到的數據,其中第一個數據已經變為0F 27.

    為了驗證數據的正確性,打開電腦的計算器工具,將其設置為程序員模式。選擇16進制輸入模式。輸入0F27,可以看到轉換為十進制后數據為3879,這與觸摸屏輸入的數據9999無法對應。這是什么地方錯了嗎?其實不是。這只是數據的高低字節交換了,這在通信數據傳輸處理的時候需要特別注意。初次進行串口通信調試,很多都被這個給折騰過。

    在計數器模式下,輸入270F。可以看到其轉換后的十進制數據為9999.與設置的輸入數據一致。

    自此,使用觸摸屏進行串口自定義協議通信的測試就已經完成。

    (轉載請注明來源函控自動化工程師頭條號)


    .下載 免費版 Visual Studio 2019 并進行安裝

    visualstudio.microsoft.com/zh-hans/


    2.雙擊軟件創建項目




    3.選擇Windows窗體應用程序(.NET Framework)創建項目。




    4.項目創建完成,初始界面。




    5.選擇左側的工具欄,選擇 組件,然后雙擊 串口組件將串口添加進入項目。



    6.點擊鼠標右鍵,修改串口模塊的屬性,包括 波特率等,本實驗采用默認。


    7.雙擊串口模塊,添加數據接收中斷函數


    8.添加按鈕模塊,控制STM32開發板LED燈的亮滅。


    9.好的現在基本界面與模塊添加完成,開始寫程序,添加程序各種變量:


           //串口通訊命令
            public static byte[] SendOrder=new byte[3] { 0x5A,0x00, 0xA5 }; //中間為命令,頭尾為校驗  00 關燈 01開燈 02關蜂鳴器 03開蜂鳴器
            // 串口接收
            public static byte[] revcmd=new byte[3];



    10. 開燈LED0程序如下:


            private void button1_Click(object sender, EventArgs e)  //開燈LED0
            {
                try
                {
                    if (serialPort1.IsOpen)
                    {
                        serialPort1.Close();
                    }
                    serialPort1.Open();  //打開串口
                    serialPort1.DiscardInBuffer();//清空緩沖區數據
                    SendOrder[1]=0x01;//發送開燈命令
                    serialPort1.Write(SendOrder, 0, 3);//寫入串口緩沖區
                }
                catch
                {
                    MessageBox.Show("請檢查串口1是否打開");
                }
            }


    11.關燈LED0程序如下:


            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    if (serialPort1.IsOpen)
                    {
                        serialPort1.Close();
                    }
                    serialPort1.Open();  //打開串口
                    serialPort1.DiscardInBuffer();//清空緩沖區數據
                    SendOrder[1]=0x00;//發送開燈命令
                    serialPort1.Write(SendOrder, 0, 3);//寫入串口緩沖區
                }
                catch
                {
                    MessageBox.Show("請檢查串口1是否打開");
                }
            }


    12.蜂鳴器程序留給大家寫,偷個懶(●'?'●)

    13.串口接收函數如下:


           private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //串口接收中斷
            {
                try
                {
                    serialPort1.Read(revcmd, 0, 3); // 將接收緩沖區輸入revcmd
    
    
                }
                catch
                {
                    MessageBox.Show("請檢查串口1是否打開");
                }
                this.Invoke(new EventHandler(ComService)); //調用事件處理函數
            }
    
    
    15.串口接收數據處理函數如下:
            private void ComService(object sender, EventArgs e)
            {
                if ((revcmd[0]==0x5A) & (revcmd[1]==0x01) & (revcmd[2]==0xA5))
                {
                    button5.Text="燈開了";
                    button5.BackColor=Color.FromArgb(255, 0, 0); //設置控件顏色為紅色
                   // button5.BackColor=Color.FromKnownColor(KnownColor.LightSeaGreen);; //設置控件顏色為
    
    
                }
                if ((revcmd[0]==0x5A) & (revcmd[1]==0x00) & (revcmd[2]==0xA5))
                {
                    button5.Text="燈關了";
                    button5.BackColor=Color.FromArgb(224, 224, 224);//灰色
                }
            }
    
    


    14.上位機程序編寫完成。附件如下:


    VS2019_STM32串口通信.rar (41.29 KB, 下載次數: 8)


    (點擊閱讀原文內下載)


    15.下面開始寫STM32開發板程序,這個比較簡單,大家應該都會吧。(●'?'●)


    void USART1_IRQHandler(void)//串口1中斷服務程序
    {           
            u8 res;        
                    USART1_StartFlag=1;        
            if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
            {
                    res=USART_ReceiveData(USART1); //讀接收到的字節,同時相關標志自動清除               
                    if(USART1_RX_CNT<100)
                    {
                            USART1_RX_BUFF[USART1_RX_CNT]=res;
                            USART1_RX_CNT++;
    
    
                            TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除定時器溢出中斷
                            TIM_SetCounter(TIM7,0);//當接收到一個新的字節,將定時器7復位為0,重新計時(相當于喂狗)
                            TIM_Cmd(TIM7,ENABLE);//開始計時
                    }
            }
    }
    
    
    /////////////////////////////////////////////////////////////////////////////////////        
    //串口服務函數
    void USART1RX_Service(void)
    {
                    if(USART1_FrameFlag==1)
                    {
                                    USART1_StartFlag=0;
                                USART1_FrameFlag=0;        //復位幀結束標志
                                    USART1_RX_CNT=0;//接收計數器清零
                                    if((USART1_RX_BUFF[0]==0x5A)&&(USART1_RX_BUFF[1]==0x00)&&(USART1_RX_BUFF[2]==0xA5))  //通訊測試  5A  00  A5
                                    {
                                                    SendBUF[0]=0x5A;
                                                SendBUF[1]=0x00;
                                                SendBUF[2]=0xA5;
                                                LED0=1;
                                                USART1_SendData(SendBUF,3);
    
    
                                    }
                                    if((USART1_RX_BUFF[0]==0x5A)&&(USART1_RX_BUFF[1]==0x01)&&(USART1_RX_BUFF[2]==0xA5))  //通訊測試  5A  00  A5
                                    {
                                                    SendBUF[0]=0x5A;
                                                SendBUF[1]=0x01;
                                                SendBUF[2]=0xA5;
                                                LED0=0;
                                                USART1_SendData(SendBUF,3);
    
    
                                    }
    
    
                    }
    }


    16.單片機程序直接附上:


    VS2019_STM32通訊實驗.rar (2.43 MB, 下載次數: 8)


    (點擊閱讀原文內下載)


    17.下面進行配置電腦,由于水平有限,本程序需要設置電腦的COM口且需要改為COM1如下圖:




    或者更改VS2019中串口模塊的屬性,如下:




    18.好的完成了,謝謝大家。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有