1 个不稳定版本

0.0.0 2021年8月12日

94#firmware

GPL-3.0 许可证

2KB

cortex-m-quickstart

为ARM Cortex-M微控制器构建应用程序的模板

此项目由Cortex-M团队开发和维护。

依赖项

要使用此模板构建嵌入式程序,您需要

  • Rust 1.31, 1.30-beta, nightly-2018-09-13 或更新的工具链。例如 rustup default beta

  • cargo generate 子命令。 安装说明

  • rust-std 组件(为ARM Cortex-M目标预编译的 core 包)。运行

$ rustup target add thumbv6m-none-eabi thumbv7m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf

使用此模板

注意:这是仅涵盖构建程序的简短版本。对于包含闪烁、运行和调试程序的完整版本,请参阅 嵌入式Rust书籍

  1. 在开始之前,您需要识别目标设备的某些特征,因为它们将被用于配置项目
  • ARM核心。例如,Cortex-M3。

  • ARM核心是否包含FPU?Cortex-M4F和Cortex-M7F核心都包含FPU。

  • 目标设备有多少闪存和RAM?例如,256 KiB的闪存和32 KiB的RAM。

  • 闪存和RAM在地址空间中的位置在哪里?例如,RAM通常位于地址 0x2000_0000

您可以在设备的数据表或参考手册中找到此信息。

在这个例子中,我们将使用STM32F3DISCOVERY。该板包含STM32F303VCT6微控制器。此微控制器具有

  • 一个包含单精度FPU的Cortex-M4F核心

  • 位于地址0x0800_0000的256 KiB的闪存。

  • 位于地址0x2000_0000的40 KiB的RAM。(还有一个RAM区域,但为了简单起见,我们将忽略它)。

  1. 实例化模板。
$ cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart
 Project Name: app
 Creating project called `app`...
 Done! New project created /tmp/app

$ cd app
  1. 设置默认编译目标。如.cargo/config底部所述,有四个选项。对于具有Cortex-M4F核心的STM32F303VCT6,我们将选择thumbv7em-none-eabihf目标。
$ tail -n6 .cargo/config
[build]
# Pick ONE of these compilation targets
# target = "thumbv6m-none-eabi"    # Cortex-M0 and Cortex-M0+
# target = "thumbv7m-none-eabi"    # Cortex-M3
# target = "thumbv7em-none-eabi"   # Cortex-M4 and Cortex-M7 (no FPU)
target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
  1. 将内存区域信息输入到memory.x文件中。
$ cat memory.x
/* Linker script for the STM32F303VCT6 */
MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  FLASH : ORIGIN = 0x08000000, LENGTH = 256K
  RAM : ORIGIN = 0x20000000, LENGTH = 40K
}
  1. 构建模板应用程序或其中一个示例。
$ cargo build

VS Code

此模板包括位于.vscode/目录中的用于在Visual Studio Code中调试CortexM程序的启动配置。
请参阅.vscode/README.md获取更多信息。
如果您不使用VS Code,可以安全地从生成的项目中删除该目录。

许可证

本模板的许可证可以是以下之一:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交并包含在作品中的任何贡献,都应按上述方式双许可,无需附加任何条款或条件。

行为准则

对本crate的贡献是在Rust行为准则的条款下组织的,本crate的维护者、Cortex-M团队承诺将介入以维护该行为准则。

无运行时依赖