STM32CubeMX简介

        STM32CubeMX 是由 ST 公司开发的图形化代码自动生成工具,能够快速生成初始化代码, 如配置 GPIO,时钟树,中间件等,使用户专注于业务代码的开发。

一. STM32CubeMX 的作用

        对于 STM32CubeMX 和 STM32Cube 的关系这里我们还需要特别说明一下,STM32Cube 包含 STM32CubeMX 图形工具和 STM32Cube 库两个部分,使用 STM32CubeMX 配置生成的   码,是基于 STM32Cube 库的。也就是说,我们使用 STM32CubeMX 配置出来的初始化代码, 和 STM32Cube 库兼容,例如硬件抽象层代码就是使用的 STM32 的 HAL 库。不同的 STM32 系 列芯片,会有不同的 STM32Cube 库支持,而 STM32CubeMX 图形工具只有一种。所以我们配 置不同的 STM32 系列芯片,选择不同的 STM32Cube 库即可。

        当然,自动生成的驱动代码我们不去仔细专研其原理的话,对学习的提升很有限,而且在 出现 BUG 的时候难以快速定位解决,因此我们也要了解其背后的原理。

二. 安装 STM32CubeMX

        STM32CubeMX 运行环境搭建包含两个部分。首先是 Java 运行环境安装,其次是 STM32CubeMX 软件安装。

STM32CubeMX简介_第1张图片

STM32CubeMX简介_第2张图片

STM32CubeMX简介_第3张图片在D盘新建STM32CubeMX文件夹,安装到这个路径。

STM32CubeMX简介_第4张图片

三. 使用 STM32CubeMX 新建工程

STM32CubeMX简介_第5张图片

STM32CubeMX简介_第6张图片

STM32CubeMX简介_第7张图片通过上一步安装固件库后,我们就可以使用 STM32CubeMX 配置工程,步骤如下:

1. 工程初步建立

2. HSE 和 LSE 时钟源设置

3. 时钟系统(时钟树)配置

4. GPIO 功能引脚配置

5. 配置 Debug 选项

6. 生成工程源码

7. 用户程序

1. 工程初步建立

STM32CubeMX简介_第8张图片

STM32CubeMX简介_第9张图片

2. HSE 和 LSE 时钟源设置

STM32CubeMX简介_第10张图片

3. 时钟系统(时钟树)配置

        点击 Clock Configuration 选项卡即可进入时钟系统配置栏。

        进入 Clock Configuration 配置栏之后可以看到,界面展现一个完整的 STM32F1 时钟系统框 图。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选 择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值, 那么相应的选项框会红色提示。

        这里,我们将配置一个以 HSE 为时钟源,配置 PLL 相关参数,然后系统时钟选择 PLLCLK 为时钟源,最终配置系统时钟为 72MHz 的过程。同时,还配置了 AHB,APB1,APB 和 Systick 的相关分频系数。

        第一部分是配置 系统时钟,第二部分是配置 SYSTICK、AHB、APB1 和 APB2 的分频系数。

STM32CubeMX简介_第11张图片

        我们把系统时钟配置分为五个步骤,分别用标号①~⑤表示,详细过程为:

① 时钟源参数设置:我们选择 HSE 为时钟源,即使用外部晶振,所以我们要根据开发板 实际的晶振频率(这里我们是 8MHZ)填写。

② 时钟源选择:我们配置选择器选择 HSE 即可。

③ PLL 倍频系数 PLLMUL 配置。倍频系数 PLLMUL 我们设置为 9。

④ 系统时钟时钟源选择:PLL,HSI 还是 HSE。我们选择 PLL,选择器选择 PLLCLK 即可。

⑤ 经过上面配置以后此时 SYSCLK=72MHz。

        经过上面的 5 个步骤,就配置好 STM32F1 的系统时钟为 72MHz。接下来我们还需要配置 AHB、APB1、APB2 和 Systick 的分频系数,为 STM32 的片上外设或 M3 内核设置对应的工作 时钟,为后续使用这些硬件功能做好准备。

