Skip to content
Snippets Groups Projects
Select Git revision
  • d282cfbb2db220d8e7e809e35444b3fe002149e0
  • master default protected
2 results

lib.rs

Blame
  • Forked from KLEE / klee-sys
    Source project has a limited visibility.
    device.rs 1.49 KiB
    //! Using a device crate
    //!
    //! Crates generated using [`svd2rust`] are referred to as device crates. These crates provide an
    //! API to access the peripherals of a device.
    //!
    //! [`svd2rust`]: https://crates.io/crates/svd2rust
    //!
    //! This example depends on the [`stm32f3`] crate so you'll have to
    //! uncomment it in your Cargo.toml.
    //!
    //! [`stm32f3`]: https://crates.io/crates/stm32f3
    //!
    //! ```
    //! $ edit Cargo.toml && tail $_
    //! [dependencies.stm32f3]
    //! features = ["stm32f303", "rt"]
    //! version = "0.7.1"
    //! ```
    //!
    //! You also need to set the build target to thumbv7em-none-eabihf,
    //! typically by editing `.cargo/config` and uncommenting the relevant target line.
    //!
    //! ---
    
    #![no_main]
    #![no_std]
    
    #[allow(unused_extern_crates)]
    use panic_halt as _;
    
    use cortex_m::peripheral::syst::SystClkSource;
    use cortex_m_rt::entry;
    use cortex_m_semihosting::hprint;
    use stm32f3::stm32f303::{interrupt, Interrupt, NVIC};
    
    #[entry]
    fn main() -> ! {
        let p = cortex_m::Peripherals::take().unwrap();
    
        let mut syst = p.SYST;
        let mut nvic = p.NVIC;
    
        nvic.enable(Interrupt::EXTI0);
    
        // configure the system timer to wrap around every second
        syst.set_clock_source(SystClkSource::Core);
        syst.set_reload(8_000_000); // 1s
        syst.enable_counter();
    
        loop {
            // busy wait until the timer wraps around
            while !syst.has_wrapped() {}
    
            // trigger the `EXTI0` interrupt
            NVIC::pend(Interrupt::EXTI0);
        }
    }
    
    #[interrupt]
    fn EXTI0() {
        hprint!(".").unwrap();
    }