生态系统

Cube概览 STM32CubeMonitor STM32CubeMX

STM32Cube Tools——STM32CubeMX


更多文章:STM32Cube嵌入式软件新成员——扩展功能插件



当前最新版本
STM32CubeMX 6.0.0,下载


新增功能
添加例程选择器
新增插件生成工具STM32PackCreator
Tools标签页下新增“ST Tools”子标签页,方便快速链接到其他STM32Cube工具以及ST的其他设计工具
添加关于STM32CubeMX的使用视频教程


最新文章
UM2739,如何使用STM32Pack Creator工具生成STM32CubeMX的插件包

STM32CubeMX是STM32Cube工具家族中的一员,从MCU选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置,它给STM32开发者们提供了一种简单,方便,并且直观的方式来完成这些工作。


所有的配置完成后,它还可以根据所选的IDE生成对应的工程和初始化C代码。除此以外,STM32CubeMX还提供了功耗计算工具,可作为产品设计中功耗评估的参考。


如何开始新工程

如何开始一个新的STM32CubeMX工程?这里提供了四种方式:


从选择MCU/MPU型号开始
     在“MCU/MPU Selector”标签页下,可以按照Flash/RAM大小,外设,封装,价格等条件来筛选符合应用需求的产品型号。
     对于人工智能的应用,可以使能AI筛选项后,选择要使用的神经网络模型,拓扑结构和压缩比,STM32CubeMX会计算大致需要的FLASH和RAM大小,同时在右侧的列表栏中列出满足要求的MCU型号。


     从STM32CubeMX5.5版本开始,“MCU/MPU Selector”标签页中,不再包含图形应用MCU选型工具,中间件中也不再包含“Graphics”项。TouchGFX Generator以X-CUBE-TOUCHGFX插件的形式集成到STM32CubeMX中,可以根据最新的STM32Cube固件库以及用户所选的图形设置和开发环境生成自定义的项目。


从选择MCU开发板开始
     在“Board Selector”标签页下,可以按照开发板类型,板载MCU/MPU的系列,MCU/MPU支持的外设和Flash/RAM大小选择某个开发板,新建一个基于该开发板的STM32CubeMX工程。STM32CubeMX将自动根据该开发板默认硬件配置,初始化对应的外设。比如,Nucleo-H743ZI板上默认用到了以太网接口,那么选择Nucleo-H743ZI板后新建的STM32CubeMX工程默认就已经配置好了以太网外设。


从选择例程开始
     在“Example Selector”标签页下,可以通过各个过滤项,来选择一个运行在某个具体开发板上的例程来创建一个工程。比如,选择运行在Nucleo-H743ZI板上的GPIO-EXTI例程后,STM32CubeMX可以自动帮你生成IAR,KEIL或者SW4STM32工程,直接编译就可以运行。从6.0.0版本开始提供该功能。


从MCU交叉选择器开始
    在“Cross Selector”标签页下,可以帮助开发者找到能够替换当前使用的MCU/MPU的STM32产品。并且可以选择多个型号进行比较。
可以从”File--New Project”菜单,或者首页的快速链接进入建立新工程的窗口,然后根据需要选择这四种方式中的任一种来开始新建STM32CubeMX工程。


例程选择器

以选择一个例程的方式来新建STM32CubeMX工程,是CubeMX V6.0.0推出的新功能,下面我们就来了解一下这个新功能。该功能将STM32Cube库里的例程,集成进了STM32CubeMX,用户可以在“Example Selector”标签页,通过左边一栏的过滤项,选择一个可以运行在指定开发板的例程,STM32CubeMX就可以帮我们创建该例程对应的IDE工程。对于部分例程还会创建对应的CubeMX工程(.ioc),用户可以基于STM32CubeMX工程进一步修改或者增加其他外设的配置。


