1 个不稳定版本
0.0.0 | 2021年8月12日 |
---|
94 在 #firmware
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书籍。
- 在开始之前,您需要识别目标设备的某些特征,因为它们将被用于配置项目
-
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区域,但为了简单起见,我们将忽略它)。
- 实例化模板。
$ 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
- 设置默认编译目标。如
.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)
- 将内存区域信息输入到
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
}
- 构建模板应用程序或其中一个示例。
$ cargo build
VS Code
此模板包括位于.vscode/
目录中的用于在Visual Studio Code中调试CortexM程序的启动配置。
请参阅.vscode/README.md获取更多信息。
如果您不使用VS Code,可以安全地从生成的项目中删除该目录。
许可证
本模板的许可证可以是以下之一:
-
Apache许可证2.0版本(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交并包含在作品中的任何贡献,都应按上述方式双许可,无需附加任何条款或条件。
行为准则
对本crate的贡献是在Rust行为准则的条款下组织的,本crate的维护者、Cortex-M团队承诺将介入以维护该行为准则。