From 3cdd8c1aebaebd7464fa3477ce63525a101dcf72 Mon Sep 17 00:00:00 2001 From: chemicstry Date: Thu, 23 Jun 2022 02:27:39 +0300 Subject: Fix PWM for advanced timers --- examples/stm32f4/src/bin/pwm.rs | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 examples/stm32f4/src/bin/pwm.rs (limited to 'examples') diff --git a/examples/stm32f4/src/bin/pwm.rs b/examples/stm32f4/src/bin/pwm.rs new file mode 100644 index 000000000..4073f5385 --- /dev/null +++ b/examples/stm32f4/src/bin/pwm.rs @@ -0,0 +1,42 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] + +use defmt::*; +use embassy::executor::Spawner; +use embassy::time::{Duration, Timer}; +use embassy_stm32::pwm::simple_pwm::SimplePwm; +use embassy_stm32::pwm::Channel; +use embassy_stm32::time::{Hertz, U32Ext}; +use embassy_stm32::{Config, Peripherals}; +use {defmt_rtt as _, panic_probe as _}; + +fn config() -> Config { + let mut config = Config::default(); + config.rcc.hse = Some(Hertz(8_000_000)); + config.rcc.sys_ck = Some(Hertz(84_000_000)); + config +} + +#[embassy::main(config = "config()")] +async fn main(_spawner: Spawner, p: Peripherals) { + info!("Hello World!"); + + let mut pwm = SimplePwm::new_1ch(p.TIM1, p.PE9, 10000.hz()); + let max = pwm.get_max_duty(); + pwm.enable(Channel::Ch1); + + info!("PWM initialized"); + info!("PWM max duty {}", max); + + loop { + pwm.set_duty(Channel::Ch1, 0); + Timer::after(Duration::from_millis(300)).await; + pwm.set_duty(Channel::Ch1, max / 4); + Timer::after(Duration::from_millis(300)).await; + pwm.set_duty(Channel::Ch1, max / 2); + Timer::after(Duration::from_millis(300)).await; + pwm.set_duty(Channel::Ch1, max - 1); + Timer::after(Duration::from_millis(300)).await; + } +} -- cgit