下图是“Example Selector”标签页的界面,左边的过滤项栏,包括两大部分:第一部分是开发板相关的过滤项,有开发板类型和MCU系列的选择;第二部分是工程相关的过滤项,有IED的选择,工程类型选择(外设例程,应用例程和开发板的Demo。这三个类型分别对应STM32Cube库中Project下的Example,Applications和Demonstrations目录下的例程),以及中间件和外设驱动库的选择等。


右下方是满足当前设定条件的所有例程的列表,当选中某个例程后,在右上方就会显示对该例程的描述,需要的STM32Cube库版本,以及对应开发板的文档链接。点击例程列表第一列的五角星图标,还可以将该例程加入收藏,方便下次调出。

下面,我们将举例说明如何创建一个运行在Nucleo-H743ZI开发板上的GPIO_EXTI例程。


进入“Example-Selector”后,首先通过设定过滤项来缩小选择范围。我们通过关键字指定要搜索的是GPIO例程,并指定开发板类型为Nucleo-144,板载MCU为STM32H743ZI。然后在右侧的列表中就可以看到只有两个满足条件的例程,其中有一个GPIO_EXTI例程。


选中该例程,再点击上方的“Start Project”。

在STM32CubeMX创建工程的过程中,会跳出一个对话框,在该对话框里可以设置创建工程时需要使用的Cube库的源文件位置(一般使用Cube库默认安装的位置)和目标工程的路径,这里我们都使用它的默认设置,然后点击“OK”。


工程创建成功后,会跳出工程创建成功的对话框,并且在该对话框的下拉列表中显示:已经创建好IAR,KEIL和SW4STM32三个IDE工程(下拉菜单中的“explorer”指仅打开所创建的工程目录)。可以任选一个打开,我们选择IAR(EWARM)工程,点击OK,就会自动打开对应的IAR工程了。

对于一些较新的产品系列,CubeMX在创建所选择的例程时,还会创建STM32CubeIDE的工程,以及STM32CubeMX工程。可以直接打开创建好的STM32CubeMX工程,在其之上修改或添加其他功能。


是否支持同时创建STM32CubeMX工程,可以通过例程说明中的STM32CubeMX版本一项看出,如果标有具体的STM32CubeMX版本,则说明最后会生成STM32CubeMX工程,否则就不会生成STM32CubeMX工程。

引脚配置

通过前面所说的几种方式,创建一个新的STM32CubeMX工程后,就会打开下图中的这个配置窗口。配置窗口有四个标签页分别是:“pinout&Configuration”,“Clock Configuration”,“Project Manager”,“Tools“。


在” pinout&Configuration“标签下,可以使能需要的外设,并进行配置;“Clock Configuration”页提供了图形化的时钟配置工具;在” Project Manager“页可以对要生成的工程进行配置;”Tools “标签页提供了功耗评估工具,可以根据添加的运行模式及持续时间,计算出系统的平均功耗以及电池的寿命。此为理论计算值,可作为产品设计的参考。下面我们就来逐个了解其功能。


我们先来看一下“Pinout&Configuration”标签页,在该标签页的左边一栏,所有的外设被分成:系统内核,模拟,定时器,通信,多媒体,安全和计算几个组进行显示。比如,点开通信(connectivity)这个组,就可以串口,I2C这些外设。


freeRTOS,  FATFS等协议栈在Middleware分组下。右边默认显示的一个MCU的引脚分配图,在左边栏使能了某个外设后,STM32CubeMx便会自动为这些外设分配管脚,并该图对应的引脚标记为绿色。也可以直接在这个引脚分配图中点击要配置的管脚,在下拉列表中手动为管脚选择功能。

时钟树初始化

在“Clock Configuration”标签页面,我们看到的是整个MCU的时钟树结构,包括系统的时钟源有哪些,时钟路径,分频和倍频过程等。


在这里,我们可以配置系统工作时钟和各个外设的时钟。如果使用PLLCLK作为系统时钟源,设置好HCLK总线时钟频率后,STM32CubeMX会自动计算分频因子。时钟配置异常时,还会有错误提示。

外设配置

