基于正点原子 MiniSTM32 开发板 使用 STM32CubMx 构建工程的准备工作
MiniSTM32 开发板是正点原子出品的一款基于意法半导体 STM32F103RCT6 单片机的开发板,就其本身的硬件售价而言性价比不能说高,但是其配套的丰富的文档以及开箱即用的例程可以说完全值回票价。然而其配套的例程对于学习如何继续快速开发其他同款、同系列、同厂商的单片机还是有所差距。
就我现在的开发流程来说,在硬件工程师完成原理图设计后就可以开始进行软件开发了,为了使得开发速度更加快速,我使用了STM32CubeMx进行了时钟树的配置、基础的IO口的配置以及部分单片机片内外设功能的初步配置(例如串口、外部中断、定时器中断等),在此之后生成 HAL 库工程,再次基础上拼接之前已经写好的其他外设和算法的库文件(如果没有就按照 datasheet 和项目要求现写一个)。如果还有上位机的需求则还需要完成上位机和通讯协议的适配和设计。至此就完成初步的软件设计,如果不写上位机、新的库文件,那么至此大概只需要两个小时,可以说是相当的快速开发了。
而正点原子提供的例程的缺陷就在这里,有可能我在 MiniSTM32 上使用配套的 HAL 库例程的基础上进行了开发,而要把开发后的内容移植到实际的项目上要用不少的功夫。所以使用 STM32CubMx 重新构建正点原子 MiniSTM32 开发板的 HAL 库工程至关重要。
本项目用到的软件有:
STM32CubeMx v6.6.1 ------ 用于工程的配置
Keil v5.29 ----------------------- 用于程序的编写和调试
FLYMCU(可选) ------------ 如果没有Debug器可以使用次软件连接串口进行烧录
XCOM(可选) --------------- 正点原子编写的串口调试助手
开发板配套外设对应单片机的引脚表在 3,ALIENTEK MiniSTM32开发板原理图 的压缩包中。
整个项目的配套工程都已经写完并且上传至Github中
项目地址是:
https://github.com/Wingplane/MiniSTM_STM32CubeMX
在开始后面的实验讲解之前,先要讲解一下 STM32CubeMX 的使用方法。首先在每一个实验文件夹打开后,都可以看到一个 MiniSTM.ico的文件,这是 STM32CubeMX 的工程文件,其内部的内容是以类似 yaml 格式保存的工程内配置
下面以实验一内的 ico 文件为例
我们一般不直接通过文档进行编辑,而是通过 STM32CubeMX 打开,使用图形界面进行便捷的配置。
打开文件后,可能会弹出一下的警告,这是因为 STM32CubeMX 是在一直保持更新的,生成 HAL 库代码中的部分内容可能会有一些更改,但是随着 STM32CubeMX 的迭代,现在生成的代码基本的改变不多,更新更多的是加入对更多单片机的支持。所以不管是选择 continue 用6.6.1的版本,还是选择 migrate 使用最新的版本都是 OK 的。

打开以后就是如下图所示的一个界面上面的 File Window Help三个选项栏分别是关于
工程文件的保存、读取、导入、导出、另存为等操作
关于输出窗口的开关和软件内字体的大小
帮助文档、相关信息以及软件的更新

这边是告知用户选择的芯片和工程名等信息,这里可以点击芯片名重新选择单片机并新建一个工程。

点击这里可以生成 HAL 库的代码,这一般是配置完成后的最后一步

然后就是四个选项卡了
第一个是引脚功能的配置
第二个是时钟树的配置
第三个是输出的工程文件的配置
第四个是开发时用到的工具

接下来我们一个一个选项卡进行说明
首先是第一个关于引脚功能的配置的选项卡
这里最上面还有两个选项栏
Software Packs 包含的是包和库的管理,这里不仅有官方提供的大量和样板匹配的库,还有像 FreeRTOS 等开源的软件包,它们也是由官方进行适配了的,此外它还支持了第三方通过导入的方式导入第三方包,比如国内的 RT-Thread 。
Pinout 中则有有关于引脚配置的各种快捷方式,方便快捷的选中、清空、标记等。

往左下方下看,这一侧的工具栏中显示的是各种外设和可供使用的包和库(在上面提到的Software Packs中添加后就可以在这里显示了)

用户可以点开对应的功能进行快速的初始化

而这边占地最大的部分就是芯片引脚的示意图,我们可以直观的在配置中看到配置的是哪一个引脚,同时也可以通过点击对应引脚,直接在示意图上进行功能的配置和修改。

接下来是时钟树的配置,时钟的配置是 STM32 以及各类单片机乃至所有高处理能力芯片的重点,这里只抓几个重点说明。

首先就是输入的两个时钟信号 LSE 和 HSE 的配置,首先在自己开发的过程中这两个外部时钟不是必须的。如果不使用RTC功能,那么LSE可以省去,不担心片内时钟不稳的问题,那么HSE也可以省去改用片内的HSI。


一般情况下,我们输入的 HSE 信号会通过片内锁相环倍频为需要的频率(一般就是最大,在 STM32F103RCT6 上就是 72MHz)

经过锁相环的时钟信号会通过各个分频器给到各个总线上,由总线连接的各个外设和核心就被分配到了各自需要的时钟信号,关于各个总线上分别挂载了哪几个设备,可以参考单片机的数据手册。

这里有一篇文章可以帮助你快速找到芯片的用户手册

第三个选项卡是工程管理,这个选项卡下左侧还有三个选项卡,分别是工程、代码生成器和高级设置。

在工程选项卡中,新建的工程要修改主要是工程名,以及工程文件的保存位置,这些一旦保存后就无法在这里继续修改了,但是你可以在文件夹中随意移动和修改工程的文件名,修改后。此外还有就是要修改工具链和IDE,我之后的内容使用的是 Keil 所以选用 MDK-ARM,如果使用其他的工具链就选择其他内容,需要注意的是对 SW4STM32 的支持只到了6.5.0版本,之后的版本不在支持生成 SW4STM32 的代码。下面的 Linker Setting 可以修改堆大小和栈大小,一般不用修改,但是在使用实时操作系统或者编译时出现报错,那么就需要根据实际需要进行修改。工程选项卡中其他的内容根据具体的环境进行修改。

代码生成器中会修改生成的源文件、头文件以及工具链的链接。这里勾选了只在工程中添加必要的包,以及每个功能都会生成独立的源文件、头文件,如果不勾选这个,绝大部分的函数都会创建在main.c中。

STM32Cube MCU 包和嵌入式软件包有着三个不同的选项
复制所有库到工程文件夹中
只复制必要的库文件
通过链接工具链文件来添加库到工程文件夹中
这3个选项,可扩展性逐步上升,工程文件大小也逐步上升

最后是高级设置,这里可以看到具体用了什么库,这里的 HAL 库可以选择换成 LL 库, LL 库包含的接口更少,内存占用更小,执行效率也更高。

四个选项卡中的最后一个选项卡是工具选项卡,其中有着一系列能够帮助开发的工具

以上就简要介绍完成了 STM32CubeMX 的大体功能,接下来介绍一下生成的工程的文件目录结构
移植时可以方便的从Inc和Src取用对应的文件。