19个不稳定版本
0.10.0 | 2022年8月15日 |
---|---|
0.9.0 | 2021年12月13日 |
0.8.0 | 2021年11月4日 |
0.7.0 | 2021年3月10日 |
0.1.7 | 2019年7月5日 |
136 在 嵌入式开发
每月下载量27次
在 epd-gde021a1 中使用
360KB
6.5K SLoC
包含(静态库,1KB) flash-code/libflash.a
stm32l0xx-hal
⚠️ 注意:stm32l0xx HAL 团队正在寻找更多的维护者!您认为您能帮助审查贡献和改进代码库吗?如果是的话,请在问题#211中告诉我们!
stm32l0xx-hal是STMicro STM32L0xx系列微控制器的硬件抽象层(HAL)。
此包依赖于Adam Greig的stm32l0包以提供适当的寄存器定义并实现嵌入式-hal特质的子集。
基于Vitaly Domnikov的stm32l1xx-hal包和Daniel Egger的stm32f4xx-hal包。
用法
将stm32l0xx-hal
包添加到您的Cargo.toml
依赖项中,并确保选择适当的mcu-*
Cargo功能以享受您的MCU的完整功能集(有关更多详细信息,请参阅下一节“支持的配置”)。
例如,当使用STM32L071KBTx MCU时
[dependencies]
stm32l0xx-hal = { version = "0.10.0", features = ["mcu-STM32L071KBTx", "rt"] }
支持的配置
STM32L0系列包括不同子系列,具有不同的外设和I/O配置。表面上,该系列可以分组为stm32l0x1
,stm32l0x2
和stm32l0x3
组。然而,一些方面,如I/O引脚的替代功能映射,并不遵循这些组。
为了使HAL能够正确支持所有这些MCU,我们使用cube-parse生成一些外设映射和相应的Cargo功能。
MCU功能(mcu-*
)
您开始使用最简单的方式是使用适合的mcu-*
功能。例如,当使用STM32L071KBTx MCU时,只需在Cargo.toml
中设置mcu-STM32L071KBTx
功能。
# Cargo.toml
[dependencies]
stm32l0xx-hal = { version = "0.10.0", features = ["mcu-STM32L071KBTx", "rt"] }
如果您查看Cargo.toml
文件,您会看到mcu-STM32L071KBTx
只是["io-STM32L071", "eeprom-6144", "flash-128", "ram-20"]
的别名。
I/O功能(io-*
)
io-*
功能基于GPIO外设版本。这决定了MCU的引脚功能映射。这些功能似乎与产品类别相对应。
目前支持以下功能
io-STM32L021
(产品类别1)io-STM32L031
(产品类别2)io-STM32L051
(产品类别3)io-STM32L071
(产品类别5)
产品类别应列在您的MCU家族数据表中。`io-*
`功能本身的名称是从STM32CubeMX数据库中使用的内部名称派生出来的。它不一定与MCU的名称匹配,例如,STM32L062K8Tx
使用名为io-STM32L051
的GPIO外设版本。
内存布局:闪存(flash-*
)和RAM(ram-*
)
使用前面描述的适当的mcu-*
Cargo功能自动配置闪存和RAM大小。
如果您有一个还没有相应mcu-*
功能的MCU,或者默认配置不正确,您可以通过提供自己的来覆盖`stm32l0xx-hal`中的`memory.x`。
在您的crate根目录中,添加一个名为`memory.x`的文件,其中包含正确的配置。例如
MEMORY
{
FLASH : ORIGIN = 0x08000000, LENGTH = 64K
RAM : ORIGIN = 0x20000000, LENGTH = 8K
}
添加一个包含以下内容的`build.rs`文件
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
fn main() {
// Put the linker script somewhere the linker can find it
let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap());
File::create(out.join("memory.x"))
.unwrap()
.write_all(include_bytes!("memory.x"))
.unwrap();
println!("cargo:rustc-link-search={}", out.display());
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=memory.x");
}
最后,将`disable-linker-script`功能添加到您的`stm32l0xx-hal`依赖项中
# Cargo.toml
[dependencies]
stm32l0xx-hal = { version = "0.10.0", features = ["mcu-STM32L071K8Ux", "disable-linker-script"] }
其他Cargo功能
rtc
:启用基于rtcc
的RTC API。默认启用。
工具链设置
为了使用此HAL,您需要进行以下设置
-
安装Rustup
有关详细信息,请参阅rustup.rs。您也可能能够通过您的发行版直接安装Rustup。
-
安装
arm-none-eabi
编译器工具链https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
如果您不能通过您的操作系统/发行版直接安装工具链,我们建议将预编译的二进制文件安装到'/usr/local/opt'。将bin文件夹(/bin & /arm-none-eabi/bin)添加到您的环境变量'PATH'中。
-
为Rust安装
thumbv6m-none-eabi
目标只需运行
rustup target add thumbv6m-none-eabi
-
安装 probe-run 来运行示例。
cargo install probe-run
有关如何使用 Rust 进行 ARM / Cortex-M 编程的更多信息,请参阅 嵌入式 Rust 书籍。
构建示例
您可以通过 Cargo 构建示例。
$ cargo build --release --examples --features stm32l0x1,rt
请注意,并非所有示例都与所有 MCU 兼容。您可能需要查看示例源代码。
运行示例
此 crate 使用 probe-run 在目标硬件上运行示例。
在 STM32L053 Nucleo 上运行 blinky
示例
cargo run --example blinky --features mcu-STM32L053R8Tx -- --chip STM32L053R8Tx
使用辅助脚本来烧录
以下说明概述了如何烧录 'serial' 示例代码。这可以扩展到任何其他示例代码。
使用 ST-Flash 烧录
- 使用烧录脚本来烧录微控制器
$ ./flash.sh target/thumbv6m-none-eabi/release/examples/serial
使用 OpenOCD 烧录
- 使用 openocd 烧录脚本来烧录微控制器
$ ./openocd_flash.sh target/thumbv6m-none-eabi/release/examples/serial
贡献者说明
- 将本地依赖项重置为外部 cargo 并在提交前取消注释配置
许可证
0-Clause BSD 许可证,有关详细信息,请参阅 LICENSE-0BSD.txt
依赖项
~14MB
~391K SLoC