在“Pinout&Configuration”标签页选中某个外设后,右侧就会出现对应的配置界面,可以对外设的运行参数,DMA和中断进行配置。比如图中的USART3,首先选择工作模式为异步(Asynchronous)模式,然后在下方的参数配置栏中,对波特率,数据长度,奇偶校验,停止位以及其他一些高级参数进行设置。在”NVIC Setting”, “DMA Setting”标签页下,还可以设置中断和使能DMA。“GPIO Setting”标签页下可以看到当前分配给该外设的引脚以及配置情况。


左侧外设列表中,通过不同的颜色和图标提示当前外设的配置情况:绿色的对勾表示当前外设的所有参数已经配置完成,紫色的交叉图标,表示配置尚未完成。橘黄色的感叹号图标,表示由于引脚冲突等原因,当前外设至少有一个模式不可用。而紫色的禁止图标,表示当前外设的所有模式都不可用。

中间件配置

在“Pinout&Configuration”标签页的“Middleware”中,用户可以选择需要使用的中间件并进行配置,比如FreeRTOS,以太网协议栈Lwip,USB协议栈,文件系统等。

有可能你会看到某些中间件处于不可选状态,这是因为这些中间件的使用和一些硬件外设相关,需要先使能这些外设。将鼠标移到想使能的中间件名称上面,稍等几秒,就会出现一个灰色的文字框,其中就包含了需要使能哪些外设的提示。

代码生成

所有的参数配置完成后,就可以让STM32CubeMX来生成初始化的工程了。


在”Project Manager”标签页下,有三大类配置,分别在三个子标签页下。在“Project”页下,可以设定项目名称,项目位置,选择工具链和固件版本等;在“Code Generator”页下,可以设置生成代码的相关选项,比如是否拷贝相关的库文件,重新生成代码时,如何处理之前生成的文件等;


在“Advanced Settings”页面下,可以对要生成的初始化代码做进一步的设置,比如使用HAL还是LL驱动,生成的初始化代码是否是静态函数,是否在主函数里调用等。


所有的参数都设置好后,点击“GENERATE CODE”,STM32CubeMX就开始创建工程了。


下面我们来看一下在“Project Manager”标签页下需要注意的一些配置项。

“Project”页的“Application structure”项可以设置两种不同的项目工程文件结构。“Basic”结构:适合没有使用中间件或者只使用了一种中间件的项目。用户代码分为Src和Inc两个文件夹,和IDE文件夹位于同一层,这种结构跟Cube库中的例程的文件结构类似。


“Advanced”结构的构成如下图中所示,用户应用逻辑代码放在Core文件夹下,每个中间件的适配文件各自放在独立的文件夹内(比如图中的USB_HOST),并分为和硬件平台相关的Target部分以及和应用相关的App部分,这种结构适合使用了多个中间件的项目,使得项目的集成更加容易。

STM32CubeMX生成工程的时候,默认会使用当前最新的Cube库。如果想使用不同的Cube库版本,可以取消勾选“Use Default Firmware Location”,然后,点击Browse,在本地电脑中选择另一个版本的Cube库。

下图是“Code Generator”标签页的默认设置。STM32CubeMX默认会将Cube库中HAL文件夹的所有文件,和使用到的中间件文件都拷贝到用户项目中。如果不想拷贝这么多文件,可以选择“Copy only the necessary library files”,让STM32CubeMX仅拷贝必须的文件,比如用户代码只用到了SPI,就只拷贝HAL文件夹中的SPI驱动文件。甚至可以选择“Add necessary library files as reference in the toolchain project configuration file”,不拷贝任何文件,仅建立和Cube库中文件的链接。


在STM32CubeMX生成的工程中,添加用户自己的代码,必须将代码放在由/*USER CODE BEGIN */和/* USER CODE END */标识的用户代码区,这样当再次通过STM32CubeMX生成代码的时候,用户添加的代码才不会被清除,并且一定要保证“Keep User Code when re-generating”项处于勾选状态。


通过“Generate peripheral initialization as a pair of .c/.h files per peripheral”可以选择是否将所有外设初始化的代码放在一个文件,还是分开放在独立的.c/.h文件。


