快速开始

所以,你想尝试一下Embassy诶,这太棒了!你只需要安装一点工具就可以开始啦:

  • rustup - Rust工具链,用于编译 Rust 代码

  • probe-rs - 用于在设备上烧录固件。如果你已经安装了其他工具,比如 OpenOCD ,你也可以使用它。

如果你没有受支持的开发板,别担心,你也可以在你的PC上使用 std 示例来运行 Embassy。

获取一个已有示例代码的开发板

Embassy 支持许多系列的MCU,但最快的入门方式是使用已有示例代码的开发板。

以下列表并非详尽无遗。如果你的开发板不在此列,请查看 examples folder 是否有针对它编写的示例代码。

nRF开发板

RP2040开发板

ESP32开发板

运行示例

首先,你需要克隆 github 仓库;

git clone https://github.com/embassy-rs/embassy.git
cd embassy

克隆仓库后,找到适用于你的开发板的示例文件夹,并构建一个示例程序。blinky 是一个不错的选择,因为它只是让 LED 闪烁,相当于嵌入式世界的“Hello World”。

cd examples/nrf52840
cargo build --bin blinky --release

成功构建构建示例后,将你的开发板使用调试器链接到你的电脑上,然后在硬件上运行示例:

cargo run --bin blinky --release

如果一切正常,你应该在开发板上看到一个闪烁的 LED,并在你的计算机上看到类似于以下的调试输出信息:

    Finished dev [unoptimized + debuginfo] target(s) in 1m 56s
     Running `probe-run --chip STM32F407VGTx target/thumbv7em-none-eabi/debug/blinky`
(HOST) INFO  flashing program (71.36 KiB)
(HOST) INFO  success!
────────────────────────────────────────────────────────────────────────────────
0 INFO  Hello World!
└─ blinky::__embassy_main::task::{generator#0} @ src/bin/blinky.rs:18
1 INFO  high
└─ blinky::__embassy_main::task::{generator#0} @ src/bin/blinky.rs:23
2 INFO  low
└─ blinky::__embassy_main::task::{generator#0} @ src/bin/blinky.rs:27
3 INFO  high
└─ blinky::__embassy_main::task::{generator#0} @ src/bin/blinky.rs:23
4 INFO  low
└─ blinky::__embassy_main::task::{generator#0} @ src/bin/blinky.rs:27
cargo run 命令是怎么知道如何去连接和编程你的开发板?在每个 examples 文件夹中,有一个 .cargo/config.toml 文件,它告诉cargo使用 probe-rs 作为ARM二进制文件的运行器。 probe-rs 处理与调试器和MCU的通信。为了使其正常工作,probe-rs 需要知道它正在编程的芯片,因此如果你想在其他芯片上运行示例,你需要编辑这个文件。

它出错了!

如果你在运行 cargo run --release 时遇到问题,请检查:

  • 在命令行中指定了正确的 --chip ,或者

  • 已将 .cargo/config.toml 的运行设置为正确的芯片, 而且

  • 已更改了 examples/Cargo.toml 的 HAL(例如 embassy-stm32)依赖项的feature,以使用正确的芯片(替换默认的 stm32xxxx feature)

此时,项目应该可以运行。如果你在 blinky 示例中没有看到闪烁的LED,请确保代码正在翻转你开发板LED所在的引脚。

如果你尝试 cargo run --release 运行示例,并且看到以下输出:

0.000000 INFO Hello World!
└─ <invalid location: defmt frame-index: 14>
0.000000 DEBUG rcc: Clocks { sys: Hertz(80000000), apb1: Hertz(80000000), apb1_tim: Hertz(80000000), apb2: Hertz(80000000), apb2_tim: Hertz(80000000), ahb1: Hertz(80000000), ahb2: Hertz(80000000), ahb3: Hertz(80000000) }
└─ <invalid location: defmt frame-index: 124>
0.000061 TRACE allocating type=Interrupt mps=8 interval_ms=255, dir=In
└─ <invalid location: defmt frame-index: 68>
0.000091 TRACE   index=1
└─ <invalid location: defmt frame-index: 72>

为了解决 frame-index 错误,请在你的 Cargo.toml 中添加以下内容:

[profile.release]
debug = 2

如果你遇到一个很长的,包含类似以下内容的错误消息:

error[E0463]: can't find crate for `std`
  |
  = note: the `thumbv6m-none-eabi` target may not support the standard library
  = note: `std` is required by `stable_deref_trait` because it does not declare `#![no_std]`

检查你是否错误地运行了 cargo add probe-rs (这会将其作为依赖项添加)而不是 正确地安装 probe-rs

如果你使用的是 Raspberry Pi Pico-W,请确保你运行的是 cargo run --bin wifi_blinky --release ,而不是普通的 blinky 示例。Pico-W 的板载LED连接到WiFi芯片,需要在LED可以闪烁之前进行初始化。

如果你使用的是rp2040调试器(比如 pico probe)并且在运行 probe-rs info 之后出现问题,重新连接调试器让它重新上电。已知运行 probe-rs info 会使pico调试器进入不可用状态

如果你仍然遇到问题,请查看常见问题解答, 或者在Embassy Chat Room寻求帮助。

接下来干啥?

恭喜,你已经成功运行了你的第一个 Embassy 应用程序!下面是一些建议,帮助你继续前进: