众所周知,ARM Cortex M 系列是 ARM 专门为单片机设计的内核。其中,STM32 系列的芯片可以算得上最成功的 ARM Cortex M 系列的芯片了。在最早期,ARM Cortex M 系列的核心刚用在单片机设计的时候,同时期也有很多厂商推出 ARM Cortex M 核心的单片机,但为什么 STM32 会如此之普及?其中的缘由,离不开当时意法半导体推出的方便的固件库。

 

为什么区区一个 STM32 的固件库可以有这么大的作用?这是因为早在 8 位机和 16 位机的时代,单片机内部的每一个外设的寄存器数量是有限的,我们即使一个一个去配置也没有多少工作量。但是 ARM Cortex M 核心,操作外设时需要配置的寄存器有很多,这样使用起来就会很麻烦。而意法半导体的固件库则可以将这些操作变得简单。

 

STD 库和 HAL 库之分

最早意法半导体推出的适配 STM32 的固件库被称为“STD 库”(标准库),我们用的最多的“STD 库”要属适配在 STM32F1 上面的“STM32F10x_StdPeriph_Lib_V3.5.0”,这个 3.5 版本的固件库到现在为止还是开发 STM32F1 系列单片机的首选。

 

同时期的 STM32 系列还包括了 F0,F1,F3,F4,L1 等子系列芯片,并且都为它们适配了“STD 库”。如图 1 所示。

 

图 1 STD 固件库的适配系列

 

大约到 2014 年左右,ST 在标准库的基础上又推出了 HAL 库。实际上,HAL 库和标准库本质上是一样的,都是提供底层硬件操作 API,而且在使用上也是大同小异。有过标准库基础的同学对 HAL 库的使用也很容易入手。个人认为 ST 官方之所以这几年大力推广 HAL 库,是因为 HAL 的结构更加容易整合 STM32Cube,而 STM32CubeMX 是 ST 这几年极力推荐的程序生成开发工具。所以这两年新出的 STM32 芯片,ST 直接只提供 HAL 库。在新型的 STM32 芯片中,用 HAL 库逐步淘汰标准库。

 

目前 STM32 所有的芯片都适配了 HAL 库。如同 2 所示。

 

图 2 HAL 库的适配系列

 

很多人从 STD 库转来做 HAL 库可能一开始觉得不习惯,但是配置起来其实和 STD 库也差不多。比较有意思的是,其实 HAL 库的代码可以直接使用 STM32CubeMX 这个软件来生成,STM32CubeMX 的操作方式非常简单,下面的内容就来介绍一些这个软件。

 

STM32CubeMX 安装

STM32CubeMX 是一个图形化的工具,也是配置和初始化 C 代码生成器(STM32 configuration and initialization C code generation),也就是自动生成开发初期关于芯片相关的一些初始化代码。

 

STM32CubeMX 的功能功能框图如图 3 所示。从图 3 中可以看得出,它包含了 STM32 所有系列的芯片,包含示例和样本(Examples and demos)、中间组件(Middleware Components)、硬件抽象层(Hardwaree abstraction layer)。

 

图 3 STM32CubeMX 简介

 

STM32CubeMX 的特性如下:

(1)直观的选择 STM32 微控制器。

 

(2)图形化配置单片机:

 

引脚状态显示

图形化配置时钟树

可以动态确定参数设置的外围和中间件模式和初始化

功耗预测

(3)STM32CubeMX 可以自动生成主流 IDE 的工程代码,支持的 IDE,如 IAR、KEIL、GCC。

 

(4)可独立使用或作为 Eclipse 插件使用。

 

STM32CubeMX 是 ST 意法半导体的主动原创工具,它可以减轻开发的时间和费用。STM32CubeMX 集成了一个全面的软件平台,支持 STM32 每一个系列的 MCU 开发。这个平台包括 STM32Cube HAL(一个 STM32 的抽象层集成软件,确保 STM32 系列最大的移植性)。再加上兼容的一套中间件(RTOS、USB、TCP/IP 和图形),所有内嵌软件组件附带了全套例程。

 

STM32CubeMX 软件是运行于 JRE 上面的软件,因此我们在安装 STM32CubeMX 这个软件之前,现需要安装 JRE。我们可以通过 ST 官网直接下载,JRE 也可以从 Oracle 官网上面下载,当然也可以通过如下的链接,或者扫描图 4 中的二维码。

 

链接:https://pan.baidu.com/s/1fSGZ5J6u0fpBsaRDUZjAzg

 

提取码:qvrh

 

图 4 STM32CubeMX 和 JRE 下载网盘二维码

 

安装步骤为:

(1)  安装“jre-8u271-windows-x64”,直接默认安装即可,如图 5 所示。

 

图 5 安装 JRE


注意,如果 JRE 没有安装成功,则会弹出如图 6 所示的警告。

 

图 6 未安装 JRE 弹出警告


(2) 解压“en.stm32cubemx_v6-1-0.zip”压缩文件,打开“en.stm32cubemx_v6-1-0”文件夹,然后双击运行“SetupSTM32CubeMX-6.1.0.exe”文件。接着直接勾选必要的选项,然后无脑点击下一步即可,如图 7 所示。

 

图 7 stm32cubemx 安装步骤


到此为止,stm32cubemx 软件就安装完成了,我们可以在桌面上看到 stm32cubemx 软件的快捷方式。如图 8 所示。

 

图 8 stm32cubemx 快捷方式



   STM32CubeMX 使用步骤(1)双击打开“stm32cubemx”软件,我们就可以看到图 9 中显示的界面了。

 

图 9 STM32CubeMX 启动界面


(2)点击“File”->“New Project”用来创建一个新的工程,如图 10 所示。

 

图 10 创建新工程


注意,如果出现了图 10 中间的数据下载提示,并且长时间没有下载完成时,可以点击“Cancel”去取消本次下载,不会产生影响。


(3)接下来我们就可以在这个界面上面选择芯片了,如图 11 所示,我们例子中选择了“STM32F429NG”,选择好芯片之后,点击“Start Project”。

 

图 11 器件选择


(4)点击了“Start Project”之后,就会弹出如图 12 所示的界面,到此为止,我们就可以正式配置这个芯片的资源了。

 

图 12 配置功能区域划分


这个软件整体配置流程比较傻瓜,操作起来很方便,这里就不详细阐述了。


(5)配置好工程之后,就可以导出代码了,点击右上方的“GENERATE CODE”即可生成代码,如果你第一次运行该软件,系统是会下载安装一些软件依赖包,只需要耐心等待安装完成即可。如图 13 所示。

 

图 13 软件模型下载


(6)如果软件包下载完成,那么就会跳入代码生成选项界面,如图 14 所示。

 

图 14 工程配置


(7)工程配置完成之后,再点击一下右上方的“GENERATE CODE”,即可产生最终的代码,我们代开代码文件夹就可以看到 Keil 的工程文件了,如图 15 所示。

 

图 15 最终生成的 Keil 代码


STM32CubeMX 是一款非常不错的软件,相信有它的支持,一定会大大降低 STM32 系列单片机的开发难度。