快速开始
获取一个已有示例代码的开发板
Embassy 支持许多系列的MCU,但最快的入门方式是使用已有示例代码的开发板。
以下列表并非详尽无遗。如果你的开发板不在此列,请查看 examples folder 是否有针对它编写的示例代码。
运行示例
首先,你需要克隆 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 应用程序!下面是一些建议,帮助你继续前进:
-
阅读更多关于 执行器(Executor) 的内容.
-
阅读更多关于 硬件抽象层(HAL) 的内容。
-
开始 编写你的应用程序。
-
学习如何 通过改编示例来开始一个新项目.