#![no_main]
#![no_std]
use cortex_m_rt::{entry, exception};
use stm32f1::stm32f103;
use cortex_m::peripheral::syst;
use defmt_rtt as _; use panic_probe as _;
const SYSCLK_FREQ_HZ : u32 = 8_000_000;
type Microclock = cortex_m_microclock::CYCCNTClock<SYSCLK_FREQ_HZ>;
type Duration = cortex_m_microclock::Duration::<SYSCLK_FREQ_HZ>;
#[entry]
fn main() -> ! {
let cp = cortex_m::Peripherals::take().unwrap();
let mut p = stm32f103::Peripherals::take().unwrap();
let rcc = &mut p.RCC;
rcc.cr.write(|w| w
.hseon().set_bit()
);
while !rcc.cr.read().hserdy().bit() { }
let mut systick = cp.SYST;
systick.set_clock_source(syst::SystClkSource::Core);
systick.set_reload(999);
systick.clear_current();
systick.enable_counter();
let mut dcb = cp.DCB;
let dwt = cp.DWT;
Microclock::init(&mut dcb, dwt);
systick.enable_interrupt();
let duration = Duration::secs(1);
loop {
let init_inst = Microclock::now();
Microclock::delay(duration);
let elapsed_time = Microclock::now() - init_inst;
defmt::info!("time_us {}", elapsed_time.to_micros());
}
}
#[exception]
fn SysTick(){
Microclock::update();
}