OpenEdv-开源电子网

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

《STM32H562开发指南 V1.0 》第九章 STM32CubeMX简介

[复制链接]

1381

主题

1397

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
5892
金钱
5892
注册时间
2019-5-8
在线时间
1634 小时
发表于 4 天前 | 显示全部楼层 |阅读模式
第九章 STM32CubeMX简介

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

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

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

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

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

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


2.jpg

3.png

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

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

9.2 安装STM32CubeMX
STM32CubeMX运行环境搭建包含两个部分,首先安装Java环境,再安装STM32CubeMX。

9.2.1 安装JAVA环境
安装Java运行环境,大家可以到Java官网www.java.com下载最新的Java软件,也可以直接从光盘资料获取安装包,目录如下:A盘→6,软件资料→1,软件→3、STM32CubeMX→Java安装包,Java安装包文件下有x64和x86两个文件夹,分别是64位和32位的电脑的安装包,大家根据自己电脑的位数选择即可。比如64位电脑选择x64文件夹的jre-8u301-windows-x64.exe安装包,并根据提示安装即可。安装完成之后提示界面如下图9.2.1.1所示。

第九章 STM32CubeMX简介1255.png
图9.2.1.1 Java安装成功提示界面

安装完Java运行环境之后,为了检测是否正常安装,我们可以打开Windows的命令输入框,输入:java –version命令,如果显示Java版本信息,则安装成功。提示信息如下图9.2.1.2:

第九章 STM32CubeMX简介1378.png
图9.2.1.2 查看Java版本

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


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

第九章 STM32CubeMX简介1717.png
图9.2.2.2 接受本许可协议

第九章 STM32CubeMX简介1736.png
图9.2.2.3 勾选第一项即可

第九章 STM32CubeMX简介1755.png
图9.2.2.4 指定安装路径

第九章 STM32CubeMX简介1773.png
图9.2.2.5 创建快捷方式

第九章 STM32CubeMX简介1791.png
图9.2.2.6 安装进度提示

第九章 STM32CubeMX简介1809.png
图9.2.2.7 完成安装

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

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

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

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

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

9.3.2 下载和关联的STM32Cube固件包
新建工程前,我们需要先安装关联与STM32主芯片对应的STM32Cube固件包,点击Help->Manage embedded software packages,如图9.3.2.1所示。

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

然后弹出管理界面,在该窗口找到STM32H5列表选项,勾选1.0.0版本。这里选择1.0.0版本是因为我们的光盘的固件包是这个版本的。关联STM32Cube固件包有两个方法,如图9.3.2.2所示.

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

然后弹出管理界面,在该窗口找到STM32H5列表选项,勾选1.0.0版本。这里选择1.0.0版本是因为我们的光盘的固件包是这个版本的。关联STM32Cube固件包有两个方法,如图9.3.2.2所示.

图9.3.2.2 下载和关联STM32Cube固件包

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


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

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

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

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

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


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

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

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

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

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

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

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

选择了芯片型号后,弹出主设计界面,如图9.3.3.5所示。

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

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


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

图9.3.3.6中的标号3和4,我们都选择了Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。我们开发板的外部高速晶振和外部低速晶振分别是:8MHZ和32.768KHZ。所以HSE时钟频率就是8MHZ,LSE时钟频率就是32.768KHZ。
3 时钟系统(时钟树)配置
点击Clock Configuration选项卡即可进入时钟系统配置栏,如下图9.3.3.7所示:


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

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


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

我们把系统时钟配置分为八个步骤,分别用标号1~8表示,详细过程如下:
1、时钟源参数设置:我们选择HSE为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是8MHZ)填写。
2、时钟源选择:我们配置选择器选择HSE即可。
3、PLL1分频系数M配置。分频系数M我们设置为4。
4、PLL1倍频系数N配置。倍频系数N我们设置为250。
5、PLL1分频系数R配置。分频系数R我们配置为2。
6、PLL1分频系数Q配置。分频系数Q我们配置为2。
7、PLL1分频系数P配置。分频系数P我们配置为2。
8、系统时钟源可选:HIS/CSI/HSE/PLLCLK。我们选择的是PLLCLK。
经过上面的8个步骤,就完成系统时钟的配置,得到250MHz的系统时钟。接下来我们还需要配置AHB、APB1、APB2、APB3和Systick的分频系数,就可以实现sys.c文件中的sys_stm32_clock_init函数配置的部分时钟系统。配置如下图9.3.3.9所示:



第九章 STM32CubeMX简介4136.png
图9.3.3.9 AHB、APB1、APB2、APB3和Systick时钟配置

AHB、APB1、APB2、APB3总线时钟以及Systick时钟的最终都是来源于系统时钟SYSCLK。其中AHB总线时钟HCLK是由SYSCLK经过AHB预分频器之后的来,如果我们要设置HCLK为250MHz,那么我们只需要配置图中标号9的地方为1即可。得到HCLK之后,接下来我们将在图标号10~14处依次配置Systick、APB1、APB2、APB3的时钟。按照图9.3.3.9的配置,最终得到的时钟情况如下:Systick=PCLK1=PCLK2=PCLK3=250MHz,这和我们使用sys_stm32_clock_init函数配置的时钟是一样的。Systick 的时钟是由HAL_Init函数配置的。
4 GPIO功能引脚配置
本小节,我们讲解怎么使用STM32CubeMX工具配置STM32H5的GPIO口。Mini STM32H562开发板的PB4和PB5引脚各连接一个LED灯,我们来学习配置这两个IO口的相关参数。这里我们回到STM32CubeMX的Pinout&Configuration选项,在搜索栏输入PB4后回车,可以在引脚图中显示位置,如下图9.3.3.10所示:


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

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

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

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

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

接下来,点击图9.3.3.12的2号框里面的PB4,配置如图9.3.3.13所示。

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

GPIO output level是IO的初始值,为了开始让LED灯熄灭,我们设置初始值输出高电平。
GPIO mode默认是推挽输出,不需要更改。
GPIO Pull-up/Pull-down默认是不上下拉,我们改为上拉。
Maximum output speed输出速度配置,默认是低速,我们设置为中速(可以不改)。
User Label用户符号,我们可以给PB4起一个别的名字。
PB5也是按照这样的方法配置即可。
5 配置ICACHE,提高系统性能
配置ICACHE,操作过程如下图9.3.3.14所示:


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

默认情况下,CubeMX已经帮我们设置好了。
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.32(最新)。
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简介6056.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简介6267.png
图9.3.3.16 代码生成器设置

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

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

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

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

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

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

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

  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   MX_GPIO_Init();
  6.   MX_ICACHE_Init();
  7.   while (1)
  8.   {
  9.   }
  10. }
复制代码
大家需要注意,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.   HAL_Init();
  8.   SystemClock_Config();
  9.   MX_GPIO_Init();
  10.   MX_ICACHE_Init();
  11.   while (1)
  12.   {
  13.     /* USER CODE BEGIN 3 */
  14.     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);           /* PB4置1 */
  15.     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);         /* PB5置0 */
  16.     HAL_Delay(500);
  17.     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);          /* PB4置0 */
  18.     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);            /* PB5置1 */
  19.     HAL_Delay(500);
  20.   }
  21.   /* USER CODE END 3 */
  22. }
复制代码
编写好程序后,编译没有任何警告和错误,就可以直接下载程序到Mini STM32H562开发板中(使用DAP下载,请注意配置MDK)。
本小节使用STM32CubeMX新建的工程模板在我们光盘目录:“4,程序源码\1,标准例程-HAL库版本\实验0 基础入门实验\实验0-3,新建工程实验-CubeMX版本”中有存放,大家在编写用户代码过程中可以参考该工程的main.c文件。


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


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

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


第九章 STM32CubeMX简介8273.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-8-2 10:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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