STM32 教程: 01 环境安装与配置
date
Feb 4, 2024
slug
stm32-01
tags
STM32
嵌入式
status
Published
summary
(篇 01)STM32 菜鸟教程:配置入门 CubeMX、Keil IDE,搭建环境
type
Post
前言
这是笔者在深圳科创学院跟随李靖桥 (北京交通大学) 学习 STM32 单片机的学习笔记。
之所以对此进行详细记录,是因为目前互联网上仍然没有很完备的教程,只言片语、胡言乱语,令人摸不着头脑。
本文所述硬件基于大疆 RoboMaster C 型开发板,软件开发平台为 Windows。
建议读者从大疆 RM 官网下载好 C 型开发版原理图、嵌入式软件开发教程手册。建议读者从 Github 下载好 C 型开发版例程。
配置 STM32CubeMX
概述
STM32CubeMX 是意法半导体公司开发的一款集成开发环境工具,用于帮助开发人员快速配置和生成 STM32 微控制器的初始化代码。它可以帮助开发人员通过图形化界面选择所需的外设和功能,并自动生成相应的初始化代码。这样,开发人员可以节省大量的时间和精力,不需要手动编写繁琐的初始化代码。同时,STM32CubeMX 还提供了一些额外的功能,如时钟配置、引脚映射、中断配置等。
总结:STM32CubeMX 提供了大量繁琐的底层代码,不用不行。
下载
前往北京交通大学 RoboMaster 战队官网资料库:
下载 SetupSTM32CubeMX-6.6.0-Win.exe:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2F02e2bced-7e66-4c63-9831-e5e2349065d4%2FUntitled.png?table=block&id=79c959bf-72ab-4dca-8d43-f9e0dbc2d85c&cache=v2)
一路下一步安装即可。
通过 STM32CubeMX 生成项目
打开桌面/开始菜单中的 STM32CubeMX:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2F8b74b61c-ddd5-425f-8d7a-a1338c118764%2FUntitled.png?table=block&id=285223e9-69be-4c00-a2d5-25fb2b43ab59&cache=v2)
这是 STM32CubeMX 的主页,在这里可以打开已有项目,也可以生成新的项目。
这里我们要新建 (New) 项目:由于使用的不是 ST 开发板 (国内买到的正点原子之类都不属于 ST 开发板),选择从 MCU 开始我们的项目。
在新建项目的过程中,有些步骤可能会出现要求下载依赖的情况,同意下载并耐心等待下载完成即可。请自备科学环境!并确保打开虚拟网卡模式。
稍等片刻,进入配置页面:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2F2bd242bd-5df0-43b7-9f61-b56000c02faa%2FUntitled.png?table=block&id=8b5c9a7f-0ac5-4db5-9a65-fc7f9c66b666&cache=v2)
在这里我们输入我们使用的 MCU 型号,并开始项目。
芯片型号可以根据原理图得到,也可以通过观察芯片表面的丝印得到。如果你使用的是大疆开发板,可以看到在 RoboMaster 开发板 C 型中使用的 MCU 型号为 STM32F407IGH6TR。如果你购买的是第三方开发板,请自行查阅购买链接。
![这是大疆 RoboMaster C 型开发板原理图,直连 MCU 的引脚框框下面都会附上定义。](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Fc05457d4-0a6b-4679-b7d6-da16f7f4c219%2FUntitled.png?table=block&id=95f6bdd6-abbf-45dc-a493-545725cc29fe&cache=v2)
按照箭头依次填写并选择相应的 MCU,点击 Start Project,将会弹出配置页面如下:在 SystemCore 中选择 RCC,配置 HSE 为晶体振荡器。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Fe2df012e-5347-4eaf-950f-0d0d65516c70%2FUntitled.png?table=block&id=04a18316-96d2-4bd0-87cd-7b1a09e31a90&cache=v2)
Pinout & Configuration 引脚与配置
System Core 系统核心
RCC(Reset and Clock Controler) 重置和时钟控制器
HSC(High Speed Clock) 高速时钟
Crystal / Ceramic Resonator 晶振
Clock Configuration 时钟配置
Project Manager 项目管理器
完成以上配置后,点击 Clock Configuration 开始配置时钟树:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2F53a904aa-bfc1-402d-8430-748e848c4baf%2FUntitled.png?table=block&id=40f78bbf-b8fd-4d1b-96ad-3fdf5388a6d2&cache=v2)
配置晶振的频率,配置多路复用器和时钟频率。晶振频率可由原理图得到或观察晶振封装丝
印。SYSCLK 是系统时钟,与 CPU 计算速度相关,HCLK 用于为外设提供时钟信号,配置指定
频率后,软件会自动计算各倍频与分频系数。
STM32 一般有 4 个时钟,HSI 内部高速时钟,HSE 外部高速时钟,LSI 内部低速时钟,LSE 内部高速时钟。LSE 和 LSI 一般用于计时(因为 2^15 = 32768,经过分频就可以得到精确的 1ms)和看门狗。HSE 和 HSI 一般用于系统时钟和外设时钟,也是整个系统的主时钟,HSE 精度通常较 HSI 更好,所有一般优先选择使用 HSE,但对于 PCB(印刷电路板)面积敏感的应用,没有足够的空间放置晶振,则可以选择使用 HSI。
我是小白,不会看原理图,不知道每块板子分频应该怎么做?
正解:直接上网搜索对应型号的分频设置!
提示:只需要选好 HSE、输入 Input Frequency、输入 HCLK,CubeMX 软件将会自动求出剩余部分的分频系数!
HCLK 相当于电脑 CPU 的频率,可以进行超频(也就是拉到 168MHz Max 以上)但是不稳定,小白直接输入 Max 值即可,这是厂商标定的稳定频率。
下面选择 Project Manager 配置项目选项:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Fb7da5792-2206-45de-82af-9d75c3eb2f60%2FUntitled.png?table=block&id=fb9cbf3e-b320-4582-bee6-6d3912ed34c5&cache=v2)
在这里需要配置项目名称,位置,工具链/IDE,请注意:项目位置 (Project Location) 字段在路径中不能包含中文,建议放在 C/D 盘根目录下,工具链/IDE 我们使用 MDK-ARM。
这里我们使用 Keil IDE 配置环境,此 IDE 非常难用,在未来的进阶教程中会详细讲述迁移到 CLion 的例子。
点击 Code Generator:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Ff7814515-579a-4863-9a2d-ae3601548218%2FUntitled.png?table=block&id=ce903aaf-ffd8-4959-bdb4-bb241c1a7b64&cache=v2)
我们要求在 Code Generator 中选择生成独立的外设文件,这样可以使得 main.c 更加简洁。
完成以上配置后,即可点击 GENERATE CODE (右上角) 生成项目代码。
生成代码后,会弹出代码生成成功的提示窗口,可以点击 Open Project 打开项目,如果已经打开项目,点击 Close 关闭本窗口即可。STM32CubeMX 中的所有配置均为立即生效,无需单独保存!
别急着关闭!之后当我们需要配置 GPIO/CAN/SPI/UART/PWM/Timer 时,仍然需要时不时地使用 CubeMX 来生成代码。
配置 keil
下载
在北京交通大学 RoboMaster 战队资料库下载 MDK537.EXE:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2F26f9df5a-0d62-4e86-87cb-2aead16e39cd%2FUntitled.png?table=block&id=6544c6da-33c4-4ad2-af83-2fb1289225da&cache=v2)
下载后,一路下一步完成安装,桌面上出现 Keil uVision5。
入门
从 CubeMX 生成的项目路径打开 μVision 5 工程文件(.uvprojx)即可进入 Keil IDE:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Ff97f6fc0-3817-4fc4-aaf9-fae37958732b%2FUntitled.png?table=block&id=2bae807e-8ac5-475e-abed-4565acc88128&cache=v2)
接着我们就进入了 Keil μVision 5 的窗口:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Fec50fe27-22b8-489e-8bcb-1f55fb64eb78%2FUntitled.png?table=block&id=d8055a7e-47af-4341-a98b-9ffa0b5a0957&cache=v2)
从左至右的常用功能说明:
- Build (编译) 写完程序后需要将代码编译为二进制文件才能烧录进开发板中。
- Rebuild (重编译) 编译所有的文件,而 Build 只编译修改后的代码,可以解决一些问题。
- Download (下载/烧录) 将编译后的文件烧录到开发板中。注意:默认情况下需要按下 RST 按键开发板才会重启,加载新的用户程序。
- Options for Target (编译设置) 设置编译相关的工具链。
- Debug (调试) 进入调试模式,可以在运行过程中设置断点、看到变量的实时值。
- Configuration (通用设置) 设置 IDE 相关,例如外观、补全。
配置
因为 STM32CubeMX 生成的项目默认配置使用 AC5(ARM Compiler Version 5)编译器,而我们使用的 MDK537 版本不再默认安装 AC5 而默认安装 AC6 编译器,因此需要更换编译器才可以正常编译。点击魔术棒图标 (Options for Target) 进入编译设置项。将
Target
➡️ Code Generation
➡️ ARM Compiler
中选项改为 Use Default Compiler Version 6
。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2F7fc01a31-a903-4006-9e06-dc8b3b32e23a%2FUntitled.png?table=block&id=d3a45e94-fcad-4bff-aa17-76be6e591ecf&cache=v2)
接下来我们配置调试器。调试器是 PC 与开发板连接的工具,我们的代码烧录、调试都需要通过调试器进行。同样在
Options for Target
中,在 Debug
选项卡内,将 Use
改为对应的调试器 (按实际情况选择):![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F4b7ca86c-d5bb-4419-83a3-89ebf0bb191f%2Fbace2aaf-56c8-44bf-bbf7-58efb87ef3a2%2FUntitled.png?table=block&id=578fec71-d4eb-4caf-acb9-89766fa4fb76&cache=v2)
环境配置完成后,先点击编译,再点击下载,就可以把程序烧录到 MCU 中。