RoboMaster機甲大師比賽入門?我們從STM32開始!

同步博客地址從STM32開始的RoboMaster生活:入門篇

項目&教程倉庫-STM32-RoboMaster-


1.0 STM32是什麼

1.1 定義

STM32.jpg

  • ST + M + 32 = STM32

ST: SGS-Thomson 法意半導體

M: Microelectronics 微控制器 微處理器

32: 32位

–> STM32: 法意半導體所設計製造的32位微控制器系列產品

1.2 背景

  • RISC --> ARM --> Cortex-M --> STM32

精簡指令集 RISC: Reduce Instruction Set Computer

複雜指令集 CISC :Complex Instruction Set Computer

ARM.png

精簡指令集並非簡單的比複雜指令集簡單,而是其高效快速便宜,強調效率和價格,所以,常見的嵌入式設備,手機等等均爲精簡指令集。接下來的ARM架構就是基於精簡指令集的。

x86.jpg

而複雜指令集,強調指令的多樣性和複雜性,常見於電腦和大型服務器,以往的Intel英特爾的x86 (IA-32) ,新起的x86-64 (AMD64) 均爲複雜指令集。

ARM: Advanced RISC Machines 高級精簡指令集機器

ARM處理器是英國Acorn有限公司設計的低功耗成本的第一款RISC微處理器。但實際上,真正的ARM是一個32位處理器框架,而Acorn自己從不生產處理器,而是搞處理器框架授權的,怎麼實現其架構完全取決於客戶自己,所以很多時候同爲ARM架構的廠家互相之間的代碼卻不能直接套用。STM就是Acorn授權客戶之一,所以STM大部分產品都是基於ARM架構的。

ARM處理器的三大特點是:耗電少功能強,16位/32位雙指令集,和合作伙伴衆多(所有手機都是ARM架構)。

目前ARM分爲三大系列:Cortex-A,Cortex-R,Cortex-M

Cortex-A (Application): 適用於應用領域,支持 ARM和Thumb指令集,並支持虛擬地址和內存管

Cortex-R (Real-Time): 適用於高實時性領域,支持 ARM和Thumb指令集,只支持物理地址,並支持內存管理。

Cortex-M (eMbedded): 適用於微處理器領域,只支持Thumb指令集。

爲我們接下來要講的就是STM32系列就是基於Cortex-M架構的

1.3 系列

STM full.jpg

整個STM家族是非常龐大而繁雜的,當然,這裏要是全部討論比較一番,估計已經可以出幾本書了www,所以,我們主要分析一下STM32系列下的MCU微控制器(左邊的MPU纔是微處理器)

STM full detail.png

STM detail.png

我來簡單概括一下,一共有4個分支

  1. High-performance MCU: 高性能微處理器,是以CPU高度集成和多媒體應用爲目的開發的,基於Cortex-M3/4/7,頻率從120MHz (F2) 到400MHz (H7) 不等。該系列均配備ARTTM加速器,能夠從Flash中0延遲加載數據。
  2. Mainstream MCU: 主流微控制器,是專門爲對價格比較挑剔的產品開發的,成本要求甚至苛刻到一片1$以下,空間也非常受限。在這個類別下,有基於Cortex-M0/3/4框架的,頻率從48MHz (F0) 到72MHz (F1/F3) 不等。
  3. Wireless MCU: 無線微控制器,是STM32微控制器家族新的雙核成員,集成2.4GHz的通訊模塊,可以用於無線和藍牙應用。其中基於Cortex-M0+的核心(網絡處理器)是用於通訊管理,而另外一個基於Cortex-M4的核心(應用處理器)是用於主要的嵌入式開發。
  4. Ultra Low-Power MCU: 超低功耗微控制器,該系列爲低功耗應用而生,用於電池驅動的設備,從整體降低電池消耗來延遲電池使用時間。在這個系列中,我們可以找到針對低價客戶的基於Cortex-M0的微控制器,和基於Cortex-M4F的帶有動態電壓調節 (DVS) 功能的微控制器,能夠根據頻率變化來最優化內部CPU電壓。

如果各位需要購入,請務必詳細閱讀每個微控制器的詳細數據,再根據項目要求來謹慎購買。推薦閱讀:官方選材手冊

