正点原子 发表于 2022-10-26 10:40:22

《STM32MP1 M4裸机HAL库开发指南》第十章 STM32CubeMX简介

本帖最后由 正点原子 于 2022-10-26 10:39 编辑

1)实验平台:正点原子STM32MP157开发板
2)购买链接:https://item.taobao.com/item.htm?&id=629270721801
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-318813-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子STM32MP157技术交流群:691905614




第十章 STM32CubeMX简介

ST官方新推出的STM32CubeIDE已经集成集成了TrueSTUDIO和STM32CubeMX插件,所以可以在STM32CubeIDE上配置时钟树以及外设,然后生成初始化代码,TrueSTUDIO插件具有项目创建和管理、代码编辑、代码编译以及代码调试等功能,所以也可以使用STM32CubeIDE来开发,可以查看正点原子的《STM32MP1 M4裸机CubeIDE开发指南》进行学习。
如果想使用MDK来开发,又想使用STM32CubeMX生成初始化代码给MDK使用的朋友,可以安装STM32CubeMX来实现。
STM32CubeMX是由ST公司开发的图形化代码自动生成工具,能够快速生成初始化代码,如GPIO,时钟树,中间件等,使用户专注于业务代码的开发。现在ST主推HAL库代码,经典的标准外设库已经停止维护了,新产品也只提供HAL库的代码,因此,我们学习HAL库是更加有优势的,由于HAL库具有低耦合、通用、抽象了硬件层,使得开发者无需太过关注硬件驱动的实现,使得开发更加的简单快速,更容易维护,因此被越来越多的产品所使用。
本章将分为如下几个小节:
10.1、STM32CubeMX的作用;
10.2、安装STM32CubeMX;
10.3、使用STM32CubeMX生成MDK工程;
10.4、STM32CubeMX界面介绍;


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

图10.1.1 STM32CubeMX和STM32Cube库的关系
当然,自动生成的驱动代码我们不去仔细专研其原理的话,对学习的提升很有限,而且在出现BUG的时候难以快速定位解决,因此我们也要了解其背后的原理。
10.2 安装STM32CubeMX
STM32CubeMX运行环境搭建包含两个部分。首先是Java运行环境安装,其次是STM32CubeMX软件安装。
10.2.1 安装JAVA环境
      对于Java运行环境,大家可以到Java官网www.java.com下载最新的Java软件,也可以直接从我们光盘复制安装包,目录为:开发板光盘A-基础资料\3、软件\Java 安装包。关于Java版本,这里推荐大家安装V1.8.0_271版本的Java,因为正点原子《STM32MP1嵌入式Linux驱动开发指南》中会用到STM32CubeProgrammer来烧写程序,而教程里提供的STM32CubeProgrammer软件使用的是V1.8.0_271版本的Java。如果不使用STM32CubeProgrammer的话,大家也可以选择更高版本的STM32CubeMX和对应的Java。
注:
      STM32CubeIDE已经集成了STM32CubeMX,STM32CubeIDE生成的工程文件中,有STM32CubeMX工程文件,也就是说,可以用独立的STM32CubeMX软件来打开STM32CubeIDE生成的STM32CubeMX工程文件。如果安装的是V1.4版本的STM32CubeIDE,那么STM32CubeMX软件版本至少为V6.0.0版本才可以打开STM32CubeIDE生成的STM32CubeMX工程文件,本章节安装的STM32CubeMX是V6.0.1版本,所以完全可以打开STM32CubeIDE生成的STM32CubeMX工程文件。虽然STM32CubeIDE可以生成STM32CubeMX工程文件,但是目前不能够导出MDK工程文件给MDK来使用,所以需要STM32CubeMX生成工程给MDK用的话,就得安装独立的STM32CubeMX软件。
      大家直接双击安装包jre-8u271-windows-x64.exe,根据提示安装即可。安装完成之后提示界面如下图10.2.1.1所示。

图10.2.1.1 Java安装成功提示界面
安装完 Java 运行环境之后,为了检测是否正常安装,我们可以打开 Windows 的cmd命令输入框,输入:java –version 命令查询Java版本,如果显示 Java 为1.8.0_271版本,且为64位(注意:要安装64位的),则安装成功,提示信息如图10.2.1.2:

