#![deny(unsafe_code)] #![deny(warnings)] #![no_main] #![no_std] use embassy_stm32::gpio::{Level, Output, Speed}; use rtic::app; use rtic_monotonics::systick::prelude::*; use {defmt_rtt as _, panic_probe as _}; systick_monotonic!(Mono, 1_000); pub mod pac { pub use embassy_stm32::pac::Interrupt as interrupt; pub use embassy_stm32::pac::*; } #[app(device = pac, peripherals = false, dispatchers = [SPI1])] mod app { use super::*; #[shared] struct Shared {} #[local] struct Local {} #[init] fn init(cx: init::Context) -> (Shared, Local) { // Initialize the systick interrupt & obtain the token to prove that we did Mono::start(cx.core.SYST, 25_000_000); let p = embassy_stm32::init(Default::default()); defmt::info!("Hello World!"); let mut led = Output::new(p.PC6, Level::High, Speed::Low); defmt::info!("high"); led.set_high(); // Schedule the blinking task blink::spawn(led).ok(); (Shared {}, Local {}) } #[task()] async fn blink(_cx: blink::Context, mut led: Output<'static, embassy_stm32::peripherals::PC6>) { let mut state = true; loop { defmt::info!("blink"); if state { led.set_high(); } else { led.set_low(); } state = !state; Mono::delay(1000.millis()).await; } } }