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

STM32CubeMX工具和调试

 二维码 16
文章附图

背景知识视频教程

我们将了解ST的此工具的工作方式,以及如何使用其生成的代码从头开始构建Eclipse项目。 这将使GNU ARM插件成为用于项目生成的不太重要的组件,从而使我们能够创建更好的代码并准备与STM32Cube HAL集成。

工具介绍

CubeMX是用于配置为我们的项目选择的微控制器的工具。 它既用于选择正确的硬件连接,又用于生成配置ST HAL所需的代码。

CubeMX是一个以MCU为中心的应用程序。 这意味着该工具执行的所有活动都基于:

  • STM32 MCU系列(F0,F1等)
  • 为您的设备选择的封装类型(LQFP48,BGA 144等)
  • 我们项目中需要的硬件外围设备(USART,SPI等)
  • MCU常规配置(如时钟,电源管理,NVIC控制器等)

除了与硬件相关的功能之外,CubeMX还能够处理以下软件方面:

  • 所选MCU系列(CubeF0,CubeF1等)的ST HAL的管理
  • 我们项目中需要的其他软件库功能(FatFs库,FreeRTOS等)
  • 我们将用于构建固件的开发环境(IAR,TrueSTUDIO等)

CubeMX旨在成为一个完整的项目管理工具。 但是,它有一些局限性,使其只能在电路板和固件开发的早期阶段使用。

启动CubeMX后,将显示一个漂亮的欢迎屏幕(请参见下图)。

单击New project将打开MCU和板选择器对话框,如下图所示。

该对话框是一个基于选项卡的窗口,具有两个主要选项卡:MCU选择器和板选择器。

第一个选项卡允许从整个STM32产品组合中选择一个微控制器。 使用“系列”组合框,我们可以过滤属于给定系列的所有MCU。 通过“行”组合框,可以进一步过滤属于一个子系列(值行等)的MCU。 软件包组合框允许选择所有具有所需软件包的MCU。 点击更多过滤器按钮,我们可以显示其他限制搜索的字段

Board Selector选项卡允许在所有正式的ST开发板之间进行过滤(参见下图)。

有3种开发板可供选择:Nucleo,Discovery和EvalBoard,它们是用于测试STM32 MCU的最完整(且最昂贵)的开发板。 显然,我们对Nucleo板感兴趣。 因此,首先选择Nucleo板的类型,然后单击“确定”按钮。

在“板选择器”视图中,“供应商”组合框下方有一个复选框。 标签上显示使用其默认模式初始化所有IP。 这是什么意思? 首先,让我们澄清一下,IP并不表示Internet协议,而是IP的缩写。 选中该框将导致CubeMX将自动为板上可用的所有外围设备生成C初始化代码,而不仅为与用户应用程序相关的外围设备生成C初始化代码。 例如,Nucleo板具有连接到STLINK接口的USART(USART2),该接口将其映射为虚拟COM端口。 选中该框,将对CubeMX发出提示,以生成所有必要的代码以初始化USART。

启用该功能似乎是一个不错的功能,但是对于新手来说,最好将该功能保持禁用状态,并仅在需要时才手动启用每个外围设备。 这简化了学习过程,避免了浪费大量时间试图一次理解所有生成的代码

一旦选择了要使用的MCU(或开发板),就会出现CubeMX主窗口,如下图所示。该视图以STM32 MCU的漂亮图形表示为主。 即使在这种情况下,我们也具有选项卡式视图。 让我们更深入地查看每个标签。

引脚视图

引脚视图是第一个视图,分为两部分。 右侧包含具有所选外设和GPIO的MCU表示,并由ST Chip视图调用。 在左侧,我们以树状视图的形式列出了可以与所选MCU一起使用的所有外围设备(硬件部件)和中间件库(软件部件)。 这由ST IP树窗格调用。

芯片视图

芯片视图可轻松导航到MCU配置内部,这是配置微控制器的一种非常方便的方法。

启用了亮绿色的引脚。 这意味着CubeMX将生成所需的代码以根据其功能配置该引脚。 例如,对于引脚PA5,CubeMX将生成将其设置为通用输出引脚所需的C代码。

如果未启用相应的外围设备,则该引脚为橙色。 例如,使能了PA2 PA和PA3引脚,并且CubeMX将生成相应的C代码以对其进行初始化,但是未启用相关的外设(USART2),并且不会自动生成设置代码。

黄色引脚是电源引脚,其配置无法更改。

BOOT和RESET引脚为卡其色,并且其配置无法更改。