图10.2.1.2 查看Java版本
10.2.2 安装STM32CubeMX
在安装了Java运行环境之后,接下来我们安装STM32CubeMX图形化工具。该软件可以直接从光盘复制,目录为:开发板光盘A-基础资料\5、开发工具\2、ST官方开发工具en.stm32cubemx_v6-0-1.zip,也可以直接从ST官方下载,下载地址为:www.st.com/stm32cube。本小节我们安装的STM32CubeMX是V6.0.1版本的。接下来我们直接双击SetupSTM32CubeMX-6.0.1.exe,安装步骤如下。

图10.2.2.1 启动安装

图10.2.2.2 接受本许可协议

图10.2.2.3 勾选第一项即可

图10.2.2.4 指定安装路径


图10.2.2.5 创建快捷方式
                等待安装进度条完成,完成后点击Next:

图10.2.2.6 等待安装完成
                点击Done完成安装:

图10.2.2.6 完成安装
10.2.3 卸载STM32CubeMX
      如果需要卸载STM32CubeMX的话,可以双击STM32CubeMX按章目录下的Uninstaller\startuninstall.exe可执行文件,然后勾选要卸载的STM32CubeMX,这里笔者卸载的是之前安装的V6.0.0版本的STM32CubeMX软件:

图10.2.3.1卸载STM32CubeMX
10.4 使用STM32CubeMX生成MDK工程
数情况下,我们都只使用STM32CubeMX来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在STM32CubeMX中完成的,需要用户自己根据需求来实现。
本节实验生成的工程位于 开发板光盘A-基础资料\1、程序源码\3、M4裸机驱动例程\ MP157-M4 HAL库V1.2\第十章生成的MDK工程 下。
10.3.1 打开STM32CubeMX
双击桌面STM32CubeMX快捷方式图标,如图10.3.1.1所示。

图10.3.1.1 CubeMX快捷方式
打开后CubeMX主界面如图10.3.1.2所示。

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

图10.3.2.1 管理固件包
然后弹出管理界面,在该窗口找到STMMP1列表选项,勾选1.2.0版本(目前最新版本是1.2.0版本,也可以选择自己需要的版本)。关联STM32Cube固件包有两个方法,如图10.3.2.2所示。

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

图10.3.2.3 关联本地STM32Cube固件包
      选择好固件包后,点击打开选项,STM32CubeMX会自动将所选的固件包解压到一个目录下,如下是解压过程的进度条:

图10.3.2.4 等待关联
      解压完成后,则关联成功:

图10.3.2.5 关联成功
关联好固件包我们就可以开始新建工程了。
10.3.3 新建工程
使用STM32CubeMX配置工程的一般步骤为:
1. 工程初步建立
2. HSE和LSE时钟源设置
3. 时钟系统(时钟树)配置
4. GPIO功能引脚配置
5. 生成工程源码
6. 用户程序
接下来我们将按照上面6个步骤,依次教大家使用STM32CubeMX工具生成一个完整的工
程。
1. 工程初步建立
方法一:依次点击“File”,“New Project”即可建新工程。如果之前打开过的话,左侧最近打开的过程一列会有打开的工程列表,直接点击这些工程也可以打开。
方法二:直接点击ACCESS TO MCU SELECTOR。
具体操作如图10.3.3.1所示。

图10.3.3.1 新建工程
点击新建工程后,第一次可能会联网下载一些的文件,例如会下载STM32Cube固件包,可能等待时间比较长,我们的资料盘里有STM32Cube固件包了,可以直接选择取消即可。

图10.3.3.2 启动时联网更新检测
      之后就可以进入芯片选型界面,如图10.3.3.3所示。

图10.3.3.3 芯片选型界面
选择具体的芯片型号,如图10.3.3.4所示,在搜索框中先输入芯片的型号,正点原子STM32MP157开发板的主控芯片型号是STM32MP157DAAx,有448个引脚,另外,从此界面中可以查看CPU的介绍、功能框图,可以在线下载文档资料以及数据手册等:

图10.3.3.4 选择具体的芯片型号
双击选中芯片型号后,则弹出主设计界面,如图10.3.3.5所示。

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

图10.3.3.6 设置时钟源HSE和LSE
图10.3.3.6中的标号3,HSE和LSE我们都选择了Crystal/Ceramic Resonator,表示选择外部晶振作为它们的时钟源。我们开发板的外部高速晶振(HSE)和外部低速晶振(LSE)分别是: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时钟。
3. 时钟系统(时钟树)配置
      点击Clock Configuration选项卡即可进入时钟系统配置栏,如下图10.3.3.7所示:

