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 中使用

0BSD 许可证

360KB
6.5K SLoC

包含(静态库,1KB) flash-code/libflash.a

stm32l0xx-hal

Build Status

⚠️ 注意: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配置。表面上,该系列可以分组为stm32l0x1stm32l0x2stm32l0x3组。然而,一些方面,如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,您需要进行以下设置

  1. 安装Rustup

    有关详细信息,请参阅rustup.rs。您也可能能够通过您的发行版直接安装Rustup。

  2. 安装arm-none-eabi编译器工具链

    https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads

    如果您不能通过您的操作系统/发行版直接安装工具链,我们建议将预编译的二进制文件安装到'/usr/local/opt'。将bin文件夹(/bin & /arm-none-eabi/bin)添加到您的环境变量'PATH'中。

  3. 为Rust安装thumbv6m-none-eabi目标

    只需运行 rustup target add thumbv6m-none-eabi

  4. 安装 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 烧录

  1. 使用烧录脚本来烧录微控制器
    $ ./flash.sh target/thumbv6m-none-eabi/release/examples/serial
    

使用 OpenOCD 烧录

  1. 使用 openocd 烧录脚本来烧录微控制器
    $ ./openocd_flash.sh target/thumbv6m-none-eabi/release/examples/serial
    

贡献者说明

  • 将本地依赖项重置为外部 cargo 并在提交前取消注释配置

许可证

0-Clause BSD 许可证,有关详细信息,请参阅 LICENSE-0BSD.txt

依赖项

~14MB
~391K SLoC