pwm.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //! Testing PWM output
  2. #![deny(unsafe_code)]
  3. #![deny(warnings)]
  4. #![no_main]
  5. #![no_std]
  6. extern crate panic_halt;
  7. use cortex_m::asm;
  8. use stm32f1xx_hal::{
  9. prelude::*,
  10. pac,
  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 gpioa = p.GPIOA.split(&mut rcc.apb2);
  21. let mut gpiob = p.GPIOB.split(&mut rcc.apb2);
  22. // TIM2
  23. // let c1 = gpioa.pa0.into_alternate_push_pull(&mut gpioa.crl);
  24. // let c2 = gpioa.pa1.into_alternate_push_pull(&mut gpioa.crl);
  25. // let c3 = gpioa.pa2.into_alternate_push_pull(&mut gpioa.crl);
  26. // let c4 = gpioa.pa3.into_alternate_push_pull(&mut gpioa.crl);
  27. // TIM3
  28. // let c1 = gpioa.pa6.into_alternate_push_pull(&mut gpioa.crl);
  29. // let c2 = gpioa.pa7.into_alternate_push_pull(&mut gpioa.crl);
  30. // let c3 = gpiob.pb0.into_alternate_push_pull(&mut gpiob.crl);
  31. // let c4 = gpiob.pb1.into_alternate_push_pull(&mut gpiob.crl);
  32. // TIM4
  33. let c1 = gpiob.pb6.into_alternate_push_pull(&mut gpiob.crl);
  34. let c2 = gpiob.pb7.into_alternate_push_pull(&mut gpiob.crl);
  35. let c3 = gpiob.pb8.into_alternate_push_pull(&mut gpiob.crh);
  36. let c4 = gpiob.pb9.into_alternate_push_pull(&mut gpiob.crh);
  37. let mut pwm = p
  38. .TIM4
  39. .pwm(
  40. (c1, c2, c3, c4),
  41. &mut afio.mapr,
  42. 1.khz(),
  43. clocks,
  44. &mut rcc.apb1,
  45. )
  46. .3;
  47. let max = pwm.get_max_duty();
  48. pwm.enable();
  49. // full
  50. pwm.set_duty(max);
  51. asm::bkpt();
  52. // dim
  53. pwm.set_duty(max / 4);
  54. asm::bkpt();
  55. // zero
  56. pwm.set_duty(0);
  57. asm::bkpt();
  58. loop {}
  59. }