OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 38|回复: 0

《STM32H7R7开发指南 V1.1 》第九章 STM32CubeMX简介

[复制链接]

1291

主题

1305

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
5529
金钱
5529
注册时间
2019-5-8
在线时间
1457 小时
发表于 9 小时前 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2026-3-26 09:44 编辑

第九章 STM32CubeMX简介

1)实验平台:正点原子STM32H7R7开发板

2)章节摘自【正点原子】STM32H7R7开发指南 V1.1

3)购买链接: https://detail.tmall.com/item.htm?id=820823382459

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/stm32/zdyz_stm32h7rx.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子STM32开发板技术交流群:756580169


2.jpg

3.png

STM32CubeMX是由ST公司开发的图形化代码自动生成工具,能够快速生成初始化代码,如GPIO、时钟树、中间件等,使用户专注于业务代码的开发。现在ST主推HAL库,经典的标准外设库已经停止维护了,新产品也只提供HAL库的代码,因此,我们学习HAL库是更加有优势的,由于HAL库具有低耦合、通用、抽象了硬件层,使得开发者无需太过关注硬件驱动的实现,使得开发更加的简单快速,更容易维护,因此被越来越多的产品所使用。
本章将分为如下几个小节:
9.1 STM32CubeMX的作用
9.2 安装STM32CubeMX
9.3 使用STM32CubeMX新建工程
9.4 STM32CubeMX新建工程使用建议


9.1 STM32CubeMX的作用
STM32CubeMX具有如下特性:
①直观的选择MCU型号,可指定系列、封装、外设数量等条件
②微控制器图形化配置
③自动处理引脚冲突
④动态设置时钟树,生成系统时钟配置代码
⑤可以动态设置外围和中间件模式和初始化
⑥功耗预测
⑦C代码工程生成器覆盖了STM32微控制器初始化编译软件,如IAR,KEIL,GCC
⑧可以独立使用或者作为Eclipse插件使用
⑨可作为ST的固件包、芯片手册等的下载引擎
这里特别说明一下STM32CubeMX和STM32Cube固件库的关系,STM32CubeMX图形工具配置生成的代码,是基于STM32Cube固件库的,并且可以在图形工具中直接下载STM32Cube固件库。也就是说,我们使用STM32CubeMX配置出来的初始化代码,兼容STM32Cube库,例如硬件抽象层代码就是使用的STM32的HAL库。不同系列的STM32芯片,会有不同系列的STM32Cube库,而STM32CubeMX图形工具只有一个,所以开发不同的STM32系列芯片,选择不同系列的STM32Cube库即可,它们的关系如下图所示:


第九章 STM32CubeMX简介811.png
图9.1.1 STM32CubeMX和STM32Cube固件库的关系

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

9.2 安装STM32CubeMX
STM32CubeMX6.2.0版本开始内嵌了Java运行环境,所以6.2.0版本之后不再需要额外安装Java,本书以介绍STM32CubeMX6.11.1版本安装过程为例,故直接安装STM32CubeMX即可。

9.2.1 安装STM32CubeMX
在安装了Java运行环境之后,接下来我们安装STM32CubeMX图形化工具。该软件可以直接从光盘资料获取,目录如下:A盘→6,软件资料→1,软件→3、STM32CubeMX,也可以直接从ST官方下载,下载网址为:https://www.st.com/en/development-tools/stm32cubemx.html
接下来我们直接双击SetupSTM32CubeMX-6.11.1.exe,安装步骤如下:


第九章 STM32CubeMX简介1349.png
图9.2.2.1 启动安装

第九章 STM32CubeMX简介1365.png
图9.2.2.2 开始安装

第九章 STM32CubeMX简介1381.png
图9.2.2.3 接收本许可协议

第九章 STM32CubeMX简介1400.png
图9.2.2.4 勾选选项即可

第九章 STM32CubeMX简介1418.png
图9.2.2.5 选择安装路径

第九章 STM32CubeMX简介1436.png
图9.2.2.6 创建快捷方式

第九章 STM32CubeMX简介1454.png
图9.2.2.7 安装进度提示

第九章 STM32CubeMX简介1472.png
图9.2.2.8 完成安装


