搜索
bottom↓
回复: 1

《MiniPro STM32H750 开发指南》 第十章 STM32CubeMX简介

[复制链接]

出0入234汤圆

发表于 2022-8-29 11:06:49 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2022-8-29 11:06 编辑

1)实验平台:正点原子MiniPro STM32H750开发板
2)平台购买链接:https://detail.tmall.com/item.htm?id=677017430560
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boar
4)MiniPro STM32H750技术交流QQ群:756580169 lQLPJxaFi2zaB4UWWrDAMgIsFEW2pwLb3abnwDMA_90_22.png
lQDPJxaFi2nfFizMjM0CbLCPlxn_FVheIQLb3aGrwFQA_620_140.jpg

lQLPJxaFi2nfFhLMkM0BXrDNvOUyeU_FPgLb3aGvQNIA_350_144.png
第十章 STM32CubeMX简介


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


10.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简介791.png
图10.1.1 STM32CubeMX和STM32Cube固件库的关系

当然,自动生成的驱动代码我们不去仔细专研其原理的话,对学习的提升很有限,而且在出现BUG的时候难以快速定位解决,因此我们也要了解其背后的原理。
10.2 安装STM32CubeMX
STM32CubeMX运行环境搭建包含两个部分,首先安装Java环境,再安装STM32CubeMX。
10.2.1 安装JAVA环境
安装Java运行环境,大家可以到Java官网www.java.com下载最新的Java软件,也可以直接从光盘资料获取安装包,目录如下:A盘6,软件资料1,软件3、STM32CubeMXJava安装包,Java安装包文件下有x64和x86两个文件夹,分别是64位和32位的电脑的安装包,大家根据自己电脑的位数选择即可。比如64位电脑选择x64文件夹的jre-8u301-windows-x64.exe安装包,并根据提示安装即可。安装完成之后提示界面如下图10.2.1.1所示。
第十章 STM32CubeMX简介1265.png
图10.2.1.1 Java安装成功提示界面

安装完Java运行环境之后,为了检测是否正常安装,我们可以打开Windows的命令输入框,输入:java –version命令,如果显示Java版本信息,则安装成功。提示信息如下图10.2.1.2:
第十章 STM32CubeMX简介1390.png
图10.2.1.2 查看Java版本

10.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简介1715.png
图10.2.2.1 启动安装

第十章 STM32CubeMX简介1732.png
图10.2.2.2 接受本许可协议

第十章 STM32CubeMX简介1752.png
图10.2.2.3 勾选第一项即可

第十章 STM32CubeMX简介1772.png
图10.2.2.4 指定安装路径

第十章 STM32CubeMX简介1791.png
图10.2.2.5 创建快捷方式

第十章 STM32CubeMX简介1810.png
图10.2.2.6 安装进度提示

第十章 STM32CubeMX简介1829.png
图10.2.2.7 完成安装

10.3 使用STM32CubeMX新建工程
大多数情况下,我们都只使用STM32CubeMX来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在STM32CubeMX中完成的,需要用户自己根据需求来实现。
10.3.1 打开STM32CubeMX
双击桌面STM32CubeMX快捷方式图标,如图10.3.1.1所示。
第十章 STM32CubeMX简介2021.png
图10.3.1.1 CubeMX快捷方式

打开后CubeMX主界面如图10.3.1.2所示。
第十章 STM32CubeMX简介2070.png
图10.3.1.2 CubeMX主界面

10.3.2 下载和关联的STM32Cube固件包
我们知道STM32CubeMX图形工具只有一种, STM32Cube固件包却有多种,需要选择我们工程对应的固件包。
为了方便,新建工程前,我们先来下载和关联STM32Cube固件包,点击Help->Manage embedded software packages,如图10.3.2.1所示。
第十章 STM32CubeMX简介2265.png
图10.3.2.1 管理固件包

然后弹出管理界面,在该窗口找到STM32H7列表选项,勾选1.6.0版本。这里选择1.6.0版本是因为我们的光盘的固件包是这个版本的。关联STM32Cube固件包有两个方法,如图10.3.2.2所示.
第十章 STM32CubeMX简介2384.png
图10.3.2.2 下载和关联STM32Cube固件包

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

第十章 STM32CubeMX简介2527.png
图10.3.2.4 等待关联

第十章 STM32CubeMX简介2544.png
图10.3.2.5 关联成功