2.0 爲什麼選擇STM32,拋棄Arduino?

這是個艱難的選擇,我們有無數的理由選擇Arduino,放棄STM32,比如Arduino簡單易學開發迅速支持強大BUG少,STM32複雜難懂開發緩慢支持受限BUG多,但是很多時候我們不得不承認,現實就是,幾乎沒有真的用Arduino做產品開發的,而最流行的專業的嵌入式開發,STM32就是繞不開的一條路。說白了:Arduino就是玩具,給興趣愛好者玩的;STM32纔是真正的嵌入式,遠遠比Arduino強大幾個量級,是開發電子產品的必備技能

下面我們再詳細的列舉一下拋棄Arduino,選擇STM32的理由

  1. STM32在硬件上比Arduino更強大

    STMvsArduino.png

    我們可以看出,STM32中常用的F103和Arduino中常用的ATmega328相比,在各種硬件指標上徹底完爆,甚至在價格上STM32還比Arduino便宜一點點?!(震驚)

  2. STM32有專門的低功耗系列,電量消耗是產品最重要的指標之一,消耗甚至比Arduino Nano在深度睡眠模式還要低很多?!(二次震驚)

  3. 沒有高級封裝的函數供你使用,也許很多人會說,這不正是STM32的缺陷嗎?Arduino正是因爲有這些函數,所以開發迅速,簡單嗎?是這樣,沒錯。但是,正是因爲STM32足夠底層,足夠複雜,所以相對應的,把所有的控制權和自由都交給了工程師,可以做到所有Arduino能做到的事情和其所有不能做到的事情。這和“爲什麼搞前端後端開發的爲啥愛用Linux不用Windows呢?”一樣,要舉個例子說明的話,請問,您覺得建設帝國大廈,是用樂高呢?還是鋼筋水泥呢?www

  4. 可以跑真正的操作系統,比如FreeRTOS,多任務處理不再是夢?!(三回啊三回)

  5. 專業應用的廣泛。STM32甚至可以直接跑AI,而Arduino不行(只能外接模塊),STM32可以運行IoT系統,而Arduino雖然可以,但是是沒法發揮IoT真正的實力的。

  6. STM32是ARM下的一個分支,而所有的手機芯片基本都是ARM架構的,所以學會STM32對ARM下的其他分支開發,比如手機硬件開發等,都大有幫助,或者說是入門的必經之路

  7. “我是搞STM32開發的”聽起來就很帥~~,而“我是玩Arduino項目的”則有些黯然失色

3.0 STM32上手難度如何?

這部分我就直說了吧,難,非常難,資料少不說,數不盡的坑一定要自己全部踩過一遍才能熟悉開發環境。光是配置開發環境就花了我2周,就算要想做個最簡單的LED流水燈,點亮個LED,也是要深入理解STM32的各種底層,芯片引腳設置才行的,這也是新手最勸退的地方,你能想象,至少要枯燥無聊地花一週閱讀300頁的手冊才能點亮一個簡單的LED嗎?是不是有點興致全無?但是,一但越過這個門檻,你就會打開STM32的大門,真正進入嵌入式的殿堂,深入地理解計算機內部的任何細節,無論軟件還是硬件上的,你將會感覺自己身處一片智慧的汪洋什麼都不懂,但同時又即將成爲這片汪洋的新君主,感覺能通過計算機做到任何事情!!!

4.0 RoboMaster是什麼?

言歸正題,肯定很多人讀到這裏,會疑惑,“這該死的傢伙搞了這麼一堆東西,先推銷STM32,又使勁勸退,結果半天了連RoboMaster都沒解釋一下”。別慌,諸位客官,這不正要講嘛

全國大學生機器人大賽RoboMaster 機甲大師賽是由共青團中央、全國學聯、深圳市人民政府聯合主辦,DJI 大疆創新發起並承辦…

哦我的天哪,無聊死了,我們還是直接一點,看看實際的比賽

http://player.bilibili.com/player.html?aid=76130870&cid=130230429&page=1

5.0 RoboMaster倉庫 & 教程安排

iRM.png

UIUC RoboMaster 校隊倉庫Illini RoboMaster