9.3 使用STM32CubeMX新建工程
大多数情况下,我们都只使用STM32CubeMX来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在STM32CubeMX中完成的,需要用户自己根据需求来实现。

9.3.1 打开STM32CubeMX
双击桌面STM32CubeMX快捷方式图标,如图9.3.1.1所示:

第九章 STM32CubeMX简介1661.png
图9.3.1.1 CubeMX快捷方式

打开后CubeMX主界面如图9.3.1.2所示:

第九章 STM32CubeMX简介1708.png
图9.3.1.2 CubeMX主界面

9.3.2 下载和关联的STM32Cube固件包
我们知道STM32CubeMX图形工具只有一种, STM32Cube固件包却有多种,需要选择我们工程对应的固件包。
为了方便,新建工程前,我们先来下载和关联STM32Cube固件包,点击Help->Manage embedded software packages,如图9.3.2.1所示:


第九章 STM32CubeMX简介1900.png
图9.3.2.1 管理固件包

然后弹出管理界面,在该窗口找到STM32H7RS列表选项,勾选1.0.0版本。关联STM32Cube固件包有两个方法,如图9.3.2.2所示:

第九章 STM32CubeMX简介1989.png
图9.3.2.2 下载和关联STM32Cube固件包

方法二:下载好之后,会自动关联,所以不需要多讲什么。
方法一:点击后,弹出下面的窗口,然后选择光盘中的对应的固件包,注意这里是压缩包的形式,如图9.3.2.3所示:


第九章 STM32CubeMX简介2101.png
图9.3.2.3 关联本地STM32Cube固件包

第九章 STM32CubeMX简介2129.png
图9.3.2.4 等待关联

第九章 STM32CubeMX简介2145.png
图9.3.2.5 关联成功

关联好固件包我们就可以开始新建工程了。

9.3.3 新建工程
使用STM32CubeMX配置工程的一般步骤为:
1,工程初步建立
2,HSE和LSE时钟源设置
3,时钟系统(时钟树)配置
4,GPIO功能引脚配置
5,Cortex-M7内核基本配置(限定项)
6,生成工程源码
7,用户程序
接下来将按照这7个步骤,依次教大家使用STM32CubeMX工具生成一个完整的工程。
1 工程初步建立
方法一:依次点击“File”,“New Project”即可建新工程。如果之前打开过的话,左侧最近打开的过程一列会有打开的工程列表,直接点击这些工程也可以打开。
方法二:直接点击ACCESS TO MCU SELECTOR。
具体操作如图9.3.3.1所示:


第九章 STM32CubeMX简介2489.png
图9.3.3.1 新建工程

点击新建工程后,第一次可能会联网下载一些的文件,可能等待时间比较长,可以直接选择取消即可。

第九章 STM32CubeMX简介2551.png
图9.3.3.2 启动时联网更新检测

之后都可以进入芯片选型界面,如图9.3.3.3所示:

第九章 STM32CubeMX简介2600.png
图9.3.3.3 芯片选型界面

选择具体的芯片型号,如图9.3.3.4所示:

第九章 STM32CubeMX简介2641.png
图9.3.3.4 选择具体的芯片型号

选择了芯片型号后,提示是否选择默认设置,选择是,然后弹出主设计界面,如图9.3.3.5所示:

第九章 STM32CubeMX简介2709.png
图9.3.3.5 主设计界面

2 HSE和LSE时钟源设置
进入工程主设计界面后,首先设置时钟源HSE和LSE。如图9.3.3.6所示:


第九章 STM32CubeMX简介2780.png
图9.3.3.6 设置时钟源HSE和LSE

图9.3.3.6中的标号3和4,我们都选择了Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。我们开发板的外部高速晶振和外部低速晶振分别是:24MHZ和32.768KHZ。所以HSE时钟频率就是24MHZ,LSE时钟频率就是32.768KHZ。
选项Master Clock Output 1 用来选择是否使能MCO1引脚时钟输出,选项Master Clock Output 2用来选择是否使能MCO2引脚时钟输出,最后一个选项Audio Clock Input(I2S_CKIN)用来选择是否从I2S_CKIN(PC9)输入I2S时钟。这里大家要注意,因为选项Master Clock Output 2和选项Audio Clock Input(I2S_CKIN)都是使用的PC9引脚,所以如果我们使能了其中一个,那么另一个选项会自动显示为红色,也就是不允许配置,这就是STM32CubeMX的自动冲突检测功能。
3 时钟系统(时钟树)配置
点击Clock Configuration选项卡即可进入时钟系统配置栏,如下图9.3.3.7所示:


