炼金浪人 发表于 2020-3-9 05:00:04

从STM32开始的RoboMaster生活:入门篇

## 从STM32开始的RoboMaster生活:入门篇

## 1.0 STM32是什么

### 1.1 定义



- **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架构就是基于精简指令集的。
>
>
>
> 而复杂指令集,强调指令的多样性和复杂性,常见于电脑和大型服务器,以往的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家族是非常庞大而繁杂的,当然,这里要是全部讨论比较一番,估计已经可以出几本书了www,所以,我们主要分析一下STM32系列下的MCU微控制器(左边的MPU才是微处理器)





我来简单概括一下,一共有4个分支

1. **High-performance MCU**: 高性能微处理器,是以CPU高度集成和多媒体应用为目的开发的,基于Cortex-M3/4/7,频率从120MHz (F2) 到400MHz (H7) 不等。该系列均配备ART^TM^加速器,能够从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电压。

如果各位需要购入,请务必详细阅读每个微控制器的详细数据,再根据项目要求来谨慎购买。推荐阅读:[官方选材手册](https://www.st.com/content/ccc/resource/sales_and_marketing/promotional_material/brochure/f0/93/da/5c/6b/31/4a/96/brstm32.pdf/files/brstm32.pdf/jcr:content/translations/en.brstm32.pdf)。

## 2.0 为什么选择STM32,抛弃Arduino?

这是个艰难的选择,我们有无数的理由选择Arduino,放弃STM32,比如Arduino简单易学开发迅速支持强大BUG少,STM32复杂难懂开发缓慢支持受限BUG多,但是很多时候我们不得不承认,现实就是,几乎没有真的用Arduino做产品开发的,而最流行的专业的嵌入式开发,STM32就是绕不开的一条路。说白了:**Arduino就是玩具,给兴趣爱好者玩的;STM32才是真正的嵌入式,远远比Arduino强大几个量级,是开发电子产品的必备技能**。

下面我们再详细的列举一下抛弃Arduino,选择STM32的理由

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


我们可以看出,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 大疆创新发起并承办..…..…

哦我的天哪,无聊死了,我们还是直接一点,看看实际的比赛

https://www.bilibili.com/video/av76130870/

## 5.0 RoboMaster仓库 & 教程安排

!(https://i.loli.net/2020/03/09/XwhsFln6xEMbTe4.png)

**UIUC RoboMaster 校队仓库**:(https://github.com/illini-robomaster)

我首先会写个入门篇,介绍一下STM32和RoboMaster(就是本片内容),然后进入进阶篇,详细说明STM32所有的外设,并给出代码和配置,最后在比赛篇带着各位逐行解析上面仓库里面的所有代码,并说明实际硬件的一些配置和使用事项,比赛篇我会从(https://github.com/illini-robomaster/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 *的目录来,缺失的知识按照这本教材对应章节来学)
   - 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**:



- (https://www.robomaster.com/zh-CN/products/components/general)
- ST-Link V2 仿真&烧录器(各大电商均有售卖,我就不打广告写店名了)

- **方案2**:



- (https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html)

> Nucleo是ST官方的板子,而且支持Arduino的扩展板,是Arduino的引脚排布,自带烧录器,不需要额外的仿真&烧录设备,适合想从Arduino平滑过渡到STM32的看官,但是如果要打RoboMaster比赛,请务必使用RoboMaster专用的开发板

## 8.0 你所需要的软件

- (https://www.deepin.org)(虽然在MacOS和Win下面开发也没问题,但是直接在Linux下开发会方便很多,首推Deepin)
- (https://www.jetbrains.com/clion/)(非常强大的C/C++ IDE,用起来很顺手)
- (https://github.com/texane/stlink)(烧录需要的软件)
- (https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads)(跨平台交叉编译需要的工具链)
- (https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html#tools-software)(配置芯片引脚和外设,以及生成基本的控制框架)

> 关于如何配置开发环境,请善用(?)百度娘和谷歌姬,这部分因系统而异,因板子而异,甚至因人而异,所以作者便不再熬述~

## 9.0 后话

接下来我会写进阶篇 I,是关于基本的GPIO设置与代码,随后其他进阶篇很快就会出,将介绍各种外设和其使用方法,诸位将很快在教程的指引下完成你的第一个STM32程序,怎么样,想想是不是有些小激动呢?~~

## 10.0 UIUC Open Lab的冰山一脚(试图吸引点新人 :) )

!(https://i.loli.net/2020/03/09/USfVzQcZAEBb8jJ.jpg)

!(https://i.loli.net/2020/03/09/XqgQPM1tUJsWcCV.jpg)

!(https://i.loli.net/2020/03/09/jwHQAFxlervmZGD.jpg)

!(https://i.loli.net/2020/03/09/Tu5vRqBY4JEhsWU.jpg)

如果诸位看官喜欢的话,想让这个系列继续下去的话,就请在下方留言吧~

rzyzzxw 发表于 2020-3-9 08:40:48

喜欢,喜欢。{:6_213:}

铁熊 发表于 2020-3-9 17:32:13

就喜欢硬核内容

帅猫 发表于 2020-3-9 19:35:27

初中生表示想去AWA

digi_cow 发表于 2020-3-9 21:30:32

硬核雄文{:6_209:}

炼金浪人 发表于 2020-3-9 23:41:55

帅猫 发表于 2020-3-9 19:35
初中生表示想去AWA

我记得RoboMaster有高中夏令营,等到了高中可以考虑去qwq

DFHk-0ykaN8 发表于 2020-3-16 10:04:54

硬核硬核硬核硬核硬核

发表于 2020-3-18 15:26:31

有没有stm32的中文教程推荐

炼金浪人 发表于 2020-3-18 23:41:38

槃 发表于 2020-3-18 15:26
有没有stm32的中文教程推荐

我首先推荐英文的,我也不知道是什么原因,但是在计算机领域,如果有能力,就一定要读英文教材,因为英文的解释都更清晰明了,步骤层层递减,而中文总是喜欢用高深词汇来吓萌新。英文我推荐《Mastering STM32》,和ST官方的《DS9405》与《RM0090》,没有中文对应的版本。如果只能看中文教程的话,我推荐《STM32F429开发指南-HAL库版本_V1.1》和《STM32F429开发指南-寄存器版本_V1.1》。{:6_212:}

gada888 发表于 2020-5-30 16:49:05

支持
页: [1]
查看完整版本: 从STM32开始的RoboMaster生活:入门篇