1. 程式人生 > 其它 >在Arduino完成STM32的串列埠通訊

在Arduino完成STM32的串列埠通訊

技術標籤:stm32stm32微控制器arduino

文章目錄

一、安裝Ardunio

安裝教程:Ardunio的安裝

二、串列埠通訊

1、任務要求

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

2、所用器材

① STM32最小核心板(STM32F103C8T6)
②USB轉TTL(ch340晶片)
③ IDE:Arduino

④ 實驗所用串列埠:USART1

3、主要程式碼

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_s1==1) //如果與開始命令相等 { flag=1; //傳送標誌位置為1 Serial.println("開始傳送"); flag_s1=0; //初始化判斷,防止沒有傳送資料時一直執行 } if (flag==1) //判斷髮送標誌位是否為1 { Serial.println("Hello World!"); delay(1000); } }

4、程式碼解析

  • Arduino程式基本結構由setup() 和loop() 兩個函式組成
    Arduino控制器通電或復位後,即會開始執行setup() 函式中的程式,該部分只會執行一次
    我們在setup() 函式中完成串列埠初始化。

  • 在setup() 函式中的程式執行完後,Arduino會接著執行loop() 函式中的程式。而loop()函式是一個死迴圈,其中的程式會不斷的重複執行
    我們會在loop() 函式中完成程式的串列埠通訊功能。

  • Serial.available() 的意思是:返回串列埠緩衝區中當前剩餘的字元個數。一般用這個函式來判斷串列埠的緩衝區有無資料,當Serial.available()>0時,說明串列埠接收到了資料,可以讀取;

  • Serial.read()指從串列埠的緩衝區取出並讀取一個Byte的資料,比如有裝置通過串列埠向Arduino傳送資料了,我們就可以用Serial.read()來讀取傳送的資料。

  • Serial.println()和Serial.print()是Arduino的基本輸出函式,區別在於後者比前者多了回車換行。

三、程式碼效果

在這裡插入圖片描述

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

  • 標準外設庫(Standard Peripherals Library)是對STM32晶片的一個完整的封裝,包括所有標準器件外設的器件驅動器。這應該是目前使用最多的ST庫,幾乎全部使用C語言實現。但是,標準外設庫也是針對某一系列晶片而言的,沒有可移植性。
  • HAL庫是用來取代之前的標準外設庫的。相比標準外設庫,STM32Cube HAL庫表現出更高的抽象整合水平,HAL API集中關注各外設的公共函式功能,這樣便於定義一套通用的使用者友好的API函式介面,從而可以輕鬆實現從一個STM32產品移植到另一個不同的STM32系列產品

五、stduino IDE使用體會

Stduino IDE是一款面向32位處理器快速入門學習的整合開發平臺,支援Arduino_Core_STM32框架,集聚快捷、高效、免費、開源、易得於一身,軟體還集成了GDB除錯功能。

  • 在使用keil編寫stm32程式的時候,我們需要讀他的開發手冊,如果想對暫存器進行操作,還得記住每個暫存器的位置和作用,用庫函式進行操作也得知道每個函式的意義,需要花費比較多的學習時間成本。

  • Ardunio在操作方面比keil要簡單得多,選好自己使用的裝置後就可以開始程式設計了,程式設計方面只要會C語言就可以寫出程式,還支援一鍵下載程式到微控制器,同時配有串列埠監視器,可以看到單邊機的輸出。

  • stduino IDE本身就是基於Arduino IDE進行開發的,所以它具備了Arduino IDE的所有優點,簡單易上手,同時還多了一些Arduino IDE沒有的功能,比如GDB除錯等。

  • 單純想要對微控制器程式設計的話,掌握了keil和Arduino就已經足夠了,那為什麼還要不斷開發新的軟體呢?我認為這是為了讓微控制器程式設計變得更加簡單,高效,讓更多小白可以進入到這一嵌入式開發這一領域,就如同我們目前的4G已經可以滿足日常的影音需求,但是我們還是研究出了5G,甚至已經在研究6G。

六、參考資料

1、Arduino程式設計基礎
2、https://blog.csdn.net/qq_26164209/article/details/83274451
3、https://blog.csdn.net/weibo1230123/article/details/80042171
4、https://blog.csdn.net/f394028400/article/details/90263782