在Arduino完成STM32的串列埠通訊
文章目錄
一、安裝Ardunio
安裝教程:Ardunio的安裝
二、串列埠通訊
1、任務要求
(1)持續向串列埠輸出“Hello world!”
(2)當接收到“stop!”時,停止輸出。
2、所用器材
① STM32最小核心板(STM32F103C8T6)
②USB轉TTL(ch340晶片)
③ IDE:Arduino
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