5个版本

0.2.0 2023年5月27日
0.1.3 2023年5月11日
0.1.2 2023年5月10日
0.1.1 2023年5月8日
0.1.0 2023年5月7日

#1769 in 嵌入式开发

MIT/Apache

41KB
729

pybadge-high 许可证:MIT OR Apache-2.0 pybadge-high on crates.io pybadge-high on docs.rs 源代码仓库 Rust版本:none

此crate的目标是为pybade和edgebadge提供高级硬件抽象层。它应该允许对Rust和嵌入式硬件了解不多的人编程上述板卡。如果你试图进行硬件接近或使用额外扩展,你可能需要使用更接近硬件的edgebadgeatsamd_hal crate。

设置

安装
  • 安装rustup。建议使用操作系统的包管理器。另一种方法是从此处安装:https://rust-lang.net.cn/tools/install
  • 安装rust thumbv7em-none-eabihf目标。(微控制器的架构)
rustup target install thumbv7em-none-eabihf
  • 可选:安装nightly工具链以获得更好的文档(仅当您自己构建文档时才相关)。
rustup toolchain install nightly --target thumbv7em-none-eabihf
创建您的项目
  • 创建一个新的Rust项目。
cargo new my-app
  • 添加一个.cargo/config.toml文件,内容如下,以定义目标架构和烧录器
[target.thumbv7em-none-eabihf]
runner = "hf2 elf"
#runner = 'probe-run --chip ATSAMD51J19A'

[build]
target = "thumbv7em-none-eabihf"
rustflags = [

  # This is needed if your flash or ram addresses are not aligned to 0x10000 in memory.x
  # See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
  "-C", "link-arg=--nmagic",

  "-C", "link-arg=-Tlink.x",
]
  • 将此crate添加为依赖项
cargo add pybadge-high
  • 可选:将此添加到您的cargo.toml中以提高优化效果
[profile.release]
codegen-units = 1 # better optimizations
debug = true # symbols are nice and they don't increase the size on Flash
lto = true # better optimizations
  • 调整您的main.rs

您需要在您的 main.rs 文件中进行一些更改。首先,您必须通过添加 #![no_std] 来禁用 rust 标准库,因为 PyBadge 不支持它。这也意味着您不能再使用默认的 main 函数,而必须使用 #![no_main] 来禁用它。但由于我们仍然需要一个主函数来进入代码,我们需要定义自己的主函数 #[entry]。这个主函数永远不会返回 (!)。否则,PyBadge 在程序完成后会执行一些随机操作。因此,我们需要一个无限循环。要访问 PyBadge 的外设,如显示屏、按钮、LED 等,您可以调用 PyBadge::take()。此函数在运行时只能调用一次,否则将返回错误。

#![no_std]
#![no_main]

use pybadge_high::{prelude::*, PyBadge};

#[entry]
fn main() -> ! {
	let mut pybadge = PyBadge::take().unwrap();
	loop {}
}

当程序崩溃时,板子后面的红色 LED 开始闪烁。如果启用 bluescreen(默认)功能,则显示屏将显示错误位置。如果启用 beep_panic 功能,PyBadge 也会哔哔声 3 秒。

固件刷写

要刷写您的程序,通过按两次复位按钮将设备置于引导加载程序模式。之后执行

cargo run --release

在刷写后,按下 PyBadge 的复位按钮之前,显示屏将无法工作。

功能标志

此包将功能功能分割为多个功能标志。有关功能的信息,请参阅 Rust 书籍。仅启用所需的特性有助于保持二进制文件大小较小并减少所需依赖项的数量。

以下特性可用

  • beep_panic — 当 Rust 崩溃时发出 3 秒的哔哔声

  • bluescreen (默认启用) — 当 Rust 崩溃时显示带有错误位置的蓝屏

  • bluescreen-message-nightly — 当 Rust 崩溃时在蓝屏上显示错误消息。

    此功能依赖于 Rust Nightly 功能并需要 Nightly 工具链。当使用稳定版编译时,它没有任何效果。因为它使用 Nightly 功能,它可能在未来的 Rust 版本中中断。

  • neopixel — 支持屏幕下的 Neopixel

  • usb — 支持通过 USB 进行串行通信

  • pwm_sound — 支持单频声音

  • time (默认启用) — 支持时间测量

依赖项

~11–19MB
~261K SLoC