第九章 STM32CubeMX简介3292.png
图9.3.3.7 时钟系统配置栏

进入Clock Configuration配置栏之后可以看到,界面展现一个完整的STM32H7R7时钟系统框图。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
这里,我们将配置一个以HSE为时钟源,配置PLL1相关参数,然后系统时钟选择PLLCLK为时钟源,最终配置系统时钟为600MHz的过程。同时,还配置了AHB1,2,3,4,5,APB1,APB2,APB4,APB5和Systick的相关分频系数。由于图片比较大,我们把主要的配置部分分两部分来讲解,第一部分是配置系统时钟,第二部分是配置SYSTICK、AHB1,2,3,4,5、APB1、APB2、APB4和APB5的分频系数。首先我们来看看第一部分配置如下图9.3.3.8所示:


第九章 STM32CubeMX简介3704.png
图9.3.3.8 系统时钟配置图

我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
①、时钟源参数设置:我们选择HSE为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是24MHZ)填写。
②、时钟源选择:我们配置选择器选择HSE即可。
③、PLL1分频系数M配置。分频系数M我们设置为6。
④、PLL1倍频系数N配置。倍频系数N我们设置为300。
⑤、PLL1分频系数P配置。分频系数P我们配置为2。
⑥、系统时钟时钟源选择:PLL,CSI,HSI还是HSE。我们选择PLL,选择器选择PLLCLK即可。
⑦、经过上面配置以后此时SYSCLK=600Mhz。
经过上面的7个步骤,就会生成标准的600MHz系统时钟。接下来我们只需要配置AHB1,2,3,4,5、APB1、APB2、APB4、APB5和Systick的分频系数,就可以实现sys.c文件中的sys_stm32_clock_init函数配置的部分时钟系统。配置如下图9.3.3.9所示:


第九章 STM32CubeMX简介4145.png
图9.3.3.9 AHB和APB总线时钟配置

AHB1,2,3,4,5、APB1、APB2、APB4和APB5总线时钟以及Systick时钟的最终来源都是系统时钟SYSCLK。其中AHB总线时钟HCLK是由SYSCLK经过AHB预分频器之后的来,如果我们要设置HCLK为300MHz(最大也就300Mhz),那么我们只需要配置图中标号⑧的地方为2即可。得到HCLK之后,接下来我们将在图标号⑨~⑫处同样的方法依次配置APB5、APB1、APB2和APB4分频系数分别为2,2、2和2即可。注意!systick固定为600MHz,配置完成之后,那么HCLK=300MHZ,Systic=600MHz,PPRE5=PPRE1=PPRE2=PPRE4=150MHz,这和我们使用sys_stm32_clock_init函数配置的时钟是一样的。
4 GPIO功能引脚配置
本小节,我们讲解怎么使用STM32CubeMX工具配置STM32H7RS的GPIO口。STM32H7R7开发板的PD14和PC0引脚分别连接一个LED灯,我们来学习配置这两个IO口的相关参数。这里我们回到STM32CubeMX的Pinout&Configuration选项,在搜索栏输入PD14后回车,可以在引脚图中显示位置,如下图9.3.3.10所示:


第九章 STM32CubeMX简介4707.png
图9.3.3.10 搜索引脚位置

接下来,我们在图9.3.3.11引脚图中点击PD14,在弹出的下拉菜单中,选择IO口的功能为GPIO_Output。操作方法如下图9.3.3.11所示:

第九章 STM32CubeMX简介4803.png
图9.3.3.11 配置GPIO模式

