#![no_main] #![no_std] use panic_halt as _; use cortex_m_rt::entry; use stm32f4xx_hal::{ watchdog::IndependentWatchdog, rcc::RccExt, pac::{CorePeripherals, Peripherals}, time::MegaHertz, prelude::_stm32f4xx_hal_gpio_GpioExt, }; use log::info; use fugit::ExtU32; mod device; use device::log::init_log; // use setup::init_gpio::Pins; use device::timer; #[cfg(not(feature = "semihosting"))] const WATCHDOG_PERIOD: u32 = 1000; #[cfg(feature = "semihosting")] const WATCHDOG_PERIOD: u32 = 30000; #[entry] fn main() -> ! { init_log(); info!("Kirdy init"); let mut core_perif = CorePeripherals::take().unwrap(); core_perif.SCB.enable_icache(); core_perif.SCB.enable_dcache(&mut core_perif.CPUID); let perif = Peripherals::take().unwrap(); let clocks = perif.RCC.constrain() .cfgr .use_hse(MegaHertz::from_raw(8).convert()) .sysclk(MegaHertz::from_raw(168).convert()) .hclk(MegaHertz::from_raw(168).convert()) .pclk1(MegaHertz::from_raw(32).convert()) .pclk2(MegaHertz::from_raw(64).convert()) .freeze(); let mut wd = IndependentWatchdog::new(perif.IWDG); wd.start(WATCHDOG_PERIOD.millis()); wd.feed(); timer::setup(core_perif.SYST, clocks); let gpioc = perif.GPIOC.split(); let mut pc9 = gpioc.pc9.into_push_pull_output(); loop { pc9.toggle(); timer::sleep(1); wd.feed(); } }