Skip to content

Commit 6d262e1

Browse files
authored
Allow open drain timer pin (#133)
1 parent b82272a commit 6d262e1

File tree

1 file changed

+127
-91
lines changed

1 file changed

+127
-91
lines changed

src/timer/pins.rs

Lines changed: 127 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ impl<TIM, PIN: TimerPin<TIM>> TriggerPin<TIM, PIN> {
2828
}
2929

3030
macro_rules! timer_pins {
31-
($TIMX:ident, [ $(($ch:ty, $pin:ty, $af_mode:expr),)+ ]) => {
31+
($TIMX:ident, [ $(($ch:ty, $pin:tt, $af_mode:expr),)+ ]) => {
3232
$(
33-
impl TimerPin<$TIMX> for $pin {
33+
impl TimerPin<$TIMX> for $pin<Analog> {
3434
type Channel = $ch;
3535

3636
fn setup(&self) {
@@ -41,6 +41,19 @@ macro_rules! timer_pins {
4141
self.into_analog()
4242
}
4343
}
44+
45+
impl TimerPin<$TIMX> for $pin<Output<OpenDrain>> {
46+
type Channel = $ch;
47+
48+
fn setup(&self) {
49+
self.set_alt_mode($af_mode);
50+
}
51+
52+
fn release(self) -> Self {
53+
self.into_open_drain_output()
54+
}
55+
}
56+
4457
)+
4558
};
4659
}
@@ -114,106 +127,129 @@ trigger_pins!(TIM3, [
114127
(PC7<DefaultMode>, cc2p, ic2f),
115128
]);
116129

117-
timer_pins!(TIM1, [
118-
(Channel1, PA8<DefaultMode>, AltFunction::AF2),
119-
(Channel1, PC8<DefaultMode>, AltFunction::AF2),
120-
(Channel2, PA9<DefaultMode>, AltFunction::AF2),
121-
(Channel2, PB3<DefaultMode>, AltFunction::AF1),
122-
(Channel2, PC9<DefaultMode>, AltFunction::AF2),
123-
(Channel3, PA10<DefaultMode>, AltFunction::AF2),
124-
(Channel3, PB6<DefaultMode>, AltFunction::AF1),
125-
(Channel3, PC10<DefaultMode>, AltFunction::AF2),
126-
(Channel4, PA11<DefaultMode>, AltFunction::AF2),
127-
(Channel4, PC11<DefaultMode>, AltFunction::AF2),
128-
]);
130+
timer_pins!(
131+
TIM1,
132+
[
133+
(Channel1, PA8, AltFunction::AF2),
134+
(Channel1, PC8, AltFunction::AF2),
135+
(Channel2, PA9, AltFunction::AF2),
136+
(Channel2, PB3, AltFunction::AF1),
137+
(Channel2, PC9, AltFunction::AF2),
138+
(Channel3, PA10, AltFunction::AF2),
139+
(Channel3, PB6, AltFunction::AF1),
140+
(Channel3, PC10, AltFunction::AF2),
141+
(Channel4, PA11, AltFunction::AF2),
142+
(Channel4, PC11, AltFunction::AF2),
143+
]
144+
);
129145

130146
// Inverted pins
131-
timer_pins!(TIM1, [
132-
(Channel1, PA7<DefaultMode>, AltFunction::AF2),
133-
(Channel1, PB13<DefaultMode>, AltFunction::AF2),
134-
(Channel1, PD2<DefaultMode>, AltFunction::AF2),
135-
(Channel2, PB0<DefaultMode>, AltFunction::AF2),
136-
(Channel2, PB14<DefaultMode>, AltFunction::AF2),
137-
(Channel2, PD3<DefaultMode>, AltFunction::AF2),
138-
(Channel3, PB1<DefaultMode>, AltFunction::AF2),
139-
(Channel3, PB15<DefaultMode>, AltFunction::AF2),
140-
(Channel3, PD4<DefaultMode>, AltFunction::AF2),
141-
]);
147+
timer_pins!(
148+
TIM1,
149+
[
150+
(Channel1, PA7, AltFunction::AF2),
151+
(Channel1, PB13, AltFunction::AF2),
152+
(Channel1, PD2, AltFunction::AF2),
153+
(Channel2, PB0, AltFunction::AF2),
154+
(Channel2, PB14, AltFunction::AF2),
155+
(Channel2, PD3, AltFunction::AF2),
156+
(Channel3, PB1, AltFunction::AF2),
157+
(Channel3, PB15, AltFunction::AF2),
158+
(Channel3, PD4, AltFunction::AF2),
159+
]
160+
);
142161

143162
#[cfg(feature = "stm32g0x1")]
144-
timer_pins!(TIM2, [
145-
(Channel1, PA0<DefaultMode>, AltFunction::AF2),
146-
(Channel1, PA5<DefaultMode>, AltFunction::AF2),
147-
(Channel1, PA15<DefaultMode>, AltFunction::AF2),
148-
(Channel1, PC4<DefaultMode>, AltFunction::AF2),
149-
(Channel2, PA1<DefaultMode>, AltFunction::AF2),
150-
(Channel2, PB3<DefaultMode>, AltFunction::AF2),
151-
(Channel2, PC5<DefaultMode>, AltFunction::AF2),
152-
(Channel3, PA2<DefaultMode>, AltFunction::AF2),
153-
(Channel3, PB10<DefaultMode>, AltFunction::AF2),
154-
(Channel3, PC6<DefaultMode>, AltFunction::AF2),
155-
(Channel4, PA3<DefaultMode>, AltFunction::AF2),
156-
(Channel4, PB11<DefaultMode>, AltFunction::AF2),
157-
(Channel4, PC7<DefaultMode>, AltFunction::AF2),
158-
]);
159-
160-
timer_pins!(TIM3, [
161-
(Channel1, PA6<DefaultMode>, AltFunction::AF1),
162-
(Channel1, PB4<DefaultMode>, AltFunction::AF1),
163-
(Channel1, PC6<DefaultMode>, AltFunction::AF1),
164-
(Channel2, PA7<DefaultMode>, AltFunction::AF1),
165-
(Channel2, PB5<DefaultMode>, AltFunction::AF1),
166-
(Channel2, PC7<DefaultMode>, AltFunction::AF1),
167-
(Channel3, PB0<DefaultMode>, AltFunction::AF1),
168-
(Channel3, PC8<DefaultMode>, AltFunction::AF1),
169-
(Channel4, PB1<DefaultMode>, AltFunction::AF1),
170-
(Channel4, PC9<DefaultMode>, AltFunction::AF1),
171-
]);
172-
173-
timer_pins!(TIM14, [
174-
(Channel1, PA4<DefaultMode>, AltFunction::AF4),
175-
(Channel1, PA7<DefaultMode>, AltFunction::AF4),
176-
(Channel1, PB1<DefaultMode>, AltFunction::AF0),
177-
(Channel1, PC12<DefaultMode>, AltFunction::AF2),
178-
(Channel1, PF0<DefaultMode>, AltFunction::AF2),
179-
]);
163+
timer_pins!(
164+
TIM2,
165+
[
166+
(Channel1, PA0, AltFunction::AF2),
167+
(Channel1, PA5, AltFunction::AF2),
168+
(Channel1, PA15, AltFunction::AF2),
169+
(Channel1, PC4, AltFunction::AF2),
170+
(Channel2, PA1, AltFunction::AF2),
171+
(Channel2, PB3, AltFunction::AF2),
172+
(Channel2, PC5, AltFunction::AF2),
173+
(Channel3, PA2, AltFunction::AF2),
174+
(Channel3, PB10, AltFunction::AF2),
175+
(Channel3, PC6, AltFunction::AF2),
176+
(Channel4, PA3, AltFunction::AF2),
177+
(Channel4, PB11, AltFunction::AF2),
178+
(Channel4, PC7, AltFunction::AF2),
179+
]
180+
);
181+
182+
timer_pins!(
183+
TIM3,
184+
[
185+
(Channel1, PA6, AltFunction::AF1),
186+
(Channel1, PB4, AltFunction::AF1),
187+
(Channel1, PC6, AltFunction::AF1),
188+
(Channel2, PA7, AltFunction::AF1),
189+
(Channel2, PB5, AltFunction::AF1),
190+
(Channel2, PC7, AltFunction::AF1),
191+
(Channel3, PB0, AltFunction::AF1),
192+
(Channel3, PC8, AltFunction::AF1),
193+
(Channel4, PB1, AltFunction::AF1),
194+
(Channel4, PC9, AltFunction::AF1),
195+
]
196+
);
197+
198+
timer_pins!(
199+
TIM14,
200+
[
201+
(Channel1, PA4, AltFunction::AF4),
202+
(Channel1, PA7, AltFunction::AF4),
203+
(Channel1, PB1, AltFunction::AF0),
204+
(Channel1, PC12, AltFunction::AF2),
205+
(Channel1, PF0, AltFunction::AF2),
206+
]
207+
);
180208

181209
#[cfg(any(feature = "stm32g070", feature = "stm32g071", feature = "stm32g081"))]
182-
timer_pins!(TIM15, [
183-
(Channel1, PA2<DefaultMode>, AltFunction::AF5),
184-
(Channel1, PB14<DefaultMode>, AltFunction::AF5),
185-
(Channel1, PC1<DefaultMode>, AltFunction::AF2),
186-
(Channel2, PA3<DefaultMode>, AltFunction::AF5),
187-
(Channel2, PB15<DefaultMode>, AltFunction::AF5),
188-
(Channel2, PC2<DefaultMode>, AltFunction::AF2),
189-
]);
210+
timer_pins!(
211+
TIM15,
212+
[
213+
(Channel1, PA2, AltFunction::AF5),
214+
(Channel1, PB14, AltFunction::AF5),
215+
(Channel1, PC1, AltFunction::AF2),
216+
(Channel2, PA3, AltFunction::AF5),
217+
(Channel2, PB15, AltFunction::AF5),
218+
(Channel2, PC2, AltFunction::AF2),
219+
]
220+
);
190221

191222
// Inverted pins
192223
#[cfg(any(feature = "stm32g070", feature = "stm32g071", feature = "stm32g081"))]
193-
timer_pins!(TIM15, [
194-
(Channel1, PA1<DefaultMode>, AltFunction::AF5),
195-
(Channel1, PB13<DefaultMode>, AltFunction::AF5),
196-
(Channel1, PF1<DefaultMode>, AltFunction::AF2),
197-
]);
198-
199-
timer_pins!(TIM16, [
200-
(Channel1, PA6<DefaultMode>, AltFunction::AF5),
201-
(Channel1, PB8<DefaultMode>, AltFunction::AF2),
202-
(Channel1, PD0<DefaultMode>, AltFunction::AF2),
203-
]);
224+
timer_pins!(
225+
TIM15,
226+
[
227+
(Channel1, PA1, AltFunction::AF5),
228+
(Channel1, PB13, AltFunction::AF5),
229+
(Channel1, PF1, AltFunction::AF2),
230+
]
231+
);
232+
233+
timer_pins!(
234+
TIM16,
235+
[
236+
(Channel1, PA6, AltFunction::AF5),
237+
(Channel1, PB8, AltFunction::AF2),
238+
(Channel1, PD0, AltFunction::AF2),
239+
]
240+
);
204241

205242
// Inverted pins
206-
timer_pins!(TIM16, [
207-
(Channel1, PB6<DefaultMode>, AltFunction::AF2),
208-
]);
243+
timer_pins!(TIM16, [(Channel1, PB6, AltFunction::AF2),]);
209244

210-
timer_pins!(TIM17, [
211-
(Channel1, PA7<DefaultMode>, AltFunction::AF6),
212-
(Channel1, PB9<DefaultMode>, AltFunction::AF2),
213-
(Channel1, PD1<DefaultMode>, AltFunction::AF2),
214-
]);
245+
timer_pins!(
246+
TIM17,
247+
[
248+
(Channel1, PA7, AltFunction::AF6),
249+
(Channel1, PB9, AltFunction::AF2),
250+
(Channel1, PD1, AltFunction::AF2),
251+
]
252+
);
215253

216254
// Inverted pins
217-
timer_pins!(TIM17, [
218-
(Channel1, PB7<DefaultMode>, AltFunction::AF2),
219-
]);
255+
timer_pins!(TIM17, [(Channel1, PB7, AltFunction::AF2),]);

0 commit comments

Comments
 (0)