STM32CubeMX简介_第12张图片

        AHB、APB1 和 APB2 总线时钟以及 Systick 时钟的来源于系统时钟 SYSCLK。其中 AHB 总线时钟 HCLK 由 SYSCLK 经过 AHB 预分频器之后得到,如果我们要设置 HCLK 为 72MHz(最 大为 72Mhz),那么我们只需要配置图中标号⑥的地方为 1 即可。得到 HCLK 之后,接下来我 们将在图标号⑦~⑨处同样的方法依次配置 Systick、APB1 和 APB 分频系数分别为 1、2 和 1。 注意!systick固定为72MHz,配置完成之后,那么HCLK=72MHZ,Systic=72MHz,PCLK1=36MHz, PCLK2=72MHz,这和之前例程配置的时钟是主频一样的。

4. GPIO 功能引脚配置

STM32CubeMX简介_第13张图片

STM32CubeMX简介_第14张图片

        GPIO output level 是 IO 的初始值,由于 LED 一端接 VCC,另一端接 GPIO,故要点亮 LED 灯时,使 GPIO 输出低电平即可。为了一开始让 LED 灯熄灭,我们设置初始值输出高电平。

        GPIO mode 默认是推挽输出,不需要更改。

        GPIO Pull-up/Pull-down 默认是不上下拉,我们改为上拉。

        Maximum output speed 输出速度配置,默认是低速,我们设置为高速。

        User Label 用户符号,我们可以给 PB5 起一个别的名字 LED0。

        PE5 也是按照这样的方法配置即可。

5. 配置 Debug 选项

        由于 CubeMX 默认把 Debug 选项关闭了,这样会给我们带来麻烦:用 CubeMX 生成的工 程编译下载一次后,后续再次下载就会提示错误,因此我们要把 Debug 选项打开。

STM32CubeMX简介_第15张图片

        如果已经不小心关闭了 Debug 选项,那么下次下载的时候按住复位键,等到工程提示的时 候松开复位键即可,因为 STM32 的芯片默认复位上电时的 Debug 引脚功能是开启的。

6. 生成工程源码

STM32CubeMX简介_第16张图片

STM32CubeMX简介_第17张图片

        勾选 Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾选这个选项的话将会将每个外设单 独分开成一组.c、.h 文件,使得代码结构更加的清晰

        由于 CubeMX 默认勾选了复制所有的库,即工程中不使用到的代码也会复制进来,为了节 省 CubeMX 生成工程的空间,我们勾选生成工程时只复制用到的库

STM32CubeMX简介_第18张图片

STM32CubeMX简介_第19张图片

Drivers 文件夹存放的是 HAL 库文件和 CMSIS 相关文件。

Inc 文件夹存放的是工程必须的部分头文件。

MDK-ARM 下面存放的是 MDK 工程文件。

Src 文件夹下面存放的是工程必须的部分源文件。

Template.ioc 是 STM32CubeMX 工程文件,双击该文件就会在 STM32CubeMX 中打开。

7. 用户程序

        生成的 MDK 工程位置是.\MDK-ARM\atk_f103.uvprojx

        STM32CubeMX 生成的 main.c 文件中,有很多地方有“/* USER CODE BEGIN X */”和“/* USER CODE END X */”格式的注释,我们在这些注释的 BEGIN 和 END 之间编写代码,那么重新生成工程之后,这些代码会保留而不会被覆盖。

        编写好程序后,编译没有任何警告和错误。可以直接下载程序到开发板中,使用 ST-Link 下 载,请注意设置 MDK 的下载选项

四. STM32CubeMX 新建工程使用建议

① 使用 CubeMX 的环境搭建工程,工程文件夹路径、文件名不要带任何中文及中文字符, 否则会遇到各种报错;

② 本书以新建工程-HAL 库版本为基准来展开,不对 CubeMX 的使用过多讲解。使用 CubeMX 可以帮助我们快速搭建工程,使用户专注于应用开发,但 STM32 的开发与硬件密切相 关,对 STM32 开发来说,抛开底层只专注做应用并不实际,毕竟无法使用一套通用设计来满足 不同用户的需求;

你可能感兴趣的:(stm32)