Arduino下的STM32的串列埠通訊

紫堂幽夢發表於2020-12-13

一、任務要求

1)持續向串列埠輸出“Hello world!”;
2)當接收到“stop!”時,停止輸出。

二、Arduino的安裝和配置

1、安裝Ardunio

連結: 安裝包.提取碼:q251

注:安裝的時候,一直預設安裝就可以了,安裝的路徑不能有中文。

2、配置Arduino

1、將安裝包裡的Arduino_STM32整個資料夾拷貝到Arduino安裝目錄下的hareware下。
2、開啟Arduino,點選選單欄\工具\開發板…\第一欄的開發板管理器
3、選中Cortex-M3系列的編譯支援檔案並安裝

注:安裝時間比較長,請耐心等待。

4、安裝完成後,在選單欄\工具\開發板選擇晶片型別,由於我使用的是stm32f103指南者,所以選擇為Generic STM32F103V series。
在這裡插入圖片描述
5、按照下列圖片所示,修改。
在這裡插入圖片描述

三、程式

1、連線stm32的開發板

直接用usb線把開發板與電腦相連即可。然後用跳帽將BOOT0與3v3相連,BOOT1與GND相連,RXD與A9相連,TXD與A10相連。

注:usb線連線的開發板的"usb轉串列埠"這個介面。

在這裡插入圖片描述

2、編輯程式碼

int flag=1;   
char Stop[]="stop\n";     //停止命令
char Start[]="begin\n";   //開始命令

void setup() 
{
    Serial.begin(115200); //串列埠初始化  
}

void loop() 
{
    int i=0,flag_s=0,flag_s1=0;
    char inByte[50];
    while (Serial.available()> 0)     //當傳送緩衝區有資料時
    {
        inByte[i] = Serial.read();    //從串列埠的緩衝區取出並讀取一個Byte的資料
        delay(10);                   
        
        if(Stop[i]!=inByte[i])       //判斷髮送資料是否與停止命令相等
             flag_s=0;
        else flag_s=1;
        
        if(Start[i]!=inByte[i])      //判斷髮送資料是否與開始命令相等
             flag_s1=0; 
        else flag_s1=1;
        
        i++;
    }
     
    if(flag_s==1)                       //如果與停止命令相等
      {
           flag=0;                      //傳送標誌位置為0
           Serial.println("收到!已停止傳送");
           flag_s=0;                   //初始化判斷,防止沒有傳送資料時一直執行
      }

    
      if (flag==1)                      //判斷髮送標誌位是否為1
    {
        Serial.println("Hello World!");  
        delay(1000);
    }
    
}

3、燒錄程式

1、選擇連線的串列埠
在這裡插入圖片描述

2、依次點選驗證,燒錄

注:每一次在燒錄檔案之前,要按開發板上的RESET,否則可能會出現問題。
在這裡插入圖片描述

3、開啟串列埠監視器(此時小燈開始閃爍)

注:波特率記得改成115200。
在這裡插入圖片描述

在這裡插入圖片描述

4、執行結果

在這裡插入圖片描述

四、分析基於標準庫函式與基於HAL庫函式的stm32程式設計方式的差異

1、標準庫是對STM32晶片的一個完整的封裝,包括所有標準器件外設的器件驅動器,可以讓我們寫程式碼時更簡潔。
2、HAL庫是隻要使用的是相通的外設,程式基本可以完全複製貼上。注意是相通外設,意思也就是不能無中生有,例如F7比F3要多幾個定時器,不能明明沒有這個定時器卻非要配置,但其實這種情況不多,絕大多數都可以直接複製貼上。

注:也就是說標準外設庫有時需要用幾行程式碼完成的,HAL庫一行程式碼就可以完成。

五、stduino IDE的使用體會

1、Stduino IDE是一款面向32位處理器快速入門學習的整合開發平臺,目前已經支援Arduino_Core_STM32框架,集聚快捷、高效、免費、開源、易得於一身,軟體還整合了GDB除錯功能。
支援自定義編輯背景;程式碼高亮;程式碼自動提示補全;—鍵USB\Stlink下載;支援串列埠除錯
2、stduino的操作介面簡潔乾淨,操作便捷,程式編寫簡單,不需要太多的微控制器基礎和程式設計基礎,自帶程式燒錄,自帶串列埠除錯。

六、總結

Ardunio極易掌握,同時有著足夠的靈活性。不需要太多的微控制器基礎、程式設計基礎,簡單學習後,可以快速的進行開發,自帶程式燒錄,自帶串列埠除錯,軟體介面簡潔。就是在下載開發板配置的時候。比較慢,多耐心等一等。

參考文獻

連結: 在Arduino完成STM32的串列埠通訊.
連結: 基於Ardunio下的stm32f103指南者串列埠通訊.
連結: 使用Arduino IDE開發STM32F10X.

相關文章