#hal #cortex-m #arm #micro-controller #gd32

无std gd32f1x0-hal

GD32F1x0系列微控制器的HAL

14个版本 (9个重大更新)

0.10.1 2024年5月16日
0.10.0 2024年3月26日
0.9.1 2024年1月29日
0.7.1 2022年6月23日
0.5.0 2021年7月4日

#80 in 嵌入式开发

Download history 142/week @ 2024-05-14 16/week @ 2024-05-21 1/week @ 2024-06-04 6/week @ 2024-06-11 1/week @ 2024-07-16 64/week @ 2024-07-23

每月 65 次下载

MIT/Apache

275KB
6.5K SLoC

gd32f1x0-hal

HAL for the GD32F1x0 family of microcontrollers

Continuous integration crates.io Released API docs

快速入门指南

嵌入式Rust开发需要比普通开发更多的设置。

您还需要一个调试器,例如用于编程和调试的 ST-Link V3 mini。 (市面上有各种各样的STLink调试器,它们都应该可以使用此处提供的说明正常工作,其他JTAG或SWD调试器也可以使用,但可能需要不同的软件或配置)。

安装软件

要编程您的微控制器,您需要安装

  • openocdstlink
  • gdb-multiarch (在某些平台上,您可能需要使用 gdb-arm-none-eabi 代替,确保更新 .cargo/config 以反映此更改)

最后,您需要为Rust编译器安装arm目标支持。要这样做,请运行

rustup target install thumbv7m-none-eabi

设置您的项目

像往常一样使用 cargo init 创建一个新的Rust项目。嵌入式开发的hello world通常是闪烁一个LED,相关的代码可以在 examples/blinky.rs 中找到。将此文件复制到您的项目的 main.rs

您还需要在 Cargo.toml 中添加一些依赖项

[dependencies]
embedded-hal = "1.0.0"
nb = "1.1.0"
cortex-m = { version = "0.7.7", features = ["critical-section-single-core"] }
cortex-m-rt = "0.7.3"
# Panic behaviour, see https://crates.io/keywords/panic-impl for alternatives
panic-halt = "0.2.0"
gd32f1x0-hal = { version = "0.10.1", features = ["rt", "gd32f130x8"] }

如果您现在构建项目,您应该得到一个单一的错误: error: language item required, but not found: eh_personality。这个没有帮助的错误信息可以通过为目标编译来修复。

我们还需要告诉Rust如何链接我们的可执行文件,以及如何在内存中布局结果。为此,请将 .cargo/configmemory.x 从 gd32f1x0-hal 仓库复制到您的项目中。

cargo build

如果一切顺利,您的项目应该可以构建成功,没有错误。

编程微控制器

现在是时候在实际硬件上运行代码了。为此,将您的调试器连接到板子上,并使用以下命令启动 openocd

openocd -f interface/stlink-v3.cfg -f target/stm32f1x.cfg

如果您不使用 stlink V3,请相应地更改接口。更多信息,请参阅 embeddonomicon

如果一切顺利,它应该检测到您的微控制器,并显示 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints。请将其保持在后台运行。

我们将使用 gdb 将编译后的二进制文件上传到微控制器并进行调试。由于您之前添加的 .cargo/config,Cargo 将自动启动 gdb。还需要告诉 gdb 连接到 openocd,这可以通过将 .gdbinit 复制到项目根目录来实现。

您可能还需要告诉 gdb 从工作目录加载 .gdbinit 是安全的。

  • Linux
    echo "set auto-load safe-path $(pwd)" >> ~/.gdbinit
    
  • Windows
    echo set auto-load safe-path %CD% >> %USERPROFILE%\.gdbinit
    

如果一切顺利,cargo 应该编译您的项目,启动 GDB,加载您的程序,并给出提示。在 GDB 提示符中输入 continue,您的程序应该开始运行,连接到 PC13 的 LED 应该开始闪烁。

进一步学习

从现在开始,您可以为项目添加更多代码,使其执行更有趣的任务。有关 crate 文档,请参阅 docs.rs/gd32f1x0-hal。还有许多 示例 可用。如果文档或示例中的某些内容不清楚,请打开一个 issue,我们将努力改进它。

选择微控制器

此 crate 支持 GD32F1x0 家族中的多个微控制器。您想为哪个特定的微控制器构建必须通过功能指定,例如 gd32f130x8

如果没有指定微控制器,crate 将无法编译。

支持的微控制器

  • gd32f130x4(例如 GD32F130F4、GD32F130G4、...)
  • gd32f130x6(例如 GD32F130F6、GD32F130G6、...)
  • gd32f130x8(例如 GD32F130F8、GD32F130G8、...)
  • gd32f150x4(例如 GD32F150G4、GD32F150K4、...)
  • gd32f150x6(例如 GD32F150G6、GD32F150K6、...)
  • gd32f150x8(例如 GD32F150G8、GD32F150K8、...)
  • gd32f170x4(例如 GD32F170T4、GD32F170C4、...)
  • gd32f170x6(例如 GD32F170T6、GD32F170C6、...)
  • gd32f170x8(例如 GD32F170T8、GD32F170C8、...)
  • gd32f190x4(例如 GD32F190T4、GD32F190C4、...)
  • gd32f190x6(例如 GD32F190T6、GD32F190C6、...)
  • gd32f190x8(例如 GD32F190T8、GD32F190C8、...)

尝试示例

您可能需要授予 cargo 从工作目录调用 gdb 的权限。

  • Linux
    echo "set auto-load safe-path $(pwd)" >> ~/.gdbinit
    
  • Windows
    echo set auto-load safe-path %CD% >> %USERPROFILE%\.gdbinit
    

编译、加载并启动硬件调试器。

$ rustup target add thumbv7m-none-eabi

# on another terminal
$ openocd -f interface/$INTERFACE.cfg -f target/stm32f1x.cfg

# flash and debug the "Hello, world" example. Change gd32f130x8 to match your hardware
$ cargo run --features gd32f130x8 --example hello

$INTERFACE 应根据您的调试硬件进行设置。如果您使用的是 stlink V2,请使用 stlink-v2.cfg。更多信息,请参阅embeddonomicon

作为依赖项使用

当将此crate作为项目依赖项时,微控制器可以指定为 Cargo.toml 定义的一部分。

gd32f1x0-hal = { version = "0.10.1", features = ["gd32f130x8", "rt"] }

文档

文档可在docs.rs找到。

免责声明

这不是一个官方支持的Google产品。

许可证

许可协议为以下两种之一

任选其一。

贡献

除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应双许可,如上所述,不附加任何额外条款或条件。

有关更多信息,请参阅贡献指南

依赖项

~16MB
~445K SLoC