// This example is configured for the nucleo-wl55jc board. Curret monitor should show just a few microamps when the device is in stop2 mode. #![no_std] #![no_main] use core::mem::MaybeUninit; use defmt::*; #[cfg(feature = "defmt-rtt")] use defmt_rtt as _; use embassy_executor::Spawner; use embassy_stm32::SharedData; use embassy_stm32::gpio::{Level, Output, Speed}; use embassy_time::Timer; use panic_probe as _; #[unsafe(link_section = ".shared_data")] static SHARED_DATA: MaybeUninit = MaybeUninit::uninit(); #[embassy_executor::main(executor = "embassy_stm32::Executor", entry = "cortex_m_rt::entry")] async fn async_main(_spawner: Spawner) { let mut config = embassy_stm32::Config::default(); config.rcc.ls = embassy_stm32::rcc::LsConfig::default_lsi(); config.rcc.msi = Some(embassy_stm32::rcc::MSIRange::RANGE4M); config.rcc.sys = embassy_stm32::rcc::Sysclk::MSI; #[cfg(feature = "defmt-serial")] { // disable debug during sleep to reduce power consumption since we are // using defmt-serial on LPUART1. config.enable_debug_during_sleep = false; } let p = embassy_stm32::init_primary(config, &SHARED_DATA); #[cfg(feature = "defmt-serial")] { use embassy_stm32::mode::Blocking; use embassy_stm32::usart::Uart; use static_cell::StaticCell; let config = embassy_stm32::usart::Config::default(); let uart = Uart::new_blocking(p.LPUART1, p.PA3, p.PA2, config).expect("failed to configure UART!"); static SERIAL: StaticCell> = StaticCell::new(); defmt_serial::defmt_serial(SERIAL.init(uart)); } info!("Hello World!"); let mut led = Output::new(p.PB15, Level::High, Speed::Low); loop { info!("low"); led.set_low(); Timer::after_millis(5000).await; info!("high"); led.set_high(); Timer::after_millis(5000).await; } }