图10.3.3.7 时钟系统配置栏
进入Clock Configuration配置栏之后可以看到,界面展现一个完整的STM32MP157时钟系统框图。从这个时钟树配置图可以看出,MCU的时钟默认使用的是64MHz的HSI。这里主要
配置外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
      这里,我们将24MHz的HSE选作时钟源,配置MCU的时钟来自PLL3P,然后手动在输入框中输入209后,按下回车,等待系统自动配置参数,如图10.3.3.8,系统配置好的参数中有红色提示的,说明红色提示的参数超出范围了:

图10.3.3.8 配置时钟树
      我们手动修改红色提示的参数,如图10.3.3.9所示,最终配置系统时钟最大为209MHz,同时,还配置了APB1~APB3的分频系数位2:

图10.3.3.9 系统时钟配置图
      以上是手动输入参数让系统自动配置,然后手动调整参数的过程,如果我们要手动配置所有参数,则应先计算出要用到的参数值,然后在对应的选项框中输入计算好的参数。关于时钟树的参数我们会在配置系统时钟实验章节介绍到,这里为了讲解STM32CubeMX的使用,所以直接配置,按照如下步骤完成:

图10.3.3.10 手动配置参数
我们把MCU时钟配置分为七个步骤,分别用标号1~10表示,详细过程为:
1、时钟源参数设置:我们选择HSE为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是24MHZ)填写。
2、时钟源选择:我们配置选择器选择HSE即可。
3、PLL3分频系数M配置。分频系数M我们设置为2。
4、PLL3倍频系数N配置。倍频系数N我们设置为52。
5、PLL3分频系数P配置。分频系数P我们配置为3。
6、MCU时钟时钟源选择:PLL,HSI还是HSE。我们选择PLL3,选择器选择PLL3P即可。
7、配置MCU的分频值默认为1;
8~10、配置APB1~APB3总线分频值为2。
AHB1~AHB4、APB1~APB3和Systick时钟的最终来源都是MLHCLK,经过上面配置以后此时MCU的频率为209Mhz,AHB1~AHB4的时钟频率为209MHz,APB1~APB3总线的时钟频率为104.5MHz,定时器的时钟频率为209MHz,Systick的时钟频率为209MHz:

图10.3.3.11 配置步骤
4. GPIO功能引脚配置
本小节,我们来讲解怎么使用STM32CubeMX工具配置STM32MP157的GPIO口。STM32MP157开发板的PI0引脚连接一个LED灯,我们来学习配置这个IO口的相关参数。这里我们回到STM32CubeMX的Pinout&Configuration选项,在搜索栏输入PI0后回车,可以在引脚图中显示位置,如下图10.3.3.12所示:

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

图10.3.3.13 配置GPIO模式
      然后再右键PI0,选择将PI0分配给M4使用,因为STM32MP157有两个A7内核和一个M4内核,所以GPIO引脚要做好资源分配,给谁用就要指定给谁:

图10.3.3.14 GPIO选项
      接下来配置PI0的引脚模式参数,打开左边的System CoreGPIO进入GPIO模式配置界面,在下方会列出该GPIO的配置项。下面我们依次来解释这些配置项的含义:

表10.3.3.1 GPIO配置项
如图10.3.3.15所示,我们配置PI0引脚的参数如下:

图10.3.3.15 PI0引脚配置
5. 生成工程源码
接下来我们学习怎么设置生成一个工程,Project Manager-> Project选项用来配置工程的选项,我们了解一下里面的信息。
Project Settings是基本的工程配置:
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.27(最新,本教程的MDK是V5.31版本的,高版本的MDK可以打开低版本的MDK工程)。
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,文本框里面的路径就是固件包的存储地址,我们使用默认地址即可。(这里如果有两个版本的固件包,它会默认使用最新版本的固件)。 最后工程配置,如图10.3.3.16所示。
OpenSTLinux Settings是和Linux有关的,我们可以不用管。

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

图10.3.3.17代码生成器设置
      至此工程最基础的配置就已经完成,先按下Ctrl+S保存配置,再点击蓝色按钮(SENERATE CODE)就可以生成工程:

图10.3.3.18选择生成工程
      如下图10.3.3.19,STM32CubeMX会从之前我们关联的固件包中拷贝本工程需要使用的文件到要生成的工程目录中:

图10.3.3.19 STM32CubeMX从固件包中拷贝文件
      在弹出来的窗口中点击Open Project就可以打开MDK工程(已经按照本教程安装了MDK):

