#![allow(clippy::empty_loop)]
#![deny(unsafe_code)]
#![no_main]
#![no_std]
use crate::hal::{
dwt::{ClockDuration, DwtExt},
pac,
prelude::*,
};
use cortex_m_rt::entry;
use panic_halt as _;
use stm32f4xx_hal as hal;
#[entry]
fn main() -> ! {
if let (Some(dp), Some(cp)) = (
pac::Peripherals::take(),
cortex_m::peripheral::Peripherals::take(),
) {
let gpiog = dp.GPIOG.split();
let mut led1 = gpiog.pg13.into_push_pull_output();
let mut led2 = gpiog.pg14.into_push_pull_output();
let rcc = dp.RCC.constrain();
let clocks = rcc.cfgr.sysclk(48.MHz()).freeze();
let dwt = cp.DWT.constrain(cp.DCB, &clocks);
let mut delay = dwt.delay();
let mut lap_times = [0u32; 10];
let mut sw = dwt.stopwatch(&mut lap_times);
loop {
led1.set_high();
led2.set_low();
delay.delay_ms(1000_u32);
sw.lap();
led1.set_low();
led2.set_high();
delay.delay_ms(900_u32);
let cd: ClockDuration = dwt.measure(|| delay.delay_ms(100_u32));
let _t: u32 = cd.as_ticks(); let _t: f32 = cd.as_secs_f32(); let _t: f64 = cd.as_secs_f64(); let _t: u64 = cd.as_nanos(); sw.lap();
{
let mut lap = 1;
while let Some(lap_time) = sw.lap_time(lap) {
let _t = lap_time.as_secs_f64();
lap += 1;
}
}
sw.reset();
}
}
loop {}
}