aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32f334/src
diff options
context:
space:
mode:
authorxoviat <[email protected]>2023-07-01 21:47:44 -0500
committerxoviat <[email protected]>2023-07-01 21:47:44 -0500
commitaceba1c03fc45179d4e910fad254a31191cf0c44 (patch)
tree8c30b6f81122ede051af5a4d898c000cb9086579 /examples/stm32f334/src
parent8141d53d94d6bec837c334d1e313d751bbebaac2 (diff)
hrtim: fix example and auto adjust psc.
Diffstat (limited to 'examples/stm32f334/src')
-rw-r--r--examples/stm32f334/src/bin/button.rs27
-rw-r--r--examples/stm32f334/src/bin/pwm.rs65
2 files changed, 64 insertions, 28 deletions
diff --git a/examples/stm32f334/src/bin/button.rs b/examples/stm32f334/src/bin/button.rs
new file mode 100644
index 000000000..599c0f27d
--- /dev/null
+++ b/examples/stm32f334/src/bin/button.rs
@@ -0,0 +1,27 @@
1#![no_std]
2#![no_main]
3#![feature(type_alias_impl_trait)]
4
5use defmt::*;
6use embassy_executor::Spawner;
7use embassy_stm32::gpio::{Level, Output, Speed};
8use embassy_time::{Duration, Timer};
9use {defmt_rtt as _, panic_probe as _};
10
11#[embassy_executor::main]
12async fn main(_spawner: Spawner) {
13 info!("Hello World!");
14
15 let p = embassy_stm32::init(Default::default());
16
17 let mut out1 = Output::new(p.PA8, Level::Low, Speed::High);
18
19 out1.set_high();
20 Timer::after(Duration::from_millis(500)).await;
21 out1.set_low();
22
23 Timer::after(Duration::from_millis(500)).await;
24 info!("end program");
25
26 cortex_m::asm::bkpt();
27}
diff --git a/examples/stm32f334/src/bin/pwm.rs b/examples/stm32f334/src/bin/pwm.rs
index 1b5d509e7..364119744 100644
--- a/examples/stm32f334/src/bin/pwm.rs
+++ b/examples/stm32f334/src/bin/pwm.rs
@@ -5,12 +5,20 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::pwm::advanced_pwm::*; 7use embassy_stm32::pwm::advanced_pwm::*;
8use embassy_stm32::time::khz; 8use embassy_stm32::time::{khz, mhz};
9use embassy_stm32::Config;
10use embassy_time::{Duration, Timer};
9use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
10 12
11#[embassy_executor::main] 13#[embassy_executor::main]
12async fn main(_spawner: Spawner) { 14async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default()); 15 let mut config: Config = Default::default();
16 config.rcc.sysclk = Some(mhz(64));
17 config.rcc.hclk = Some(mhz(64));
18 config.rcc.pclk1 = Some(mhz(32));
19 config.rcc.pclk2 = Some(mhz(64));
20
21 let p = embassy_stm32::init(config);
14 info!("Hello World!"); 22 info!("Hello World!");
15 23
16 let ch1 = PwmPin::new_cha(p.PA8); 24 let ch1 = PwmPin::new_cha(p.PA8);
@@ -29,34 +37,35 @@ async fn main(_spawner: Spawner) {
29 None, 37 None,
30 ); 38 );
31 39
32 let mut buck_converter = BridgeConverter::new(pwm.ch_a, khz(100)); 40 info!("pwm constructed");
33
34 buck_converter.set_primary_duty(0);
35 buck_converter.set_secondary_duty(0);
36 buck_converter.set_dead_time(0);
37
38 // note: if the pins are not passed into the advanced pwm struct, they will not be output
39 let mut boost_converter = BridgeConverter::new(pwm.ch_b, khz(100));
40 41
41 boost_converter.set_primary_duty(0); 42 let mut buck_converter = BridgeConverter::new(pwm.ch_a, khz(5));
42 boost_converter.set_secondary_duty(0);
43 43
44 // let max = pwm.get_max_duty(); 44 // embassy_stm32::pac::HRTIM1
45 // pwm.set_dead_time(max / 1024); 45 // .tim(0)
46 // .setr(0)
47 // .modify(|w| w.set_sst(Activeeffect::SETACTIVE));
46 // 48 //
47 // pwm.enable(Channel::Ch1); 49 // Timer::after(Duration::from_millis(500)).await;
48 // 50 //
49 // info!("PWM initialized"); 51 // embassy_stm32::pac::HRTIM1
50 // info!("PWM max duty {}", max); 52 // .tim(0)
51 // 53 // .rstr(0)
52 // loop { 54 // .modify(|w| w.set_srt(Inactiveeffect::SETINACTIVE));
53 // pwm.set_duty(Channel::Ch1, 0); 55
54 // Timer::after(Duration::from_millis(300)).await; 56 let max_duty = buck_converter.get_max_compare_value();
55 // pwm.set_duty(Channel::Ch1, max / 4); 57
56 // Timer::after(Duration::from_millis(300)).await; 58 info!("max compare value: {}", max_duty);
57 // pwm.set_duty(Channel::Ch1, max / 2); 59
58 // Timer::after(Duration::from_millis(300)).await; 60 buck_converter.set_dead_time(max_duty / 20);
59 // pwm.set_duty(Channel::Ch1, max - 1); 61 buck_converter.set_primary_duty(max_duty / 2);
60 // Timer::after(Duration::from_millis(300)).await; 62 buck_converter.set_secondary_duty(3 * max_duty / 4);
61 // } 63
64 buck_converter.start();
65
66 Timer::after(Duration::from_millis(500)).await;
67
68 info!("end program");
69
70 cortex_m::asm::bkpt();
62} 71}