图10.3.3.20使用MDK打开工程
完整的STM32MP157工程就已经生成了。生成后的工程目录结构如下图10.3.3.21所示,双击带MX图标的LED0.ioc文件即可打开STM32CubeMX工程:

图10.3.3.21 STM32CubeMX生成的工程目录结构
      以上文件夹里有什么文件,大家可以尝试打开看看:

表10.3.3.2 LED0工程根目录下的文件夹
6. 添加用户程序
      双击LED0.uvprojx即可打开MDK工程:

图10.3.3.22打开MDK工程
(1)编译工程
在添加我们的代码之前,我们先打开生成的工程模板进行编译,看看是否有错,如下图10.3.3.23编译完成后没有任何错误。我们打开工程里的目录,工程模板结构如图10.3.3.23所示:

图10.3.3.23 STM32CubeMX生成的工程目录结构
(2)手动添加用户代码
      大家需要注意,STM32CubeMX生成的main.c文件中,有很多地方有“/* USER CODE BEGIN X */”和“/* USER CODE END X */”格式的注释,我们在这些成对出现的注释的BEGIN和END之间编写代码,那么使用STM32CubeMX重新生成工程之后,这些代码会保留而不会被覆盖,如果不是在成对出现的BEGIN和END之间编写代码,那么使用STM32CubeMX重新生成工程后原来添加的代码就会被覆盖掉了。
      接下来,我们手动在while循环中添加如下代码,注意代码添加的位置,这里为了完成整个流程,我们先不解释这些代码是怎么回事,在后面的实验中我们将会学习这些函数:
HAL_GPIO_WritePin(GPIOI,GPIO_PIN_0,GPIO_PIN_SET);    /* 设置PI0为高电平 */
HAL_Delay(500);                                                                                       /* 延时500ms */
HAL_GPIO_WritePin(GPIOI,GPIO_PIN_0,GPIO_PIN_RESET); /* 设置PI0为低电平 */
HAL_Delay(500);                                                                                       /* 延时500ms */
      添加完成后,记得保存修改,然后编译工程,如下图10.3.3.24:

图10.3.3.24工程编译无报错
      进行仿真调试,如果忘记MDK进入仿真调试的配置操作步骤,可以返回查看第四章节的相关章节介绍。这里注意的是,如果ST LINK在STM32CubeIDE下仿真后,拿到MDK下仿真的话,需要在MDK下更新ST LINK的驱动才可以进行仿真,驱动更新步骤可以参考前面的第四章 4.2.3小节。进入仿真后,点击运行程序(或者按快捷键F5),可以看到开发板底板的LED0在闪烁。

图10.3.3.25 进入仿真界面
      至此,使用STM32CubeMX生成MDK工程的步骤已经讲解完了,我们只是以一个最简单的GPIO配置为例子进行介绍,如果想用STM32CubeMX来配置其它的外设,如ADC、定时器、DMA等等,可以参考正点原子《STM32MP1 M4裸机CubeIDE开发指南》的配置方法,因为STM32CubeIDE已经集成了STM32CubeMX了,外设参数的配置方法基本上是一样的,只是创建工程和导出工程的步骤不太一样而已。本文的实验,都可以参考《STM32MP1 M4裸机CubeIDE开发指南》的配置方法来配置而生成一个MDK工程,所以之后的实验我们不会花过多的篇幅去讲解怎么使用STM32CubeMX的配置了。
10.4 STM32CubeMX界面介绍
      下面,我们来介绍STM32CubeMX的配置界面,如果要使用STM32CubeMX来生成工程,那么我们要了解每个选项是用于配置什么的。
      如下图10.4.1,进入STM32配置界面以后:
      ①处是主菜单栏;
      ②处是一些社交和社区链接,是提供随时与世界各地志同道合的人会面的场所。例如Facebook(脸书)、Youtube(油管)和twitter(推特)等社交链接,点击ST Home可以进入ST官网;
      ③处是STM32CubeMX的主要配置功能选项界面,这里有4个配置项:

表10.4.1 Pinout & Configuration配置窗口配置项列表

10.4.1 STM32CubeMX配置界面
      下面,我们分别介绍4个配置功能选项窗口:
10.4.1 Pinout &Configuration窗口
1. 外设栏
      外设栏选项,可以按照AZ的顺序来排列,也可以按照(Categories)分类目录来排列,默认是按照Categories来排列,我们简单介绍一下外设栏有什么配置。

表10.4.2 外设栏介绍