关联好固件包我们就可以开始新建工程了。
10.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。
具体操作如图10.3.3.1所示。
第十章 STM32CubeMX简介2891.png
图10.3.3.1 新建工程

点击新建工程后,第一次可能会联网下载一些的文件,可能等待时间比较长,可以直接选择取消即可。
第十章 STM32CubeMX简介2954.png
图10.3.3.2 启动时联网更新检测

之后都可以进入芯片选型界面,如图10.3.3.3所示。
第十章 STM32CubeMX简介3005.png
图10.3.3.3 芯片选型界面

选择具体的芯片型号,如图10.3.3.4所示。
第十章 STM32CubeMX简介3048.png
图10.3.3.4 选择具体的芯片型号

选择了芯片型号后,弹出主设计界面,如图10.3.3.5所示。
第十章 STM32CubeMX简介3101.png
图10.3.3.5 主设计界面

2 HSE和LSE时钟源设置
进入工程主设计界面后,首先设置时钟源HSE和LSE。如图10.3.3.6所示。
第十章 STM32CubeMX简介3174.png
图10.3.3.6 设置时钟源HSE和LSE

图10.3.3.6中的标号3和4,我们都选择了Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。我们开发板的外部高速晶振和外部低速晶振分别是:8MHZ和32.768KHZ。所以HSE时钟频率就是8MHZ,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选项卡即可进入时钟系统配置栏,如下图10.3.3.7所示:
第十章 STM32CubeMX简介3687.png
图10.3.3.7 时钟系统配置栏

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

我们把系统时钟配置分为七个步骤,分别用标号1~7表示,详细过程为:
1、时钟源参数设置:我们选择HSE为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是8MHZ)填写。
2、时钟源选择:我们配置选择器选择HSE即可。
3、PLL1分频系数M配置。分频系数M我们设置为2。
4、PLL1倍频系数N配置。倍频系数N我们设置为240。
5、PLL1分频系数P配置。分频系数P我们配置为2。
6、系统时钟时钟源选择:PLL,HSI还是HSE。我们选择PLL,选择器选择PLLCLK即可。
7、经过上面配置以后此时SYSCLK=480Mhz。
经过上面的7个步骤,就会生成标准的480MHz系统时钟。接下来我们只需要配置AHB、APB1、APB2、APB3、APB4和Systick的分频系数,就可以实现sys.c文件中的sys_stm32_clock_init函数配置的部分时钟系统。配置如下图10.3.3.9所示:
第十章 STM32CubeMX简介4510.png
图10.3.3.9 AHB、APB1、APB2、APB3和APB4总线时钟配置

AHB、APB1、APB2、APB3和APB4总线时钟以及Systick时钟的最终来源都是系统时钟SYSCLK。其中AHB总线时钟HCLK是由SYSCLK经过AHB预分频器之后的来,如果我们要设置HCLK为240MHz(最大也就240Mhz),那么我们只需要配置图中标号8的地方为2即可。得到HCLK之后,接下来我们将在图标号9~12处同样的方法依次配置APB3、APB1、APB2和APB4分频系数分别为2,2、2和2即可。注意!systick固定为480MHz,配置完成之后,那么HCLK=240MHZ,Systic=480MHz,PCLK1=120MHz,PCLK2=120MHz,PCLK3=120Mhz,PCLK4=120MHz,这和我们使用sys_stm32_clock_init函数配置的时钟是一样的。
4 GPIO功能引脚配置
本小节,我们讲解怎么使用STM32CubeMX工具配置STM32H7的GPIO口。MiniPRO STM32H750开发板的PB4、PE5和PE6引脚连接一个RGB灯,我们来学习配置这三个IO口的相关参数。这里我们回到STM32CubeMX的Pinout&Configuration选项,在搜索栏输入PB4后回车,可以在引脚图中显示位置,如下图10.3.3.10所示:
第十章 STM32CubeMX简介5109.png
图10.3.3.10 搜索引脚位置

接下来,我们在图10.3.3.11引脚图中点击PB4,在弹出的下拉菜单中,选择IO口的功能为GPIO_Output。操作方法如下图10.3.3.11所示:
第十章 STM32CubeMX简介5207.png
图10.3.3.11 配置GPIO模式

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

