From 24ad6314166a254580dffa1500a6206f491f25b1 Mon Sep 17 00:00:00 2001 From: Priec Date: Sun, 19 Oct 2025 11:15:06 +0200 Subject: [PATCH] start of a hal crate --- .gitignore | 1 + Cargo.lock | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 13 ++++ flake.nix | 66 ++++++++++++++++++++ memory.x | 13 ++++ src/lib.rs | 0 6 files changed, 271 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 flake.nix create mode 100644 memory.x create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..982ed80 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,178 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield", + "critical-section", + "embedded-hal 0.2.7", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "stm32u575-hal" +version = "0.1.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "embedded-hal 1.0.0", + "vcell", +] + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..3aa1b62 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "stm32u575-hal" +version = "0.1.0" +edition = "2024" +license = "MIT OR Apache-2.0" +description = "Hardware Abstraction Layer for STM32U575 microcontrollers" + +[dependencies] +cortex-m = { version = "0.7", features = ["critical-section-single-core"] } +cortex-m-rt = "0.7" +embedded-hal = "1.0.0" +vcell = "0.1.3" + diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2183f5c --- /dev/null +++ b/flake.nix @@ -0,0 +1,66 @@ +{ + description = "STM32U575ZI-Q Rust Embedded Development Environment"; + + inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; }; + + outputs = { self, nixpkgs }: let + system = "x86_64-linux"; + pkgs = import nixpkgs { inherit system; }; + in { + devShells.${system}.default = pkgs.mkShell { + packages = with pkgs; [ + # Base toolchain + rustup + llvm + gcc + gnumake + cmake + pkg-config + python3 + git + curl + wget + unzip + + # ARM embedded cross toolchain + gcc-arm-embedded + + # Flashing / Debug + openocd + probe-rs + cargo-binutils + cargo-generate + flip-link + ]; + + shellHook = '' + echo ">>> STM32U575ZI-Q Rust (HAL + PAC) DevShell" + echo "---------------------------------------------" + + # Set up Rust target + rustup target add thumbv7em-none-eabihf 2>/dev/null || true + + # Ensure probe-rs binary is in PATH + if ! command -v probe-rs >/dev/null; then + echo "⚠️ probe-rs not found! (check nix installation)" + fi + + export RUST_TARGET=thumbv7em-none-eabihf + export CARGO_TARGET_DIR=target + export PATH=$PATH:${pkgs.gcc-arm-embedded}/bin + + echo "🧩 Target: $RUST_TARGET" + echo "💡 Examples:" + echo " 1️⃣ cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart --name stm32u5-blinky" + echo " 2️⃣ cd stm32u5-blinky && cargo build --release --target thumbv7em-none-eabihf" + echo " 3️⃣ probe-rs run --chip STM32U575ZITxQ target/thumbv7em-none-eabihf/release/stm32u5-blinky" + echo "" + echo "🧠 TIP: Add stm32u5xx-hal to Cargo.toml to access register-level HAL API." + echo "---------------------------------------------" + + rustc --version + arm-none-eabi-gcc --version | head -n1 + ''; + }; + }; +} diff --git a/memory.x b/memory.x new file mode 100644 index 0000000..89f96e1 --- /dev/null +++ b/memory.x @@ -0,0 +1,13 @@ +/* memory.x - STM32U575ZITxQ memory layout */ + +/* Flash: 2 MB starting at 0x08000000 */ +/* SRAM1 + SRAM2 + SRAM3 total 786 KB starting at 0x20000000 */ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 786K +} + +/* provide stack start symbol (end of RAM) */ +_stack_start = ORIGIN(RAM) + LENGTH(RAM); diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e69de29