图10.4.2外设栏
2. Additional Software选项
      Additional Software附加软件选项,可以搜索或者查看已经下载或者可用的组件包,以及检查是否有新的嵌入式固件包发行版。

图10.4.1.3附加软件选项
3. Pinout配置选项
      Pinout是引脚操作工具项,常用的有:

表10.4.3 Pinout引脚操作选项列表

图10.4.1.4 Pinout引脚操作选项
4. System view配置选项
      System view以图形化显示了系统资源的中间件的配置状态。通过选择Category view,然后勾选by Context Execution中的选项,可以列出它们的中间件。

图10.4.1.5 Category view配置图
      点击Context Execution view可以列出系统资源的所有中间件。

图10.4.1.6 Context Execution view配置图
10.4.2 Clock Configuration窗口介绍
      时钟配置窗口,主要完成STM32MP1的时钟树配置,我们配置好时钟来源以及分频和倍频系数,系统就会自动计算参数来生成所需频率,通过图形化动态配置时钟树,我们就不需要像以前一样再手动去计算时钟了。关于时钟的配置,我们后面会有专门的章节来讲解。

图10.4.2.1时钟配置窗口
10.4.3 Project Manager窗口介绍
      Project Manager窗口是对工程进行配置,可以设置工程名称以及保存的位置、使用的固件包版本、设备树对应的Linux内核和Uboot版本,可以设置堆栈大小(一般不设置),可以配置代码生成的方式,还可以设置选择使用HAL库还是LL库等。
Project Manager的配置很重要,要注意的地方也比较多,下面我们分点来讲解:
1. Project选项配置
      Project选项配置我们一般可以不用管,可以大概浏览一下里边的内容。
①Projcet Settings
      此项是工程基础设置,这里设置的工程名字是LED0,工程位置是E:\STM32CubeMX_Project。Application Struture应用程序结构中有两种可选,一个是Basic,另一个是Advanced。一般来说,Basic是不包含中间件(RTOS、文件系统、USB设备等)的基础结构,Advanced的话,是结构中会包含中间件。Do not generate the main()就是不要生成main函数,这项就不勾选了。Toolchain Folder Location是工程路径,Toolchain/IDE是选择生成的工程,这里是可选的,可以选MDK、STM32CubeIDE、TrueSTUDIO等。
②Linker Settings
      此项是堆栈设置,主要就是设置堆和栈的大小,Heap堆默认设置为0x200,Stack栈默认设置为0x400,这两个我们一般也可以不用设置。
③Mcu and Firmware Package
      此项是MCU和固件包信息,可以看到我们使用的MCU是STM32MP157DAAx,固件包版本是STM32Cube FW_MP1 V1.2.0。当然这两项也是不能改的,创建工程的时候就已经确定好了。
④OpenSTLinux Settings设置:
      STM32MP1通用微处理器系列产品主要是基于Arm Cortex-A7核 和 Arm Cortex-M4核架构,而开源OpenSTLinux主要针对于Cortex-A7。openstlinux-5.4-dunfell-mp1-20-06-24是ST官方发布的Linux系统集成开发包,这个包里整合了Linux内核源码、uboot源码和TF-A源码,可以看出TF-A版本是2.2,内核版本是5.4,U-Boot版本是2020.01。STM32CubeMX可以为OpenSTLinux分发生成部分设备树,在后面我们生成的初始化代码里是可以看到设备树的。
      关于Linux系统的知识部分,这里我们先不用理会,正点原子《STM32MP1嵌入式Linux驱动开发指南》对这部分会有一个详细的讲解。

图10.4.3.1 Project选项
2. Code Generator选项配置
①STM32Cube MCU packages and embedded software packs
      此项默认选择Copy only the necessary library files选项(在前面创建工程的时候我们就默认的采用这项),意思就是,工程会从STM32Cube MCU软件包中拷贝需要用到的HAL库文件,没用到的不会拷贝,这样生成的工程就比较精简和小巧。
②Generated files
      此项主要是生成的文件配置项,其中:
