罗盘

我们将从 I2C 罗盘读取方向,并将读数记录到串行端口。如有时间,请尝试通过 LED 灯亮起的方式,或者使用按钮来显示方向。

提示:

  • 请参阅 lsm303agrmicrobit-v2 crate,以及 micro:bit 硬件 相关文档。
  • LSM303AGR 惯性测量装置与内部 I2C 总线相连接。
  • TWI 是 I2C 的别称,因此 I2C 主外围设备称为 TWIM。
  • LSM303AGR 驱动程序需要使用某种方法来实现 embedded_hal::blocking::i2c::WriteRead trait。microbit::hal::Twim 结构体便可以做到这一点。
  • 您拥有一个 microbit::Board 结构体,其中包含各种引脚和外围设备的字段。
  • 如有需要,您还可以查看 nRF52833 数据表,但对本练习来说这不是必需的。

下载 练习模板 并在 compass 目录中查找以下文件。

src/main.rs:

  1. #![no_main]
  2. #![no_std]
  3. extern crate panic_halt as _;
  4. use core::fmt::Write;
  5. use cortex_m_rt::entry;
  6. use microbit::{hal::uarte::{Baudrate, Parity, Uarte}, Board};
  7. #[entry]
  8. fn main() -> ! {
  9. let board = Board::take().unwrap();
  10. // Configure serial port.
  11. let mut serial = Uarte::new(
  12. board.UARTE0,
  13. board.uart.into(),
  14. Parity::EXCLUDED,
  15. Baudrate::BAUD115200,
  16. );
  17. // Use the system timer as a delay provider.
  18. let mut delay = Delay::new(board.SYST);
  19. // Set up the I2C controller and Inertial Measurement Unit.
  20. // TODO
  21. writeln!(serial, "Ready.").unwrap();
  22. loop {
  23. // Read compass data and log it to the serial port.
  24. // TODO
  25. }
  26. }

Cargo.toml(无需对此进行更改):

  1. [workspace]
  2. [package]
  3. name = "compass"
  4. version = "0.1.0"
  5. edition = "2021"
  6. publish = false
  7. [dependencies]
  8. cortex-m-rt = "0.7.3"
  9. embedded-hal = "1.0.0"
  10. lsm303agr = "0.3.0"
  11. microbit-v2 = "0.13.0"
  12. panic-halt = "0.2.0"

Embed.toml(无需对此进行更改):

  1. [default.general]
  2. chip = "nrf52833_xxAA"
  3. [debug.gdb]
  4. enabled = true
  5. [debug.reset]
  6. halt_afterwards = true

.cargo/config.toml(无需对此进行更改):

  1. [build]
  2. target = "thumbv7em-none-eabihf" # Cortex-M4F
  3. [target.'cfg(all(target_arch = "arm", target_os = "none"))']
  4. rustflags = ["-C", "link-arg=-Tlink.x"]

运行以下命令查看 Linux 上的串行输出:

  1. picocom --baud 115200 --imap lfcrlf /dev/ttyACM0

或者在 Mac OS 上,如下所示(设备名称可能略有不同):

  1. picocom --baud 115200 --imap lfcrlf /dev/tty.usbmodem14502

使用 Ctrl+A Ctrl+Q 退出 picocom。