当修改配置后重新生成工程时,默认会删除不再需要的文件,也可以通过取消勾选“Delete previously generated files when not re-generated”,在下次重新生成工程时,保留这些文件。


为了优化系统的功耗,我们一般建议将MCU未使用的GPIO口初始化为模拟输入,在STM32CubeMX中,可以通过勾选“Set all free pins as analog to optimize power consumption ”,让其自动生成这部分代码。

STM32Cube库里提供有HAL和LL两类底层驱动接口,HAL驱动的移植性更好,但代码量大,而LL驱动提供高度优化,寄存器层面的访问,代码量小,效率高。使用LL驱动接口需要密切结合用户参考手册,与底层硬件结合度高,移植工作量也会增加。这两类驱动接口,可以在“Advanced Settings”标签页下进行选择。


在该标签页下,还列出了STM32CubeMX将会生成的初始化函数,可以在这里设置是否将该函数定义为静态函数,是否在main函数中调用该初始化函数。


在最右边一列中,还可以设置是否使用某个外设的callback函数,如果设置为enable,则stm32xxxx_hal_conf.h 文件中对应的宏定义为1。

功耗计算

STM32CubeMX还有一个有用的功能:功耗评估。在”Tools-PCC“标签页下,功耗评估工具页面中:选择电池的容量,添加运行模式及持续时间,CubeMX将会计算出系统的平均功耗以及电池的寿命。此为理论计算值,可作为产品设计的参考。


关于该工具的具体使用方法可以参考以下培训内容中的功耗测量部分:


STM32 低功耗产品培训:

03- 动手实验 使用STM32CubeMX建立低功耗工程,以及功耗实测

CubeMX生成BLE应用(一)


功能扩展插件

除了配置GPIO口,外设以及中间件以外,STM32CubeMX还支持通过安装插件的方式来扩展更多的软件功能。功能扩展插件可以是ST或第三方提供。

在STM32CubeMX的“Embedded Software Packages Manager”窗口的“STMicroelectronics”标签页下可以找到所有ST提供的插件,同时你也可以安装第三方提供的STM32Cube插件。安装好插件后,就可以在当前的STM32CubeMX工程中,添加插件组件,并进行配置了。


请参考“STM32Cube嵌入式软件新成员——扩展功能插件”,了解关于STM32Cube功能扩展插件更详细的介绍以及举例说明。

资源链接


最后,我们为大家整理了关于STM32CubeMX使用的官方文档,以及ST本地工程师们准备的和STM32CubeMX使用相关的培训材料和实战经验。从这些与具体应用相关的技术文档中,大家可以了解到更多的STM32CubeMX使用方法和技巧。



户手册/应用笔记

UM1718

STM32CubeMX for STM32 configuration and initialization C code generation
《使用STM32CubeMX对STM32进行配置以及生成初始化代码》
UM2739How to create a software pack enhanced for STM32CubeMX using STM32 Pack Creator tool
《如何使用STM32Pack Creator工具生成STM32CubeMX的插件包》
AN5418How to build a simple USB-PD sink application with STM32CubeMX
《使用STM32CubeMX构建一个简单的USB-PD接收器应用程序》

AN5426

Migrating graphics middleware projects from STM32CubeMX 5.4.0 to STM32CubeMX 5.5.0

《将图形中间组件从STM32CubeMX5.4.0移植到STM32CubeMX5.5.0》


类别名称
培训STM32CubeMX培训:配置详解/功耗计算/主要特性
培训STM32CubeMX培训:安装/软件包架构/硬件抽象层
培训STM32 低功耗产品培训:03- 动手实验 使用STM32CubeMX建立低功耗工程,以及功耗实测
LAT基于STM32CubeMX开发U盘访问应用
LAT使用STM32CubeMX实现USB虚拟串口环回测试功能
LAT从零开始使用CubeMX创建以太网工程


请登录www.stmcu.com.cn,到“设计资源->本地化资源”下载


相关资源