国外课栈 - 国外电子信息技术

使用Eclipse创建STM32项目和刷新固件

 二维码 11
文章附图

背景知识视频教程

我们将创建一个非常基本的程序:LED闪烁。 在此阶段中,我们将使用GNU ARM Eclipse插件在几个步骤中创建一个完整的应用程序,而无需处理与ST硬件抽象层(HAL)相关的方面。

关于GNU ARM Eclipse插件的说明

经验丰富的程序员可能会发现,为STM32平台生成代码并非必须要使用这些插件。 完全有可能在一个空的C / C ++项目中开始导入HAL,并相应地配置工具链。最好直接使用最新HAL版本中的代码以及STM32CubeMX工具自动生成的代码。 但是,GNU ARM插件带来了一些简化项目管理的功能。 此外,我认为对于新手,建议从一个自动生成的项目开始,以避免造成很多混乱。 在为STM32平台编写代码时,我们需要处理许多工具和库。 其中一些是强制性的,而另一些则可能导致混乱。 因此,最好是逐渐开始并潜入整个堆栈。 一旦您熟悉了开发环境,就可以很容易地将其适应您的需求。

熟悉Eclipse IDE

启动Eclipse时,您可能会对它的界面感到困惑。 下图显示了Eclipse首次启动时的外观。

Eclipse是一种多视图IDE,其组织方式是将所有功能都显示在一个窗口中,但是用户可以自由地按需布置界面。 Eclipse启动时,将显示一个欢迎屏幕。 该“欢迎”选项卡的内容称为视图。

要关闭Welcome视图,请单击十字图标,如下图所示。

一旦“欢迎”视图消失,就会出现C / C ++透视图,如下图所示。

在Eclipse中,透视图是一种以与透视图功能相关的方式排列视图的方式。 C / C ++透视图专门用于编码,它提供了与源代码的编辑及其编译有关的所有方面。 它分为四个视图。

左侧的名为Project Explorer的视图显示了工作区中的所有项目。

居中的视图(是较大的视图)是C / C ++编辑器。 每个源文件都显示为一个选项卡,并且可以同时打开许多选项卡。

Eclipse窗口底部的视图专用于与编码和编译有关的若干活动,并且细分为选项卡。 例如,“控制台”选项卡显示了编译器的输出。 “问题”选项卡以一种方便的方式组织来自编译器的所有消息,以检查它们; 搜索选项卡包含搜索结果。

右侧的视图包含其他几个选项卡。 例如,“大纲”选项卡显示每个源文件的内容(函数,变量等),从而可以快速浏览文件内容。

还有其他可用的视图(以及自定义插件提供的许多其他视图)。 用户可以通过进入Window-> Show View-> Other…菜单查看它们。

有时会发生视图“最小化”并且似乎从IDE中消失的情况。 当您不熟悉Eclipse时,这可能会导致尝试了解它的去向而感到沮丧。 例如,看下图,似乎Project Explorer视图已经消失了,但是它只是最小化了,您可以单击红色圆圈中的图标来恢复它。 有时该视图实际上已关闭。 当该视图中只有一个选项卡处于活动状态并且我们将其关闭时,就会发生这种情况。 在这种情况下,您可以再次在Window->Show View->Other…菜单中启用视图。

要在不同的视角之间切换,可以使用Eclipse右上方可用的特定工具栏。参见下图。

默认情况下,另一个可用的视角是“调试”,我们将在以后更深入地介绍。 您可以通过转到Window->Perspective->Open Perspective->Other…菜单来启用其他透视图。

从Eclipse 4.6(又名Neon)开始,默认情况下,透视图切换器工具栏不再显示透视图名称,而是仅显示与该透视图关联的图标。 这往往会使新手用户感到困惑。 您可以通过在工具栏上单击鼠标右键并选择“显示文本”条目来在其图标附近显示透视图名称,如下所示。

创建项目

我们将创建一个简单的应用程序,使Nucleo LD2 LED(绿色的LED)闪烁。

转到文件->新建-> C项目。 Eclipse显示了一个向导,该向导使我们可以创建测试项,见下图

在项目名称字段中输入hello-nucleo(您完全可以选择喜欢的项目名称)。 实际上,重要的部分是“项目类型”部分。 在这里,我们必须选择我们的Nucleo开发板的STM32系列。 例如,如果我们有NUCLEO-F401RE,则必须选择STM32F4xx C / C ++项目。

