summaryrefslogtreecommitdiff
path: root/examples/stm32f4/src/bin
diff options
context:
space:
mode:
authorchemicstry <chemicstry@gmail.com>2022-06-23 02:27:39 +0300
committerchemicstry <chemicstry@gmail.com>2022-06-23 02:27:39 +0300
commit3cdd8c1aebaebd7464fa3477ce63525a101dcf72 (patch)
treeb2884853b64b9790e8d5613f2c2193260eee6972 /examples/stm32f4/src/bin
parent4a6f69e2d9e1c18ff5999a6aa049c280a6b8dcc4 (diff)
downloadembassy-3cdd8c1aebaebd7464fa3477ce63525a101dcf72.zip
Fix PWM for advanced timers
Diffstat (limited to 'examples/stm32f4/src/bin')
-rw-r--r--examples/stm32f4/src/bin/pwm.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/examples/stm32f4/src/bin/pwm.rs b/examples/stm32f4/src/bin/pwm.rs
new file mode 100644
index 00000000..4073f538
--- /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;
+ }
+}