delay.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //! "Blinky" using delays instead of a timer
  2. #![deny(unsafe_code)]
  3. #![deny(warnings)]
  4. #![no_main]
  5. #![no_std]
  6. extern crate cortex_m;
  7. extern crate cortex_m_rt as rt;
  8. extern crate panic_semihosting;
  9. extern crate stm32f1xx_hal as hal;
  10. use hal::delay::Delay;
  11. use hal::prelude::*;
  12. use hal::stm32f103xx;
  13. use rt::{entry, exception, ExceptionFrame};
  14. #[entry]
  15. fn main() -> ! {
  16. let dp = stm32f103xx::Peripherals::take().unwrap();
  17. let cp = cortex_m::Peripherals::take().unwrap();
  18. let mut flash = dp.FLASH.constrain();
  19. let mut rcc = dp.RCC.constrain();
  20. let clocks = rcc.cfgr.freeze(&mut flash.acr);
  21. let mut gpioc = dp.GPIOC.split(&mut rcc.apb2);
  22. let mut led = gpioc.pc13.into_push_pull_output(&mut gpioc.crh);
  23. let mut delay = Delay::new(cp.SYST, clocks);
  24. loop {
  25. led.set_high();
  26. delay.delay_ms(1_000_u16);
  27. led.set_low();
  28. delay.delay_ms(1_000_u16);
  29. }
  30. }
  31. #[exception]
  32. fn HardFault(ef: &ExceptionFrame) -> ! {
  33. panic!("{:#?}", ef);
  34. }
  35. #[exception]
  36. fn DefaultHandler(irqn: i16) {
  37. panic!("Unhandled exception (IRQn = {})", irqn);
  38. }