From 209b914392feb981ce7d79e55be74478ae40eb9a Mon Sep 17 00:00:00 2001 From: benstrb Date: Fri, 3 Apr 2026 19:34:41 +0200 Subject: [PATCH] blinking and pushing --- Cargo.lock | 13 ++++++-- Cargo.toml | 1 + openocd.cfg | 0 openocd.gdb | 0 src/main.rs | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 100 insertions(+), 5 deletions(-) mode change 100644 => 100755 openocd.cfg mode change 100644 => 100755 openocd.gdb diff --git a/Cargo.lock b/Cargo.lock index 82dd97c..a68b989 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ac3d0c0a542d0ab5521211f873f62706a7136df415676f676d347e5a41dd80" dependencies = [ "bitflags", - "embedded-hal", + "embedded-hal 0.2.7", "nb 1.1.0", "vcell", ] @@ -71,7 +71,7 @@ dependencies = [ "bare-metal 0.2.5", "bitfield", "critical-section", - "embedded-hal", + "embedded-hal 0.2.7", "volatile-register", ] @@ -154,6 +154,12 @@ dependencies = [ "void", ] +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + [[package]] name = "embedded-time" version = "0.12.1" @@ -217,6 +223,7 @@ version = "0.1.0" dependencies = [ "cortex-m", "cortex-m-rt", + "embedded-hal 1.0.0", "panic-halt", "stm32f3xx-hal", ] @@ -393,7 +400,7 @@ dependencies = [ "cortex-m-rt", "critical-section", "embedded-dma", - "embedded-hal", + "embedded-hal 0.2.7", "embedded-time", "enumset", "nb 1.1.0", diff --git a/Cargo.toml b/Cargo.toml index f66b0af..b30efb0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ version = "0.1.0" [dependencies] cortex-m = {version = "0.7.7", features = ["critical-section-single-core"]} cortex-m-rt = "0.7.5" +embedded-hal = "1.0.0" panic-halt = "1.0.0" [dependencies.stm32f3xx-hal] diff --git a/openocd.cfg b/openocd.cfg old mode 100644 new mode 100755 diff --git a/openocd.gdb b/openocd.gdb old mode 100644 new mode 100755 diff --git a/src/main.rs b/src/main.rs index c847169..d06392c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,96 @@ #![no_std] #![no_main] -use core::ptr::write_volatile; + +extern crate panic_halt; use cortex_m_rt::entry; -use panic_halt as _; +use hal::prelude::*; +use stm32f3xx_hal as hal; #[entry] fn main() -> ! { + let sp = hal::pac::Peripherals::take().unwrap(); + let mut core_periphrals = hal::pac::CorePeripherals::take().unwrap(); + + let mut rcc = sp.RCC.constrain(); + let mut flash = sp.FLASH.constrain(); + let clocks = rcc.cfgr.freeze(&mut flash.acr); + + let mut gpioa = sp.GPIOA.split(&mut rcc.ahb); + let mut led = gpioa + .pa5 + .into_push_pull_output(&mut gpioa.moder, &mut gpioa.otyper); + + let mut gpioc = sp.GPIOC.split(&mut rcc.ahb); + let button = gpioc.pc13.into_input(&mut gpioc.moder); + + let reload = clocks.sysclk().0 / 8; + + hal::pac::SYST::set_reload(&mut core_periphrals.SYST, reload - 1); + hal::pac::SYST::clear_current(&mut core_periphrals.SYST); + hal::pac::SYST::enable_counter(&mut core_periphrals.SYST); + + let mut last_led_state = false; + let mut last_button_state = false; + + //led.set_high().unwrap(); + led.set_low().unwrap(); + + loop { + let mut led_state = last_led_state; + + let button_state = if button.is_low().unwrap() { + led_state = true; + core_periphrals.SYST.clear_current(); + true + } else { + false + }; + + if hal::pac::SYST::has_wrapped(&mut core_periphrals.SYST) { + led_state = !last_led_state; + } + + if led_state != last_led_state || button_state != last_button_state { + if button_state != last_button_state { + if button_state { + led.set_high(); + } else { + led.set_low(); + } + } else { + if led_state { + led.set_high(); + } else { + led.set_low(); + } + } + } + + last_button_state = button_state; + last_led_state = led_state; + + /* + let mut button_state = last_button_state; + let mut led_state = last_led_state; + + if button.is_low().unwrap() { + button_state = true; + led_state = true; + } else { + button_state = false; + led_state = false; + } + + if last_led_state != led_state && button_state != last_button_state { + if led_state { + led.set_high(); + } else { + led.set_low(); + } + } + + last_button_state = button_state; + last_led_state = led_state; + */ + } }