同样的方法,我们配置PD14选择功能为GPIO_Output即可。设置好即可看到引脚从灰色变成绿色,标识该管脚已经启用。这里我们需要说明一下,如果我们要配置IO口为外部中断引脚或者其他复用功能,我们选择相应的选项即可。配置完IO口功能之后,还要配置IO口的速度,上下拉等参数。这些参数我们通过System Core下的GPIO选项进行配置,如图9.3.3.12所示:

第九章 STM32CubeMX简介5008.png
图9.3.3.12 GPIO选项

我们先配置PD14,PC0配置方法一样的。点击图9.3.3.12的中间框里面的PD14,配置如图9.3.3.13所示:

第九章 STM32CubeMX简介5087.png
图9.3.3.13 配置GPIO口详细参数

GPIO output level是IO的初始值,为了开始让LED灯熄灭,我们设置初始值输出高电平。
GPIO mode默认是推挽输出,不需要更改。
GPIO Pull-up/Pull-down默认是不上下拉,我们改为上拉。
Maximum output speed输出速度配置,默认是低速,我们设置为高速(可以不改)。
User Label用户符号,我们可以给PD14起一个别的名字。
5 Cortex-M7内核基本配置
这里我们主要配置Cortex-M7内核相关的参数。我们依次点击Cortex_M7 进入配置界面,操作过程如下图9.3.3.14所示:


第九章 STM32CubeMX简介5390.png
图9.3.3.14 Cotex_M7配置

该界面一共有两个配置栏目。第二个配置栏目Cortex Interface Settings下面其中有两个配置项:
(1) CPU ICache:使能I-Cache。
(2) CPU DCache::使能D-Cache。
上面这2个参数是CM7内核相关配置。第二个配置栏目Cortex Memory Protection Unit,是用来配置内存保护单元MPU,在我们后面的实验会讲解MPU配置。
6 生成工程源码
接下来我们学习怎么设置生成一个工程,Project Manager-> Project选项用来配置工程的选项,我们了解一下里面的信息。
Project Name:工程名称,填入工程名称(半角,不能有中文字符)
Project Location:工程保存路径,点击Browse选择保存的位置(半角,不能有中文字符)
Toolchain Folder Location:工具链文件夹位置,默认即可。
Application Structure:应用的结构,选择Basic(基础),不勾选Do not generate the main(),因为我们要其生成main函数。
Toolchain/IDE:工具链/集成开发环境,我们使用Keil,因此选择MDK-ARM,Min Version选择V5.37(最新)。
Linker Settings 链接器设置:
Minimum Heap Size 最小堆大小,默认(大工程需按需调整)。
Minimum Stack Size 最小栈大小,默认(大工程需按需调整)。
MCU and Firmware Package是 MCU及固件包设置:
MCU Reference:目标MCU系列名称。
Firmware Package Name and Version :固件包名称及版本。
勾选Use Default Firmware Location,文本框里面的路径就是固件包的存储地址,我们使用默认地址即可。(这里因为我有两个版本的固件包,所以它默认使用最新的,这个关系不大,就用新的)。 最后工程配置,如图9.3.3.15所示:


第九章 STM32CubeMX简介6305.png

第九章 STM32CubeMX简介6307.png
图9.3.3.15 工程配置

打开Project Manager-> Code Generator选项,Generated files 生成文件选项,勾选Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾选这个选项的话将会将每个外设单独分开成一组.c、.h文件,使得代码结构更加的清晰,如图9.3.3.16所示:

第九章 STM32CubeMX简介6518.png
图9.3.3.16 代码生成器设置

至此工程最基础配置就已经完成,点击蓝色按钮(SENERATE CODE)就可以生成工程。

第九章 STM32CubeMX简介6584.png
图9.3.3.17生成工程

在弹出来的窗口中点击Open Project就打开MDK工程。

第九章 STM32CubeMX简介6633.png
图9.3.3.18 打开工程

完整的STM32H7RS工程就已经生成完成。生成后的工程目录结构如下图9.3.3.19所示:

第九章 STM32CubeMX简介6697.png
图9.3.3.19 STM32CubeMX生成的工程目录结构

