3690af9bea
The traits there are applicable to timer use cases other than PWM. It doesn't make sense to keep them separated.
53 lines
1.4 KiB
Rust
53 lines
1.4 KiB
Rust
#![no_std]
|
|
#![no_main]
|
|
#![feature(type_alias_impl_trait)]
|
|
|
|
use defmt::*;
|
|
use embassy_executor::Spawner;
|
|
use embassy_stm32::time::khz;
|
|
use embassy_stm32::timer::complementary_pwm::{ComplementaryPwm, ComplementaryPwmPin};
|
|
use embassy_stm32::timer::simple_pwm::PwmPin;
|
|
use embassy_stm32::timer::Channel;
|
|
use embassy_time::{Duration, Timer};
|
|
use {defmt_rtt as _, panic_probe as _};
|
|
|
|
#[embassy_executor::main]
|
|
async fn main(_spawner: Spawner) {
|
|
let p = embassy_stm32::init(Default::default());
|
|
info!("Hello World!");
|
|
|
|
let ch1 = PwmPin::new_ch1(p.PE9);
|
|
let ch1n = ComplementaryPwmPin::new_ch1(p.PA7);
|
|
let mut pwm = ComplementaryPwm::new(
|
|
p.TIM1,
|
|
Some(ch1),
|
|
Some(ch1n),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
khz(10),
|
|
);
|
|
|
|
let max = pwm.get_max_duty();
|
|
pwm.set_dead_time(max / 1024);
|
|
|
|
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;
|
|
}
|
|
}
|