aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrandi <[email protected]>2023-10-07 12:22:31 +1300
committerrandi <[email protected]>2023-10-07 12:22:31 +1300
commit710874021a783768f5d2d3f712e095eba3bc1627 (patch)
treeceab2d6ea73e752118e18e3b5dfb8427a66abc46
parentb217d147deab67a988df0d5e58a15eb9260dd6fa (diff)
Implemented Pwm trait for complementary pwm from embedded_hal
-rw-r--r--embassy-stm32/src/timer/complementary_pwm.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/embassy-stm32/src/timer/complementary_pwm.rs b/embassy-stm32/src/timer/complementary_pwm.rs
index 4f033e3a2..0ab727344 100644
--- a/embassy-stm32/src/timer/complementary_pwm.rs
+++ b/embassy-stm32/src/timer/complementary_pwm.rs
@@ -122,6 +122,46 @@ impl<'d, T: ComplementaryCaptureCompare16bitInstance> ComplementaryPwm<'d, T> {
122 } 122 }
123} 123}
124 124
125impl<'d, T: ComplementaryCaptureCompare16bitInstance> embedded_hal_02::Pwm for ComplementaryPwm<'d, T> {
126 type Channel = Channel;
127 type Time = Hertz;
128 type Duty = u16;
129
130 fn disable(&mut self, channel: Self::Channel) {
131 self.inner.enable_complementary_channel(channel, false);
132 self.inner.enable_channel(channel, false);
133 }
134
135 fn enable(&mut self, channel: Self::Channel) {
136 self.inner.enable_channel(channel, true);
137 self.inner.enable_complementary_channel(channel, true);
138 }
139
140 fn get_period(&self) -> Self::Time {
141 self.inner.get_frequency().into()
142 }
143
144 fn get_duty(&self, channel: Self::Channel) -> Self::Duty {
145 self.inner.get_compare_value(channel)
146 }
147
148 fn get_max_duty(&self) -> Self::Duty {
149 self.inner.get_max_compare_value() + 1
150 }
151
152 fn set_duty(&mut self, channel: Self::Channel, duty: Self::Duty) {
153 assert!(duty <= self.get_max_duty());
154 self.inner.set_compare_value(channel, duty)
155 }
156
157 fn set_period<P>(&mut self, period: P)
158 where
159 P: Into<Self::Time>,
160 {
161 self.inner.set_frequency(period.into());
162 }
163}
164
125fn compute_dead_time_value(value: u16) -> (Ckd, u8) { 165fn compute_dead_time_value(value: u16) -> (Ckd, u8) {
126 /* 166 /*
127 Dead-time = T_clk * T_dts * T_dtg 167 Dead-time = T_clk * T_dts * T_dtg