赞
踩
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 软件安装。
在D盘新建STM32CubeMX文件夹,安装到这个路径。
三. 使用 STM32CubeMX 新建工程
通过上一步安装固件库后,我们就可以使用 STM32CubeMX 配置工程,步骤如下:
1. 工程初步建立
2. HSE 和 LSE 时钟源设置
3. 时钟系统(时钟树)配置
4. GPIO 功能引脚配置
5. 配置 Debug 选项
6. 生成工程源码
7. 用户程序
1. 工程初步建立
2. HSE 和 LSE 时钟源设置
3. 时钟系统(时钟树)配置
点击 Clock Configuration 选项卡即可进入时钟系统配置栏。
进入 Clock Configuration 配置栏之后可以看到,界面展现一个完整的 STM32F1 时钟系统框 图。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选 择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值, 那么相应的选项框会红色提示。
这里,我们将配置一个以 HSE 为时钟源,配置 PLL 相关参数,然后系统时钟选择 PLLCLK 为时钟源,最终配置系统时钟为 72MHz 的过程。同时,还配置了 AHB,APB1,APB 和 Systick 的相关分频系数。
第一部分是配置 系统时钟,第二部分是配置 SYSTICK、AHB、APB1 和 APB2 的分频系数。
我们把系统时钟配置分为五个步骤,分别用标号①~⑤表示,详细过程为:
① 时钟源参数设置:我们选择 HSE 为时钟源,即使用外部晶振,所以我们要根据开发板 实际的晶振频率(这里我们是 8MHZ)填写。
② 时钟源选择:我们配置选择器选择 HSE 即可。
③ PLL 倍频系数 PLLMUL 配置。倍频系数 PLLMUL 我们设置为 9。
④ 系统时钟时钟源选择:PLL,HSI 还是 HSE。我们选择 PLL,选择器选择 PLLCLK 即可。
⑤ 经过上面配置以后此时 SYSCLK=72MHz。
经过上面的 5 个步骤,就配置好 STM32F1 的系统时钟为 72MHz。接下来我们还需要配置 AHB、APB1、APB2 和 Systick 的分频系数,为 STM32 的片上外设或 M3 内核设置对应的工作 时钟,为后续使用这些硬件功能做好准备。
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 功能引脚配置
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 选项打开。
如果已经不小心关闭了 Debug 选项,那么下次下载的时候按住复位键,等到工程提示的时 候松开复位键即可,因为 STM32 的芯片默认复位上电时的 Debug 引脚功能是开启的。
6. 生成工程源码
勾选 Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾选这个选项的话将会将每个外设单 独分开成一组.c、.h 文件,使得代码结构更加的清晰
由于 CubeMX 默认勾选了复制所有的库,即工程中不使用到的代码也会复制进来,为了节 省 CubeMX 生成工程的空间,我们勾选生成工程时只复制用到的库
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 开发来说,抛开底层只专注做应用并不实际,毕竟无法使用一套通用设计来满足 不同用户的需求;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。