我首先會寫個入門篇,介紹一下STM32和RoboMaster(就是本片內容),然後進入進階篇,詳細說明STM32所有的外設,並給出代碼和配置,最後在比賽篇帶着各位逐行解析上面倉庫裏面的所有代碼,並說明實際硬件的一些配置和使用事項,比賽篇我會從iRM_Embedded_2018開始講起,本教程暫且不談AI圖像處理和機械設計,專注於STM32的入門事宜。

6.0 你所需要的知識儲備

在閱讀後面教程前,需要一定的基礎和技能,如果在一下列表中有你不會或者沒有達到要求標準的知識,請按照下文對應的鏈接來閱讀對應資料的對應章節,並練習直至達到全部要求標準,請務必不要嫌麻煩。以下書籍作者皆研讀過,所以不用擔心浪費時間,勾畫的都是必要內容。

  1. C語言基礎(按照C Primer Plus的目錄來,缺失的知識按照這本教材對應章節來學)
    • Getting Ready
    • Introducing C
    • Data and C
    • Character Strings and Formatted Input/Output
    • Operators, Expressions, and Statements
    • C Control Statements: Looping
    • C Control Statements: Branching and Jumps
    • Character Input/Output and Input Validation
    • Functions
    • Arrays and Pointers
    • Character Strings and String Functions
    • Storage Classes, Linkage, and Memory Management
    • File Input/Output
    • Structures and Other Data Forms
    • Bit Fiddling
    • The C Preprocessor and the C Library
    • Advanced Data Representation
  2. STM32基礎背景知識(按照Mastering STM32的Introduction章節的目錄來,缺失的知識按照這本教材對應章節來學)
    • Introduction to STM32 MCU Portfolio
    • Setting-Up the Tool-Chain
    • Hello, Nucleo!
    • STM32CubeMX Tool
    • Introduction to Debugging
  3. 計算機工程基礎(選修,可以不會,最好會,有了計算機硬件基礎,理解STM32起來會快很多,但是我覺得不會有多少人能沉下心來鑽研這部分(笑:-D))(按照*Introduction to Computing Systems [Third Edition]*的目錄來,缺失的知識按照這本教材對應章節來學)
    • Welcome Aboard
    • Bits, Data Types, and Operations
    • Digital Logic Structures
    • The von Neumann Model
    • The LC-3
    • Programming
    • Assembly Language
    • Data Structures
    • I/O
    • A Calculator
    • Introduction to C/C++ Programming
    • Variables and Operators
    • Control Structures
    • Functions
    • Testing and Debugging
    • Pointers and Arrays
    • Recursion
    • I/O in C
    • Dynamic Data Structures in C
    • Introduction to C++

7.0 你所需要的硬件

  • 方案1

    TypeA.png

  • 方案2

    Nucleo.jpg

    Nucleo是ST官方的板子,而且支持Arduino的擴展板,是Arduino的引腳排布,自帶燒錄器,不需要額外的仿真&燒錄設備,適合想從Arduino平滑過渡到STM32的看官,但是如果要打RoboMaster比賽,請務必使用RoboMaster專用的開發板

8.0 你所需要的軟件

  • Linux系統(雖然在MacOS和Win下面開發也沒問題,但是直接在Linux下開發會方便很多,首推Deepin)
  • CLion(非常強大的C/C++ IDE,用起來很順手)
  • STM Stlink Tools(燒錄需要的軟件)
  • GNU Arm Embedded Tool-chain(跨平臺交叉編譯需要的工具鏈)
  • STM32CubeMX(配置芯片引腳和外設,以及生成基本的控制框架)

關於如何配置開發環境,請善用(?)百度娘和谷歌姬,這部分因系統而異,因板子而異,甚至因人而異,所以作者便不再熬述~

9.0 後話

接下來我會寫進階篇 I,是關於基本的GPIO設置與代碼,隨後其他進階篇很快就會出,將介紹各種外設和其使用方法,諸位將很快在教程的指引下完成你的第一個STM32程序,怎麼樣,想想是不是有些小激動呢?~~

10.0 UIUC Open Lab的冰山一腳(試圖吸引點新人 😃 )

RM01.jpg

RM02.jpg

RM03.jpg

RM04.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章