blinking and pushing

This commit is contained in:
benstrb 2026-04-03 19:34:41 +02:00
parent c7a5f98e54
commit 209b914392
5 changed files with 100 additions and 5 deletions

13
Cargo.lock generated
View file

@ -42,7 +42,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40ac3d0c0a542d0ab5521211f873f62706a7136df415676f676d347e5a41dd80" checksum = "40ac3d0c0a542d0ab5521211f873f62706a7136df415676f676d347e5a41dd80"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"embedded-hal", "embedded-hal 0.2.7",
"nb 1.1.0", "nb 1.1.0",
"vcell", "vcell",
] ]
@ -71,7 +71,7 @@ dependencies = [
"bare-metal 0.2.5", "bare-metal 0.2.5",
"bitfield", "bitfield",
"critical-section", "critical-section",
"embedded-hal", "embedded-hal 0.2.7",
"volatile-register", "volatile-register",
] ]
@ -154,6 +154,12 @@ dependencies = [
"void", "void",
] ]
[[package]]
name = "embedded-hal"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89"
[[package]] [[package]]
name = "embedded-time" name = "embedded-time"
version = "0.12.1" version = "0.12.1"
@ -217,6 +223,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"cortex-m", "cortex-m",
"cortex-m-rt", "cortex-m-rt",
"embedded-hal 1.0.0",
"panic-halt", "panic-halt",
"stm32f3xx-hal", "stm32f3xx-hal",
] ]
@ -393,7 +400,7 @@ dependencies = [
"cortex-m-rt", "cortex-m-rt",
"critical-section", "critical-section",
"embedded-dma", "embedded-dma",
"embedded-hal", "embedded-hal 0.2.7",
"embedded-time", "embedded-time",
"enumset", "enumset",
"nb 1.1.0", "nb 1.1.0",

View file

@ -8,6 +8,7 @@ version = "0.1.0"
[dependencies] [dependencies]
cortex-m = {version = "0.7.7", features = ["critical-section-single-core"]} cortex-m = {version = "0.7.7", features = ["critical-section-single-core"]}
cortex-m-rt = "0.7.5" cortex-m-rt = "0.7.5"
embedded-hal = "1.0.0"
panic-halt = "1.0.0" panic-halt = "1.0.0"
[dependencies.stm32f3xx-hal] [dependencies.stm32f3xx-hal]

0
openocd.cfg Normal file → Executable file
View file

0
openocd.gdb Normal file → Executable file
View file

View file

@ -1,9 +1,96 @@
#![no_std] #![no_std]
#![no_main] #![no_main]
use core::ptr::write_volatile;
extern crate panic_halt;
use cortex_m_rt::entry; use cortex_m_rt::entry;
use panic_halt as _; use hal::prelude::*;
use stm32f3xx_hal as hal;
#[entry] #[entry]
fn main() -> ! { 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;
*/
}
} }