RoboMaster机甲大师比赛入门?我们从STM32开始!

2023-05-16

同步博客地址:从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

    • RoboMaster开发板A型 / B型 / C型
    • ST-Link V2 仿真&烧录器(各大电商均有售卖,我就不打广告写店名了)
  • 方案2

    Nucleo.jpg

    • Nucleo开发板

    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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RoboMaster机甲大师比赛入门?我们从STM32开始! 的相关文章

  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • 137-基于stm32单片机智能保温杯控制装置Proteus仿真+源程序

    资料编号 137 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DS18B20传感器 电机 制作一个基于stm32单片机智能保温杯控制装置Proteus仿真 2 通过DS18b20传感器检测当前保温杯水的温度 并且
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • redis限流使用lua脚本

    lua脚本 xff0c 计数器限流 5秒内限流10次 64 param key 64 return public boolean acquire String key long now 61 System currentTimeMillis
  • ES6分页from+size、search_after两种查询

    1 from 43 size 分页查询 64 RequestMapping value 61 34 get 34 method 61 RequestMethod GET public BaseResponse lt List lt Obje
  • 使用activiti总结--bpmn画流程图

    假期结束 xff0c 赶紧总结一下前几天使用的Activiti工作流的一些方法 简单介绍一下Activiti Activiti一套完整的方便的业务流程管理 xff08 BPM xff09 框架 xff0c 它是覆盖了业务流程管理 工作流 服
  • clock函数 使用以及问题

    使用 clock 函数是一个计算程序运行时间 xff08 其实简略的理解为占用CPU的使用时间 xff09 其实如果使用sleep函数 xff0c 程序是放弃CPU的使用权 xff0c 直到某个时间的到来 xff0c 当然就不会存在占用CP
  • 使用activiti总结--发布,办理,查询

    接上一篇文章 xff0c 使用创建好的流程图 xff0c 总结一下activiti发布到查询使用的方法和测试代码 流程图 1 引用配置文件 activiti cfg xml xff0c 不引用或者引用失败的话在创建流引擎的时候会报空指针异常
  • Could not open JDBC Connection for transaction

    操做 xff1a 访问20次数据库没问题 xff0c 超过20次调用后报如下错误 详细报错 xff1a org springframework transaction CannotCreateTransactionException Cou
  • 【可信计算】第八次课:可信软件栈编程开发

    TPM2开源软件包 目前在github上TPM2开源软件一共包含六个项目tpm2 tools tpm2 tss tpm2 pkcs11 tpm2 tss engine tpm2 abrmd tpm2 totp 1 tpm2 tools 这一
  • 国赛----可见光室内定位

    初期试探 拿到题目后 xff0c 反复读了题目 首先队内结合网上资料形成了两种方案 xff0c 原理相同就是利用光信号到达的强度来定位 两者差距在于算法不同而已 xff0c 一种利用计算得出位置 xff0c 另一种就是经过测量得到一种位置与
  • 各种Arduino外部中断程序

    一 中断 Interrupt 的基本概念 中断 xff08 Interrupt xff09 是计算机的一个重要概念 xff0c 现代计算机普遍采用中断技术 什么是中断呢 xff1f CPU执行时原本是按程序指令一条一条向下顺序执行的 但如果
  • PX4通过参数脚本给飞控导入参数

    PX4通过参数脚本给飞控导入参数 先找一架正常能飞的无人机连接地面站 在参数页面右上角点击工具 gt 保存到文件 保存的时候文件名注明参数的相关信息 然后将需要加载参数的无人机连接至地面站 xff0c 注意需要加载参数的无人机必须和保存的参
  • 深蓝 运动规划

    文章目录 CH1 Introduction一 Motion Planning 概念二 Front end xff1a Path finding1 Search based methods2 Sampling based methods3 K
  • 接收机/DTU 安装调试 读取gps数据

    文章目录 一 整体连接图二 DTU配置三 接收机设置 在这里记录一下 xff0c 实验室平台上 xff0c 安装gps接收机和配置的一些步骤 一 整体连接图 二 DTU配置 首先 DTU 需要通过 COM 口和电脑端连接 xff0c 注意这
  • OOQP 安装和使用

    OOQP 安装和使用 1 安装2 使用 1 安装 需要先安装 blas 和 ma27 BLAS xff1a span class token builtin class name cd span my lib span class toke
  • 系统指标

    目录 1 cpu xxx 1 1 cpu空闲率cpu idle cpu idle表示除硬盘IO等待时间以外其它等待时间 xff0c 这个值越大 xff0c 表示cpu越空闲 xff0c 还可以执行更多的任务 xff0c 反之亦然 xff0c
  • stm32 MPU6050 6轴姿态传感器的介绍与DMP的应用

    最近应用到三轴姿态传感器 xff0c 因为之前有MPU6050 xff08 6轴传感器 xff0c 这是6轴的 xff09 xff0c 进行搭配使用 xff0c 通过三轴姿态传感器进行舵机的角度调整 内容来源学习正点原子的教程 xff09
  • 室内外融合北斗+uwb终端数据监听和发送控制方法

    UDP接收GNGGA报文同时转发UDP报文的方法 span class token keyword package span span class token class name Frame span span class token p
  • Ubuntu使用终端命令安装谷歌Chrome浏览器

    使用命令行安装谷歌浏览器稳定版 span class token function sudo span span class token function wget span http www linuxidc com files repo
  • 无人机PX4使用动捕系统mocap的位置实现控制+MAVROS

    动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光
  • Optitrack使用ros完成实时接收刚体的位置与四元数信息

    1 Opitrack系统标定 工作环境 xff1a 运行Motive的Windows主机 和一台安装有ROS的ubuntu电脑 标定步骤 1 准备 优化捕获设置 xff1b 2 在相机预览窗口 xff08 Camera Preview xf
  • RoboMaster机甲大师比赛入门?我们从STM32开始!

    同步博客地址 xff1a 从STM32开始的RoboMaster生活 xff1a 入门篇 项目 amp 教程仓库 xff1a STM32 RoboMaster 1 0 STM32是什么 1 1 定义 ST 43 M 43 32 61 STM