显示了上下文工具提示,将鼠标指针移到MCU引脚上(参见下图)。 例如,针对PB3引脚的上下文工具提示告诉我们,信号映射到串行线调试(SWD)接口,并且充当串行线输出(SWO)引脚。 另外,还示出了引脚号(55)。

STM32 MCU允许将外设映射到不同的引脚。 例如,在STM32F401xE MCU中,SPI2 MOSI信号可以映射到引脚PC2或PB14。 CubeMX使您可以通过Ctrl + click轻松查看允许的替代方案。 如果存在备用引脚,则该引脚显示为浅蓝色(仅当该引脚未处于复位状态(即已启用)时,才会显示备用引脚)。

例如,在下图中,我们可以看到,如果在PC2引脚上按Ctrl +单击,则PB14信号将以蓝色突出显示。 这在电路板布局中非常方便。 如果真的很难将信号路由到该引脚,或者其他功能需要该引脚,则备用引脚可以简化电路板。

同样,大多数MCU引脚可以具有备用功能,见下图。 单击引脚时,将显示一个上下文菜单。 这使我们可以选择要对该信号启用的功能。

这种灵活性导致信号功能之间产生冲突。 CubeMX尝试自动解决这些冲突,将信号分配给另一个引脚。 固定信号是那些功能被锁定到特定引脚的引脚,从而阻止了CubeMX选择备用引脚。 当冲突导致无法使用外设时,将在“芯片视图”中禁用引脚模式,并且该引脚将显示为橙色。

IP树窗格

IP树窗格提供了一种方便的方法来启用/禁用以及配置所需的外围设备和软件中间件。 CubeMX使用图标和不同的颜色以灵巧的方式显示外围设备列表,因此用户可以快速了解外围设备是否可用以及其具有的配置功能。 让我们深入了解它们。

  • Case 1:表明外围设备可用并且当前被禁用,并且可以使用其所有可能的模式。 例如,在使用I²C接口的情况下,该外设的所有可能模式为:I²C,SMBus警报模式,SMBus两线接口(TWI)
  • Csae 2:显示外围设备由于与另一外围设备发生冲突而被禁用。 这意味着两个外设都使用相同的GPIO,因此无法同时使用它们。 将鼠标移到它上面将会显示参与冲突的其他外围设备。 例如,对于STM32F401RE MCU,不可能同时使用I2C2和SWD调试引脚。
  • Case 3:表示外围设备可用并且当前被禁用,但是由于与其他外围设备的冲突,其至少一种模式不可用。 例如,在STM32F401RE MCU中,TIM2外设的第四通道使用PA2 GPIO,它是USART2外设的USART_RX信号。 这意味着在使用Nucleo VCP时,不能将TIM2通道4用作输入捕获。
  • Case 4:表示外设不适用于所选的封装类型(如果您强烈需要该外设,则必须切换到另一种封装类型-通常是带有更多引脚的封装类型)。
  • Case 5:表示已使用外设并且其所有模式均可用
  • Case 6:显示使用了外围设备,但某些模式或I / O不可用
  • Case 7:当所有外围设备模式均可用时,所有配置选项均以黑色显示
  • Case 8:当并非所有外围设备模式都可用时,不可用的配置选项显示为红色背景

时钟视图

时钟视图是进行与时钟管理相关的所有配置的区域。 在这里,我们可以设置主内核和外设时钟。 所有时钟源和PLL配置均以图形方式显示(见下图)。

用户第一次看到此视图时,可能会对配置选项的数量感到困惑。 但是,通过一点实践,这是处理STM32时钟配置的最简单方法(与8位MCU相比,这是相当复杂的)。

如果您的电路板设计需要高速时钟(HSE),低速时钟(LSE)或同时使用两者的外部源,则必须首先在RCC部分的Pinout视图中将其启用,如下图所示。

完成此操作后,您将能够在时钟视图中更改时钟源。

配置视图

配置视图允许进一步设置外围设备和软件组件。 例如,可以为GPIO引脚启用上拉或配置FATFS选项。

此视图中定义的配置选项会影响自动生成的C源代码。 对这个CubeMX部分的良好管理可以简化很多与外设优化有关的开发过程。 当我们处理每种类型的外围设备时,我们将分析每个配置视图。

功耗计算器视图

功耗计算器(PCC)视图是CubeMX的功能,在给定微控制器,电池模型和用户定义的电源序列的情况下,它可以估算以下参数:

  • 平均耗电量
  • 电池寿命
  • 平均DMIPS

