From e0065f8963c4161ba86b45dffc9a0f7a6224332c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20=C3=96zkan?= Date: Sat, 18 Jul 2026 14:43:59 +0300 Subject: [PATCH] boards/kakute-f7-mini-v3: simple led demo for board testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Onur Özkan --- Cargo.lock | 1 + boards/kakute-f7-mini-v3/Cargo.toml | 3 +- boards/kakute-f7-mini-v3/build.rs | 7 ++++ boards/kakute-f7-mini-v3/memory.x | 5 +++ boards/kakute-f7-mini-v3/src/main.rs | 49 +++++++++++++++++++++++----- 5 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 boards/kakute-f7-mini-v3/memory.x diff --git a/Cargo.lock b/Cargo.lock index 64fdd6a..c713af5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -104,6 +104,7 @@ name = "kaptan-kakute-f7-mini-v3" version = "0.1.0" dependencies = [ "cortex-m", + "cortex-m-rt", "kaptan-spec", "panic-halt", "rtic", diff --git a/boards/kakute-f7-mini-v3/Cargo.toml b/boards/kakute-f7-mini-v3/Cargo.toml index 1f0f0c1..eccad0a 100644 --- a/boards/kakute-f7-mini-v3/Cargo.toml +++ b/boards/kakute-f7-mini-v3/Cargo.toml @@ -11,9 +11,10 @@ firmware = [] [dependencies] cortex-m = "0.7" +cortex-m-rt = "0.7" panic-halt = "1" rtic = { version = "2.3", default-features = false, features = ["thumbv7-backend"] } -stm32f7 = { version = "0.16", default-features = false, features = ["rt", "stm32f745"] } +stm32f7 = { version = "0.16", default-features = false, features = ["rt", "stm32f722"] } [build-dependencies] kaptan-spec = { path = "../../libs/kaptan-spec", features = ["std"] } diff --git a/boards/kakute-f7-mini-v3/build.rs b/boards/kakute-f7-mini-v3/build.rs index 600bc5e..326b5b5 100644 --- a/boards/kakute-f7-mini-v3/build.rs +++ b/boards/kakute-f7-mini-v3/build.rs @@ -1,3 +1,10 @@ fn main() { kaptan_spec::validate_package(); + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=memory.x"); + println!("cargo:rustc-link-arg=-Tlink.x"); + println!( + "cargo:rustc-link-search={}", + std::env::var("CARGO_MANIFEST_DIR").expect("Cargo must set CARGO_MANIFEST_DIR") + ); } diff --git a/boards/kakute-f7-mini-v3/memory.x b/boards/kakute-f7-mini-v3/memory.x new file mode 100644 index 0000000..06bfc75 --- /dev/null +++ b/boards/kakute-f7-mini-v3/memory.x @@ -0,0 +1,5 @@ +MEMORY +{ + FLASH : ORIGIN = 0x08000000, LENGTH = 512K + RAM : ORIGIN = 0x20000000, LENGTH = 256K +} diff --git a/boards/kakute-f7-mini-v3/src/main.rs b/boards/kakute-f7-mini-v3/src/main.rs index 5c1db92..a3f5aef 100644 --- a/boards/kakute-f7-mini-v3/src/main.rs +++ b/boards/kakute-f7-mini-v3/src/main.rs @@ -1,9 +1,10 @@ #![no_std] #![no_main] +use cortex_m_rt as _; use panic_halt as _; -#[rtic::app(device = stm32f7::stm32f745, peripherals = true)] +#[rtic::app(device = stm32f7::stm32f722, peripherals = true)] mod app { #[shared] struct Shared { @@ -13,11 +14,30 @@ mod app { #[local] struct Local { // TODO + led: stm32f7::stm32f722::GPIOD, + led_output_high: bool, } #[init] - fn init(_context: init::Context) -> (Shared, Local) { - (Shared {}, Local {}) + fn init(context: init::Context) -> (Shared, Local) { + let device = context.device; + + device + .RCC + .ahb1enr() + .modify(|_, write| write.gpioden().set_bit()); + device + .GPIOD + .moder() + .modify(|_, write| write.moder2().output()); + + ( + Shared {}, + Local { + led: device.GPIOD, + led_output_high: false, + }, + ) } #[task(binds = EXTI4, priority = 15)] @@ -25,12 +45,25 @@ mod app { // TODO } - #[idle] - fn idle(_context: idle::Context) -> ! { - // TODO - + #[idle(local = [led, led_output_high])] + fn idle(context: idle::Context) -> ! { loop { - cortex_m::asm::wfi(); + if *context.local.led_output_high { + context + .local + .led + .bsrr() + .write(|write| write.br2().set_bit()); + } else { + context + .local + .led + .bsrr() + .write(|write| write.bs2().set_bit()); + } + + *context.local.led_output_high = !*context.local.led_output_high; + cortex_m::asm::delay(8_000_000); } } }