我们先配置PB4,PE5和PE6配置方法一样的。点击图10.3.3.12的2号框里面的PB4,配置如图10.3.3.13所示。
第十章 STM32CubeMX简介5499.png
图10.3.3.13 配置GPIO口详细参数

GPIO output level是IO的初始值,为了开始让RGB灯熄灭,我们设置初始值输出高电平。
GPIO mode默认是推挽输出,不需要更改。
GPIO Pull-up/Pull-down默认是不上下拉,我们改为上拉。
Maximum output speed输出速度配置,默认是低速,我们设置为中速(可以不改)。
User Label用户符号,我们可以给PB4起一个别的名字。
PE5和PE6也是按照这样的方法配置即可。
5 Cortex-M7内核基本配置
这里我们主要配置Cortex-M7内核相关的参数。我们依次点击Cortex_M7 进入配置界面,操作过程如下图10.3.3.14所示:
第十章 STM32CubeMX简介5825.png
图10.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.27(最新)。
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.15所示。
第十章 STM32CubeMX简介6738.png
图10.3.3.15 工程配置

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

至此工程最基础配置就已经完成,点击蓝色按钮(SENERATE CODE)就可以生成工程。
第十章 STM32CubeMX简介7018.png
图10.3.3.17生成工程

在弹出来的窗口中点击Open Project就打开MDK工程。
第十章 STM32CubeMX简介7068.png
图10.3.3.18 打开工程

完整的STM32H7工程就已经生成完成。生成后的工程目录结构如下图10.3.3.19所示:
第十章 STM32CubeMX简介7132.png
图10.3.3.19 STM32CubeMX生成的工程目录结构

Drivers文件夹存放的是HAL库文件和CMSIS相关文件。
Inc文件夹存放的是工程必须的部分头文件。
MDK-ARM下面存放的是MDK工程文件。
Src文件夹下面存放的是工程必须的部分源文件。
Template.ioc是STM32CubeMX工程文件,双击该文件就会在STM32CubeMX中打开。
7 用户程序
在编写用户程序之前,首先我们打开生成的工程模板进行编译,发现没有任何错误和警告。
接下来我们看看生成的工程模板的main函数,这里我们删掉了源码注释,关键源码如下:
int main(void)
{
  SCB_EnableICache();
  SCB_EnableDCache();
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  while (1)
  {
  }
}
大家需要注意,STM32CubeMX生成的main.c文件中,有很多地方有“/* USER CODE BEGIN X */”和“/* USER CODE END X */”格式的注释,我们在这些注释的BEGIN和END之间编写代码,那么重新生成工程之后,这些代码会保留而不会被覆盖。
我们编写一个跑马灯的用户程序,程序具体如下:
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  SCB_EnableICache();
  SCB_EnableDCache();
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  while (1)
  {
    /* USER CODE BEGIN 3 */
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);            /* PB4置1 */
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);         /* PE5置0 */
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);            /* PE5置1 */
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_RESET);         /* PE6置0 */
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_SET);            /* PE6置1 */
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);         /* PB4置0 */
    HAL_Delay(500);
  }
  /* USER CODE END 3 */
}
编写好程序后,编译没有任何警告和错误。可以直接下载程序MiniPRO STM32H750开发板中(使用DAP下载,请注意配置MDK),算法只需要128K的算法就可以了。
        本小节使用STM32CubeMX新建的工程模板在我们光盘目录:“4,程序源码\标准例程-库函数版本\实验0-4 Template工程模板-使用STM32CubeMX配置 ”中有存放,大家在编写用户代码过程中可以参考该工程的main.c文件。
10.4 STM32CubeMX新建工程使用建议
① 使用CubeMX的环境搭建工程,工程文件夹路径、文件名不要带任何中文及中文字符,否则会遇到各种报错;
② 本书以新建工程-HAL库版本为基准来展开,不对CubeMX的使用过多讲解。使用CubeMX可以帮助我们快速搭建工程,使用户专注于应用开发,但STM32的开发与硬件密切相关,对STM32开发来说,抛开底层只专注做应用并不实际,毕竟无法使用一套通用设计来满足不同用户的需求;
③ 关于新建CubeMX的工程路径中有中文的情况的解决:
如果我们配置的CubeMX工程路径里面有中文可能会报以下的错误:
第十章 STM32CubeMX简介8934.png
图10.4.1 直接编译报错

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

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2022-8-29 16:01:00 | 显示全部楼层
学习,收藏。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 19:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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