Appli文件夹存放的是工程必须的部分头文件和源文件。
Boot文件夹存放的是工程必须的部分头文件和源文件。
Drivers文件夹存放的是HAL库文件和CMSIS相关文件。
MDK-ARM下面存放的是MDK工程文件。
Template.ioc是STM32CubeMX工程文件,双击该文件就会在STM32CubeMX中打开。
7 用户程序
在编写用户程序之前,首先我们打开生成的工程模板进行编译,发现没有任何错误和警告。
接下来我们看看生成的工程模板的main函数,这里我们删掉了源码注释,关键源码如下:

  1. int main(void)
  2. {
  3.   MPU_Config();
  4.   SCB_EnableICache();
  5.   SCB_EnableDCache();
  6.   HAL_Init();
  7.   SystemClock_Config();
  8.   MX_GPIO_Init();
  9.   while (1)
  10.   {
  11.   }
  12. }
复制代码
大家需要注意,STM32CubeMX生成的main.c文件中,有很多地方有“/* USER CODE BEGIN X */”和“/* USER CODE END X */”格式的注释,我们在这些注释的BEGIN和END之间编写代码,那么重新生成工程之后,这些代码会保留而不会被覆盖。
我们编写一个跑马灯的用户程序,程序具体如下:

  1. /**
  2.   * @brief  The application entry point.
  3.   * @retval int
  4.   */
  5. int main(void)
  6. {
  7.   MPU_Config();
  8.   SCB_EnableICache();
  9.   SCB_EnableDCache();
  10.   HAL_Init();
  11.   SystemClock_Config();
  12.   MX_GPIO_Init();
  13.   while (1)
  14.   {
  15.     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
  16.     HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
  17.     HAL_Delay(500);        
  18.     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
  19.     HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
  20.     HAL_Delay(500);
  21.   }
  22. }
复制代码
编写好程序后,编译没有任何警告和错误。可以直接下载程序到开发板中,使用DAP下载,请注意设置MDK的下载选项,如果不清楚设置的读者可以回看本书第四章的相关知识点。下载后,可以看到LED0和LED1同时按500ms的频率亮灭,效果与其它版本的新建工程相同。
本小节使用STM32CubeMX新建的工程模板在我们光盘目录:“4,程序源码\标准例程-HAL库版本\实验0-2 Template工程模板-使用STM32CubeMX配置 ”中有存放,大家在编写用户代码过程中可以参考该工程的main.c文件。


9.4 STM32CubeMX新建工程使用建议
① 使用CubeMX的环境搭建工程,工程文件夹路径、文件名不要带任何中文及中文字符,否则会遇到各种报错;
② 本书以新建工程-HAL库版本为基准来展开,不对CubeMX的使用过多讲解。使用CubeMX可以帮助我们快速搭建工程,使用户专注于应用开发,但STM32的开发与硬件密切相关,对STM32开发来说,抛开底层只专注做应用并不实际,毕竟无法使用一套通用设计来满足不同用户的需求;
③ 关于新建CubeMX的工程路径中有中文的情况的解决:
如果我们配置的CubeMX工程路径里面有中文可能会报以下的错误:


第九章 STM32CubeMX简介8325.png
图9.4.1 直接编译报错

造成错误的原因是CubeMX对中文的支持不友好,且生成的MDK工程默认通过工程中的CMSIS那个绿色的控件选择启动文件而不是直接添加启动文件(startup_xxx.s)到我们的工程中,而有中文路径时就会找不到,有两个解决办法:
1、用CubeMX生成的工程不要放置在包含中文路径的文件夹下;
2、添加启动文件到我们的工程中,我们新建一个Application/MDK-ARM分组,把startup_stm32h7r7xx.s添加到这个分组,如图9.4.2所示:


第九章 STM32CubeMX简介8571.png
图9.4.2 STM32CubeMX生成的工程目录结构

④ 关于配置的文件CubeMX工程(.ioc后缀)名字有中文的情况,我们建议重新新建工程或者把生成的工程文件重命名为英文。因为带中文的CubeMX工程生成的MDK的Output目录有中文,MDK也会报错,尽管可以重新设置MDK工程的Output目录和添加③所描述步骤的启动文件,使本次编译通过,但下次重新用CubeMX生成工程时,仍旧需要重复修改配置。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-3-26 19:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表