可以通过专用界面添加用户定义的电池。

对于每个步骤,用户都可以选择VBUS代替电池作为电源。 这将影响电池寿命估计。 如果可以在不同电压水平下进行功耗测量,则CubeMX还将建议选择电压值。

项目生成

一旦完成了MCU,其外围设备和中间件软件的配置,我们就可以使用CubeMX为我们生成C项目框架。 在本段中,我们将看到所有必需的步骤以:

  • 创建一个新的“通用” Eclipse项目,准备接受CubeMX自动生成的C代码
  • 将CubeMX生成的文件导入Eclipse项目中
  • 根据需要配置项目

我们将使用来自最新的STCube框架的大部分代码来创建闪烁应用。 这也将使我们有机会开始理解STCubeHardware抽象层(HAL)的基础块。 一旦理解了此处说明的步骤,我们将完全自主地为STM32平台建立任何项目。

使用CubeMX生成C项目

第一步是使用CubeMX工具生成包含HAL初始化代码的C代码。 如果您已在上一段中进行了实验,则最好从板选择器工具中选择Nucleo板来启动一个全新的项目,如前所示。

一旦CubeMX创建了新项目,请转到Project-> Settings…菜单。 出现Project Settings对话框,如下图所示。

在项目名称字段中,输入您想要的项目名称。 对于“项目位置”字段,最好在〜/ STM32Toolchain inside文件夹(对于Windows用户为C:\ STM32Toolchain)内创建一个文件夹。 一个好的文件夹名称可能是〜/ STM32Toolchain / cubemx-out。 在“Toolchain/IDE”字段中,选择“ SW4STM32”条目。 将所有其他字段保留为默认值。

现在切换到Code Generator选项卡,然后选择如下图所示的选项。单击OK按钮。

现在,我们准备为Nucleo生成C初始化代码。 转到项目->生成代码菜单。 CubeMX可能会要求您为您的Nucleo下载最新版本的STCube HAL框架(例如,如果您有Nucleo-F401RE,它将要求您下载STCube-F4 HAL)。 如果是这样,请单击“是”按钮,然后等待完成。 一段时间后,您将在〜/ STM32Toolchain / cubemx-out / <project-name>目录中找到C代码。

CubeMX下载的CubeHAL是官方CubeHAL的稍有不同的版本,您可以从ST网站下载。 它经过修改后可以由CubeMX处理,并且包含模板源文件⁹,这些文件会根据MCU配置使用CubeMX生成的自定义代码进行更新。 这些大小的软件包会自动在UNIX之类的系统上的〜/ STM32Cube / Repository文件夹中以及Windows的C:\ Documents and Settings \ <USER-ID> \ STM32Cube \ Repositoryfolder中下载。

理解生成的代码

在继续创建Eclipse项目之前,先看看CubeMX生成的代码是一件好事。

打开〜/ STM32Toolchain / cubemx-out / <项目名称>文件夹,您将在其中找到几个子文件夹。 下图将生成的项目结构与CMSIS软件体系结构进行了比较。

CMSIS-CORE为Cortex-M设备实现了基本的运行时系统,并使用户可以访问处理器内核和设备外围设备。 详细定义:

  • 用于Cortex-M处理器寄存器的HAL,具有SysTick,NVIC,系统控制块寄存器,MPU寄存器,FPU寄存器和内核访问功能的标准化定义。
  • 系统异常名称,用于与系统异常接口,而不会出现兼容性问题。
  • 组织头文件方法使学习新的Cortex-M微控制器产品变得容易,并提高了软件的可移植性。 这包括设备特定中断的命名约定
  • 每个MCU供应商将使用的系统初始化方法。 例如,标准化的SystemInit()函数对于在设备启动时配置时钟系统至关重要
  • 固有函数用于生成标准C函数不支持的CPU指令。
  • 名为SystemCoreClock的全局变量,可以轻松确定系统时钟频率。

CMSIS-CORE包细分为CubeMX生成的项目中的几个文件,如上图所示:

创建Eclipse项目

手动/自动将生成的文件导入Eclipse项目

添加对固件有用的内容

调试

使用OpenOCD

Windows上启用OpenOCD

Linux和MacOS上启用OpenOCD

连接到OpenOCD Telnet控制台

配置Eclipse

使用Eclipse调试

ARM半主机

新项目中启用半主机

具有C标准库的半主机

在现有项目中启用半主机

半主机工作原理

阅读完整文档

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