pwm_input.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //! Testing PWM input
  2. #![deny(unsafe_code)]
  3. #![no_main]
  4. #![no_std]
  5. use panic_halt as _;
  6. use stm32f1xx_hal::{
  7. prelude::*,
  8. pac,
  9. pwm_input::*,
  10. timer::Timer,
  11. };
  12. use cortex_m_rt::entry;
  13. #[entry]
  14. fn main() -> ! {
  15. let p = pac::Peripherals::take().unwrap();
  16. let mut flash = p.FLASH.constrain();
  17. let mut rcc = p.RCC.constrain();
  18. let clocks = rcc.cfgr.freeze(&mut flash.acr);
  19. let mut afio = p.AFIO.constrain(&mut rcc.apb2);
  20. let mut dbg = p.DBGMCU;
  21. let gpioa = p.GPIOA.split(&mut rcc.apb2);
  22. let gpiob = p.GPIOB.split(&mut rcc.apb2);
  23. let (_pa15, _pb3, pb4) = afio.mapr.disable_jtag(gpioa.pa15, gpiob.pb3, gpiob.pb4);
  24. let pb5 = gpiob.pb5;
  25. let pwm_input = Timer::tim3(p.TIM3, &clocks, &mut rcc.apb1)
  26. .pwm_input(
  27. (pb4, pb5),
  28. &mut afio.mapr,
  29. &mut dbg,
  30. Configuration::Frequency(10.khz()),
  31. );
  32. loop {
  33. let _freq = pwm_input
  34. .read_frequency(ReadMode::Instant, &clocks)
  35. .unwrap();
  36. let _duty_cycle = pwm_input.read_duty(ReadMode::Instant).unwrap();
  37. }
  38. }