罗盘
我们将从 I2C 罗盘读取方向,并将读数记录到串行端口。如有时间,请尝试通过 LED 灯亮起的方式,或者使用按钮来显示方向。
提示:
- 请参阅
lsm303agr
和microbit-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:
#![no_main] #![no_std] extern crate panic_halt as _; use core::fmt::Write; use cortex_m_rt::entry; use microbit::{hal::uarte::{Baudrate, Parity, Uarte}, Board}; #[entry] fn main() -> ! { let board = Board::take().unwrap(); // Configure serial port. let mut serial = Uarte::new( board.UARTE0, board.uart.into(), Parity::EXCLUDED, Baudrate::BAUD115200, ); // Use the system timer as a delay provider. let mut delay = Delay::new(board.SYST); // Set up the I2C controller and Inertial Measurement Unit. // TODO writeln!(serial, "Ready.").unwrap(); loop { // Read compass data and log it to the serial port. // TODO } }
Cargo.toml(无需对此进行更改):
[workspace]
[package]
name = "compass"
version = "0.1.0"
edition = "2021"
publish = false
[dependencies]
cortex-m-rt = "0.7.3"
embedded-hal = "1.0.0"
lsm303agr = "0.3.0"
microbit-v2 = "0.13.0"
panic-halt = "0.2.0"
Embed.toml(无需对此进行更改):
[default.general]
chip = "nrf52833_xxAA"
[debug.gdb]
enabled = true
[debug.reset]
halt_afterwards = true
.cargo/config.toml(无需对此进行更改):
[build]
target = "thumbv7em-none-eabihf" # Cortex-M4F
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
rustflags = ["-C", "link-arg=-Tlink.x"]
运行以下命令查看 Linux 上的串行输出:
picocom --baud 115200 --imap lfcrlf /dev/ttyACM0
或者在 Mac OS 上,如下所示(设备名称可能略有不同):
picocom --baud 115200 --imap lfcrlf /dev/tty.usbmodem14502
使用 Ctrl+A Ctrl+Q 退出 picocom。