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 嵌入式开发
每月 65 次下载
275KB
6.5K SLoC
gd32f1x0-hal
HAL for the GD32F1x0 family of microcontrollers
快速入门指南
嵌入式Rust开发需要比普通开发更多的设置。
您还需要一个调试器,例如用于编程和调试的 ST-Link V3 mini。 (市面上有各种各样的STLink调试器,它们都应该可以使用此处提供的说明正常工作,其他JTAG或SWD调试器也可以使用,但可能需要不同的软件或配置)。
安装软件
要编程您的微控制器,您需要安装
最后,您需要为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/config 和 memory.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 License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应双许可,如上所述,不附加任何额外条款或条件。
有关更多信息,请参阅贡献指南。
依赖项
~16MB
~445K SLoC