Generate peripheral initialization as a pair of'.c/.h' files per peripheral 表示让每个外设生成独立的'.c/.h'文件,如果此项不勾选,那么外设相关的初始化代码将会生成在man.c中了,这样的话,如果外设一多,就不好调用了,还会造成main.c文件的臃肿(不过系统时钟初始化的代码默认生成在main.c文件中,勾选或者不勾选此项对系统时钟没有影响)。这里我们要勾选此项,STM32CubeMX就会为每个外设生成独立的.c和.h文件,例如前面10.3章节的实验是GPIO相关的实验,后期生成的代码中会看到有gpio.h和gpio.c这两个文件。这点大家要注意,如果忘了勾选,可以再次打开.ioc文件来配置此项。
Backup previously generated files when re-generating表示在重新生成初始化代码的时候备份以前生成的文件,系统会在相关目录中生成一个Backup文件夹,并自动将之前源文件拷贝到其中,从而完成备份。本实验,我们选择此项。
Keep User Code when re-generating 表示在重新生成初始化代码时保留用户之前添加的代码,例如我之前在main.c中写了一串代码,我希望这串代码被保留,那么就要勾选此项。这里注意的是,所添加的代码一定要在成对出现的BEGIN和END之间,系统才会保留,在其它位置的话还是会被清除的,我们后面会讲解怎么添加。这里我们不希望每次改了.ioc以后把之前添加的代码清除,所以此项要选择。
Delete previously generated files when not re-generated 表示删除以前生成,但现在没有生成的文件,例如假设之前的工程中生成了UART.c文件,工程经过修改以后不会再生成UART.c文件,如果不想要之前生成的UART.c文件,就可以勾选此项让系统自动清掉这些文件。这里我们勾选此项。
③HAL Settings
      此项涉及到HAL库设置,其中:
      Set all free pins as analog (to optimize the power consumption)表示将所有空闲引脚设置为模拟模式,此项是在做产品的时候会用到的,目的是优化功耗。此项我们不选。
      Enable Full Assert表示使能所有断言,Assert即断言,可以理解为功能函数中的一些布尔表达式,使用断言做一些假设,可以检查代码中隐藏的bug。在任何时候都可以启用和禁用断言验证,这里我们就不选了。关于断言,我们在前面已经介绍过了。
④Template Settings
      此项是模板选择,Select a template to generate customized code 表示选择一个模板来生成自定义代码,这里我们可以不配置,系统会默认选择。

图10.4.3.2 Code Generator选项
3. Advanced Settings高级设置
      ①Driver Selector选项可以配置使用的是HAL库还是LL库,STM32CubeMX是以HAL库为基础的,且目前STM32CubeMX仅支持HAL库及LL库,我们选择默认的HAL库。
      ②Generated Function Calls(生成的函数调用)中,有如图10.4.3.3两个可选栏:
      Not Generate Function Call(不生成函数调用)栏,表示main.c代码不调用对应初始化函数。什么意思呢,比如在IP Instance Name中的GPIO选项,我们在Not Generate Function Call下勾选框框的选项,然后保存修改,最后生成的初始化代码里,main.c函数中是没有调用MX_GPIO_Init这个函数的。

图10.4.3.3 Generated Function Calls配置项
      如果GPIO选项没有勾选Not Generate Function Call,在保存修改生成初始化代码以后,可以在main.c中看到调用了MX_GPIO_Init函数。这里,有些选项是默认值,不能修改的,即使修改了也没有效果,例如SystemClock_Config这项。如下图,笔者没有勾选GPIO选项的Not Generate Function Call,生成的代码中可以看到main.c中调用了MX_GPIO_Init函数,大家可在生成代码的时候留意一下此项配置:

图10.4.3.4 main.c中调用MX_GPIO_Init函数
      Visibility (Static)栏就是配置初始化代码声明为static,不过有些选项是默认值,不能修改的,例如SystemClock_Config配置不声明为ststic。另外,如果Code Generator选项我们已经配置了生成.c .h独立文件了,那就不会生成static了。
      如下图10.4.3.5,默认选择了MX_GPIO_Init函数,我们可以不用管,保持默认。

图10.4.3.5 Advanced Settings高级设置
10.4.4 Tools窗口介绍
      此窗口是工具选项,里边有芯片性能测试的工具配置,例如功耗测试、DDR测试等等,此项会在设计产品时会用到。后续试验用到的时候我们再进行介绍。

图10.4.4.1 Tools窗口
      STM32CubeMX的配置界面选项比较多,我们需要通过更多的实验操作来熟悉如何进行配置,这里,我们就不占用过多篇幅来讲解了。如果使用STM32CubeMX配置外设,也可以参考正点原子的《STM32MP1 M4裸机CubeIDE开发指南》。
页: [1]
查看完整版本: 《STM32MP1 M4裸机HAL库开发指南》第十章 STM32CubeMX简介