在 STM32CubeIDE 中创建新项目的最简单方法是使用 STM32 项目向导。默认情况下,此工具会设置一个 STM32Cube 项目,其中包括多个驱动程序文件、系统文件和一个 .ioc 文件(即可使用集成的 STM32CubeMX 编辑器配置的代码生成设置)。如果出于某种原因,开发人员希望从空白画布开始,他们可以创建一个空项目,其中仅包含启动和运行 MCU 所需的文件。其中包括链接描述文件、启动代码和一个简单的 main.c 文件。 虽然在 STM32CubeIDE 中创建一个空项目非常简单,但除非添加一些额外的驱动程序,否则很难在其中生成任何高质量的代码。至少,应下载与目标设备对应的 CMSIS 头文件并将其包含在项目中,以提供设备的寄存器定义。在以下过程中,出于演示目的,选择 STM32L152RE MCU 作为目标 MCU。但是,此过程适用于 STM32 系列的任何成员。 创建一个空项目在 STM32CubeIDE 中,选择File > New > STM32 Project。 使用目标选择器选择目标 STM32 设备。在此示例中,从列表中选择了“STM32L152RE”设备(使用MCU/MPU 选择器选项卡中的搜索栏可以轻松找到它)。单击下一步。 为项目命名并将Targeted Project Type更改为Empty,如图 1 所示。单击Finish。
创建空项目481 × 535 11.6 KB
图 1:使用 STM32 项目向导创建一个空的 STM32 项目。
添加 CMSIS 头文件从技术上讲,这一步是可选的,因为此时项目将编译得很好。但是,如果没有任何额外的驱动程序和/或寄存器定义,程序员将仅限于使用硬编码地址进行寄存器级编程,如下所示: /* Set output pin PA5 high */*((uint32_t*)0x40020014) |= (1 << 5);显然,这不会产生高质量的代码,因为它是不可理解的、可移植的或可维护的。虽然程序员可以为每个寄存器地址和位域手动创建定义,但这些已经在 STM32Cube MCU 包中提供的 CMSIS 头文件中提供。在项目中包含这些头文件允许寄存器级代码编写如下: /* Set output pin PA5 high */GPIOA->ODR |= GPIO_ODR_ODR_5;注意:对于每个 STM32 MCU 系列(STM32F4、STM32G0、STM32L1 等),都可以从ST 的网站和STMicroelectronics GitHub 存储库下载相应的 MCU 包。 这样的代码在不牺牲性能效率的情况下加强了上述每个质量属性。此外,包含 CMSIS 头文件允许 STM32Cube LL 和/或 HAL 驱动程序的元素也包含在项目中,因为这些更高级别的抽象层是建立在 CMSIS 定义上的。 以下过程继续以STM32L152RE器件为例。显然,如果选择了不同的目标设备,下面提到的任何包含文本“STM32L1”的目录或文件实际上是指目标设备的相应资源。 首先从ST 的网站或STMicroelectronics GitHub 存储库下载项目目标 MCU 的 STM32Cube 固件包。将包解压缩或克隆到合适的目录。对于此示例,STM32Cube_FW_L1_V1.10.3目录已复制到C:UsersMatt目录中。 在 STM32CubeIDE 中,在 Project Explorer 中右键单击项目名称,然后选择Import。 选择常规类别下的文件系统导入向导。单击下一步。 使用提取的固件包的路径填充From directory文本框。在本例中,路径为C:UsersMattSTM32Cube_FW_L1_V1.10.3,如图 2 所示。 使用文件浏览窗口选择要导入的 CMSIS 文件。选中STM32Cube_FW_L1_V1.10.3/Drivers/CMSIS/Core/Include和STM32Cube_FW_L1_V1.10.3/Drivers/CMSIS/Device/ST/STM32L1xx/Include目录旁边的框。该窗口应如图 2 所示。单击Finish。
空项目导入CMSIS609 × 751 28.3 KB
图 2:使用文件系统导入向导导入 CMSIS 头文件
注意:此时,将文件也复制并粘贴到STM32Cube_FW_L1_V1.10.3/Drivers/CMSIS/Device/ST/STM32L1xx/Source/Templates/system_stm32l1xx.c项目中的某处也是一个好主意。虽然对 STM32L152RE 设备没有严格要求,但使用硬件 FPU 的设备将需要其定义SystemInit(). HAL 驱动程序也依赖此文件。 - 将导入的目录添加到项目包含路径列表中。在 Project Explorer 中,右键单击每个Include文件夹并选择Add/remove include path...,如图 3 所示。在弹出窗口中,确保选中Debug和Release配置,然后单击OK。
emptyProjectimportAddIncludePath_edit601 × 877 36.8 KB
图 3:将Drivers/CMSIS/Core/Include和Drivers/CMSIS/Device/ST/STM32L1xx/Include目录添加到项目包含路径列表
- 使用 Project Explorer 展开Drivers/CMSIS/Device/ST/STM32L1xx/Include目录。双击命名的文件将stm32l1xx.h其打开。向下滚动以找到目标设备列表(图 4)并确定哪一个对应于项目的目标设备。在这种情况下,它是“STM32L152xE”设备。
空项目CMSIS定义787 × 796 41.9 KB
图 4:stm32l1xx.h文件识别的 STM32L1 设备列表。
将此设备定义添加到项目符号列表中。在 Project Explorer 中,右键单击项目名称并选择Properties。在 Properties 窗口的左侧,导航到C/C++ General > Paths and Symbols。在符号选项卡中,单击添加并STM32L152xE在名称文本框中输入定义(即)。单击OK并确认符号现在出现在列表中,如图 5 所示。单击Apply 和 Close。
emptyProjectImportAddTargetDefinition_edit821 × 549 24.7 KB
图 5:将目标设备定义添加到项目符号列表
- 最后,添加#include "stm32l1xx.h"到需要使用寄存器定义的源文件中并开始编码!
|