aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src/lptim
diff options
context:
space:
mode:
authorMatt Allen <[email protected]>2025-03-06 09:41:07 -0500
committerMatt Allen <[email protected]>2025-03-06 09:41:07 -0500
commit1646dc36f2cd85f41a8ad8370912ec33fa4cf5e9 (patch)
treebdff00c381ba63baff00c6ea959913732fd16038 /embassy-stm32/src/lptim
parentf22649e0082a9e9886d7fc2f1f8986682b4cc921 (diff)
Added gpio version specific code
Diffstat (limited to 'embassy-stm32/src/lptim')
-rw-r--r--embassy-stm32/src/lptim/pwm.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/embassy-stm32/src/lptim/pwm.rs b/embassy-stm32/src/lptim/pwm.rs
index 9f3803cd6..43ef178ef 100644
--- a/embassy-stm32/src/lptim/pwm.rs
+++ b/embassy-stm32/src/lptim/pwm.rs
@@ -10,7 +10,9 @@ use super::OutputPin;
10#[cfg(any(lptim_v2a, lptim_v2b))] 10#[cfg(any(lptim_v2a, lptim_v2b))]
11use super::{channel::Channel, timer::ChannelDirection, Channel1Pin, Channel2Pin}; 11use super::{channel::Channel, timer::ChannelDirection, Channel1Pin, Channel2Pin};
12use super::{BasicInstance, Instance}; 12use super::{BasicInstance, Instance};
13use crate::gpio::{AfType, AnyPin, OutputType, Pull, Speed}; 13#[cfg(gpio_v2)]
14use crate::gpio::Pull;
15use crate::gpio::{AfType, AnyPin, OutputType, Speed};
14use crate::time::Hertz; 16use crate::time::Hertz;
15use crate::Peripheral; 17use crate::Peripheral;
16 18
@@ -33,13 +35,17 @@ pub struct PwmPin<'d, T, C> {
33/// 35///
34/// This configures the pwm pin settings 36/// This configures the pwm pin settings
35pub struct PwmPinConfig { 37pub struct PwmPinConfig {
38 /// PWM Pin output type
36 pub output_type: OutputType, 39 pub output_type: OutputType,
40 /// PWM Pin speed
37 pub speed: Speed, 41 pub speed: Speed,
42 /// PWM Pin pull type
43 #[cfg(gpio_v2)]
38 pub pull: Pull, 44 pub pull: Pull,
39} 45}
40 46
41macro_rules! channel_impl { 47macro_rules! channel_impl {
42 ($new_chx:ident, $channel:ident, $pin_trait:ident) => { 48 ($new_chx:ident, $new_chx_with_config:ident, $channel:ident, $pin_trait:ident) => {
43 impl<'d, T: BasicInstance> PwmPin<'d, T, $channel> { 49 impl<'d, T: BasicInstance> PwmPin<'d, T, $channel> {
44 #[doc = concat!("Create a new ", stringify!($channel), " PWM pin instance.")] 50 #[doc = concat!("Create a new ", stringify!($channel), " PWM pin instance.")]
45 pub fn $new_chx(pin: impl Peripheral<P = impl $pin_trait<T>> + 'd) -> Self { 51 pub fn $new_chx(pin: impl Peripheral<P = impl $pin_trait<T>> + 'd) -> Self {
@@ -66,6 +72,9 @@ macro_rules! channel_impl {
66 pin.set_low(); 72 pin.set_low();
67 pin.set_as_af( 73 pin.set_as_af(
68 pin.af_num(), 74 pin.af_num(),
75 #[cfg(gpio_v1)]
76 AfType::output(pin_config.output_type, pin_config.speed),
77 #[cfg(gpio_v2)]
69 AfType::output_pull(pin_config.output_type, pin_config.speed, pin_config.pull), 78 AfType::output_pull(pin_config.output_type, pin_config.speed, pin_config.pull),
70 ); 79 );
71 }); 80 });
@@ -79,11 +88,11 @@ macro_rules! channel_impl {
79} 88}
80 89
81#[cfg(not(any(lptim_v2a, lptim_v2b)))] 90#[cfg(not(any(lptim_v2a, lptim_v2b)))]
82channel_impl!(new, Output, OutputPin); 91channel_impl!(new, new_with_config, Output, OutputPin);
83#[cfg(any(lptim_v2a, lptim_v2b))] 92#[cfg(any(lptim_v2a, lptim_v2b))]
84channel_impl!(new_ch1, Ch1, Channel1Pin); 93channel_impl!(new_ch1, new_ch1_with_config, Ch1, Channel1Pin);
85#[cfg(any(lptim_v2a, lptim_v2b))] 94#[cfg(any(lptim_v2a, lptim_v2b))]
86channel_impl!(new_ch2, Ch2, Channel2Pin); 95channel_impl!(new_ch2, new_ch2_with_config, Ch2, Channel2Pin);
87 96
88/// PWM driver. 97/// PWM driver.
89pub struct Pwm<'d, T: Instance> { 98pub struct Pwm<'d, T: Instance> {