现在单击下一步按钮。 在向导的此步骤中,选择合适的RAM和闪存大小非常重要(如果这些字段与配备Nucleo的MCU的RAM和闪存数量不匹配,将无法启动示例应用程序)。 使用下表为Nucleo板选择正确的值。

通过以下方式填写第二步的字段,见下图

现在单击下一步按钮。 在接下来的两个向导步骤中,将所有参数保留为默认值。 最后,在最后一步中,您必须选择GCC工具链路径。 在“设置工具链以在Windows,Linux和Mac OSX上开发STM32应用程序”中,我们已将GCC安装在〜/ STM32Toolchain / gcc-arm文件夹中(在Windows中,该文件夹为C:\ STM32Toolchain \ gcc-arm)。 因此,选择如下图所示的文件夹(键入路径名或使用“浏览”按钮),并确保“工具链名称”字段包含用于ARM嵌入式处理器的GNU工具(arm-none-eabi-gcc),否则从下拉菜单中选择它 。 单击完成按钮。

我们的测试项目即将完成。 我们只需要修改一件事就可以在Nucleo上运行。 但是,在完成示例之前,最好先看一下GNU ARM插件生成的内容。

下图显示了生成项目后Eclipse IDE中显示的内容。 项目浏览器视图显示项目结构。 这是第一级文件夹的内容(从上到下):

  • includes:此文件夹显示GCC包含文件夹中的所有文件夹
  • src:此Eclipse文件夹包含构成我们的应用程序的.c文件。 这些文件之一是main.c,其中包含int main(int argc,char * argv [])例程
  • system:此Eclipse文件夹包含许多相关库的头文件和源文件(尤其是ST HAL和CMSIS软件包)
  • include:此文件夹包含我们的主应用程序的头文件
  • ldscripts:此文件夹包含一些相关文件,这些文件使我们的应用程序可以在MCU上运行

如前所述,我们需要再做一件修改以使示例项目在Nucleo板上正常工作。 GNU ARM插件生成一个适合Discovery硬件布局的示例项目。 这意味着LED被路由到另一个MCU I / O引脚。 我们需要修改它。

我们如何知道LED连接到哪个引脚? ST提供了Nucleo板的原理图。查看pdf第4页,我们可以看到LED已连接到PA5引脚,如下图所示。

PA5是GPIOA端口PIN5的简写,这是在STM32世界中表示GPIO的标准方法。

现在,我们可以继续修改源代码。 打开Include / BlinkLed.h并转到第19行。在这里,我们找到与LED关联的GPIO的宏定义。 我们需要通过以下方式更改代码:

Filename: include/BlinkLed.h

30 #define BLINK_PORT_NUMBER (0)
31 #define BLINK_PIN_NUMBER (5)

BLINK_PORT_NUMBER定义GPIO端口(在本例中为GPIOA = 0),BLINK_PIN_NUMBER定义引脚号

Nucleo-F302R8是唯一具有与用于LED LD2的引脚不同的硬件配置的Nucleo板,因为它已连接到PB13引脚,如示意图所示。 这意味着正确的引脚配置为:

30 #define BLINK_PORT_NUMBER (1)
31 #define BLINK_PIN_NUMBER (13)

现在,我们可以编译项目了。 转到菜单项目->构建项目。 稍后,我们应该在输出控制台中看到类似的内容[ˆch3-flash-image-size]。

Invoking: Cross ARM GNU Create Flash Image
arm-
none-eabi-objcopy -O ihex "hello-nucleo.elf" "hello-nucleo.hex"
Finished building: hello-nucleo.hex

Invoking: Cross ARM GNU Print Size
arm-
none-eabi-size --format=berkeley "hello-nucleo.elf"
text data bss dec hex filename
5697 176 416 6289 1891 hello-nucleo.elf
Finished building: hello-nucleo.siz

09:52:01 Build Finished (took 6s.704ms)

链接电脑

刷新Nucleo固件

鉴于三种操作系统(Windows,Linux,Mac OSX)的刷新过程有所不同,我们将分别描述它们。

阅读完整文档

文章分类: 嵌入式STM32
分享到: