跳转到主要内容

1. 创建项目

动机

在本节中,我们将使用STM32CubeMX生成特定MCU的工程项目。 该项目将作为本使用指南中的其余步骤的基础。

我们将在接下来的步骤中使用STM32CubeMX完善项目,并编写和整合代码,以使所有必需的外设都正常工作。

本项目将长期存在以供反复使用。 您现在应确定一种策略,使得不同的版本保持可用,以便可以返回并再次运行。 或者在新硬件上进行,或者只是重新检查硬件。

也许您需要许多小型测试程序。 在这种情况下,该项目是一个很好的起点。

目标

其目标是在STM32CubeMX中创建一个可烧录到您的板上并执行的项目。 如果您有带调试器的IDE (如STM32CubeIDE或IAR Embedded Workbench) ,则还应检查是否可以调试并逐步完成MCU上的项目。

如果您没有调试器,则应找到一种从项目的各个位置打印出调试语句的方法。 如 串行端口。

验证

以下是本节的验证点:

验证点基本原理
在IDE中打开项目项目由STM32CubeMX正确生成,并可以用作后续板卡启动开发的起点。
项目编译对项目进行驱动程序及包含类路径的正确设置。 我们可以编写更多代码并重复编译该项目。
命中断点项目可以调试运行并在断点处停止。 我们可以检查项目状态并调查错误。

先决条件

以下是此步骤的先决条件:

  • 基于STM32开发板
  • 编程/调试接口 - ST-LINK、JLINK或类似接口
  • STM32CubeMX已安装
  • 已安装IDE - STM32CubeIDE、IAR Embedded Workbench、Keil uVision或类似软件

执行

现在,我们将在STM32CubeMX中完成创建新项目的所有步骤。 在该示例中,我们将使用STM32F429 MCU。 当然,您应在硬件上选择MCU。

在STM32CubeMX中,单击“从MCU启动我的项目”中的“访问MCU选择器”:

创建新项目

也可以基于STM32评估套件启动一个新项目,如STM32F429探索板。 如果您的硬件设计基于评估套件,您可以或说应当执行该操作。

然后,我们选择相关MCU。 在这里我们选择STM32F429ZIT6U:

选择MCU

转到“项目管理器”选项,并为项目命名。 当然,您也可以选择新的项目存储位置。 在“应用结构”下,选择“高级”。 在“工具链/IDE”下,您必须选择IDE。 在该示例中,我们选择IAR:

设置项目名称和IDE

现在,点击右上角的“生成代码”按钮。 如果这是您所选MCU系列(F4/F7/H7)中的首个项目,则STM32CubeMX自动建议下载相关STM32Cube固件包。 接受该选项,以获取供以后使用的最新版本。

STM32CubeMX可以下载STM32Cube固件

单击“打开项目”,以打开IDE中的项目:

项目已生成

项目在IAR Embedded Workbench中打开

STM32CubeMX生成的项目包含特定MCU启动代码、中断矢量表、系统初始化代码以及MCU中所有外设的HAL驱动程序。

现在可通过IDE编译和调试项目。 在IAR中,点击“项目”->来编译项目,点击“项目”->来调试项目:

在IAR Embedded Workbench中调试项目

设置IAR项目,使用STLink调试器。 如果您使用其他调试器,请在IDE中更改项目的“调试器”属性。

主循环继续运行

在无操作系统的情况下运行的项目,main的while循环通常很重要。 通过设置断点来检查是否执行到某个位置,也可以在循环中添加一些代码。

建议浏览IDE中的项目,以熟悉代码结构。 另外也可以尝试一下从SystemInit到main的操作步骤。

用户代码段

在这一步,重要的是先理解STM32CubeMX所用的“用户代码段”这一概念,然后再开始编辑自己的项目。 项目中Core/Src文件夹中的所有源文件都是由STM32CubeMX生成的。 在您以后更改STM32CubeMX中的项目配置时(如使能UART),将重新生成其中的一些文件。 您可能也在其中的一些文件中插入代码。 除非遵循下面的规则,否则在利用STM32CubeMX重新生成项目时,您的用户代码将丢失:

  • 仅在用户代码区写入代码

写在用户代码区以外的任何代码都将被STM32CubeMX删除。

作为一个示例,让我们看一下Core/Src/main.c中的前几行:

main.c
int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */


/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
...
}

如果您希望在main函数的开头插入代码,必须将其放在用户代码开始1与用户代码结束1之间。 如果将代码放在此区之外,它将被STM32CubeMX删除。

Caution
请勿在用户代码区以外写代码。 当STM32CubeMX生成代码时,将删除此类代码。

更多读物

此处的链接文档包含有关CubeMX的更多信息: