Skip to content

Commit 5d9d6c1

Browse files
committed
Allow Alternate<OpenDrain> on most peripherals
1 parent b8753bc commit 5d9d6c1

File tree

5 files changed

+24
-26
lines changed

5 files changed

+24
-26
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1818

1919
- `From<Into<Hertz>>` for `i2c::Mode`
2020
- `exti_rtic` example
21-
- Support for OpenDrain pin configuration on SPI CLK and MOSI pins
21+
- Support for OpenDrain pin configuration on CAN, SPI, UART, PWM output pins
2222
- LSB/MSB bit format selection for `SPI`
2323
- Support for CAN peripherals with the `bxcan` crate
2424
- Add DAC, UART4, UART5 clock in RCC for the f103 high density line

src/can.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::gpio::gpiob::{PB12, PB13, PB5, PB6};
2525
use crate::gpio::{
2626
gpioa::{PA11, PA12},
2727
gpiob::{PB8, PB9},
28-
Alternate, Input, PushPull,
28+
Alternate, Input,
2929
};
3030
#[cfg(feature = "connectivity")]
3131
use crate::pac::CAN2;
@@ -38,8 +38,8 @@ pub trait Pins: crate::Sealed {
3838
fn remap(mapr: &mut MAPR);
3939
}
4040

41-
impl<MODE> crate::Sealed for (PA12<Alternate<PushPull>>, PA11<Input<MODE>>) {}
42-
impl<MODE> Pins for (PA12<Alternate<PushPull>>, PA11<Input<MODE>>) {
41+
impl<INMODE, OUTMODE> crate::Sealed for (PA12<Alternate<OUTMODE>>, PA11<Input<INMODE>>) {}
42+
impl<INMODE, OUTMODE> Pins for (PA12<Alternate<OUTMODE>>, PA11<Input<INMODE>>) {
4343
type Instance = CAN1;
4444

4545
fn remap(mapr: &mut MAPR) {
@@ -50,8 +50,8 @@ impl<MODE> Pins for (PA12<Alternate<PushPull>>, PA11<Input<MODE>>) {
5050
}
5151
}
5252

53-
impl<MODE> crate::Sealed for (PB9<Alternate<PushPull>>, PB8<Input<MODE>>) {}
54-
impl<MODE> Pins for (PB9<Alternate<PushPull>>, PB8<Input<MODE>>) {
53+
impl<INMODE, OUTMODE> crate::Sealed for (PB9<Alternate<OUTMODE>>, PB8<Input<INMODE>>) {}
54+
impl<INMODE, OUTMODE> Pins for (PB9<Alternate<OUTMODE>>, PB8<Input<INMODE>>) {
5555
type Instance = CAN1;
5656

5757
fn remap(mapr: &mut MAPR) {
@@ -63,9 +63,9 @@ impl<MODE> Pins for (PB9<Alternate<PushPull>>, PB8<Input<MODE>>) {
6363
}
6464

6565
#[cfg(feature = "connectivity")]
66-
impl<MODE> crate::Sealed for (PB13<Alternate<PushPull>>, PB12<Input<MODE>>) {}
66+
impl<INMODE, OUTMODE> crate::Sealed for (PB13<Alternate<OUTMODE>>, PB12<Input<INMODE>>) {}
6767
#[cfg(feature = "connectivity")]
68-
impl<MODE> Pins for (PB13<Alternate<PushPull>>, PB12<Input<MODE>>) {
68+
impl<INMODE, OUTMODE> Pins for (PB13<Alternate<OUTMODE>>, PB12<Input<INMODE>>) {
6969
type Instance = CAN2;
7070

7171
fn remap(mapr: &mut MAPR) {
@@ -74,9 +74,9 @@ impl<MODE> Pins for (PB13<Alternate<PushPull>>, PB12<Input<MODE>>) {
7474
}
7575

7676
#[cfg(feature = "connectivity")]
77-
impl<MODE> crate::Sealed for (PB6<Alternate<PushPull>>, PB5<Input<MODE>>) {}
77+
impl<INMODE, OUTMODE> crate::Sealed for (PB6<Alternate<OUTMODE>>, PB5<Input<INMODE>>) {}
7878
#[cfg(feature = "connectivity")]
79-
impl<MODE> Pins for (PB6<Alternate<PushPull>>, PB5<Input<MODE>>) {
79+
impl<INMODE, OUTMODE> Pins for (PB6<Alternate<OUTMODE>>, PB5<Input<INMODE>>) {
8080
type Instance = CAN2;
8181

8282
fn remap(mapr: &mut MAPR) {

src/pwm.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ use cast::{u16, u32};
6666

6767
use crate::afio::MAPR;
6868
use crate::bb;
69-
use crate::gpio::{self, Alternate, PushPull};
69+
use crate::gpio::{self, Alternate};
7070
use crate::time::Hertz;
7171
use crate::time::U32Ext;
7272
use crate::timer::Timer;
@@ -106,10 +106,10 @@ macro_rules! pins_impl {
106106
( $( ( $($PINX:ident),+ ), ( $($TRAIT:ident),+ ), ( $($ENCHX:ident),+ ); )+ ) => {
107107
$(
108108
#[allow(unused_parens)]
109-
impl<TIM, REMAP, $($PINX,)+> Pins<REMAP, ($($ENCHX),+)> for ($($PINX),+)
109+
impl<TIM, REMAP, OUTMODE, $($PINX,)+> Pins<REMAP, ($($ENCHX),+)> for ($($PINX),+)
110110
where
111111
REMAP: Remap<Periph = TIM>,
112-
$($PINX: $TRAIT<REMAP> + gpio::PinExt<Mode=Alternate<PushPull>>,)+
112+
$($PINX: $TRAIT<REMAP> + gpio::PinExt<Mode=Alternate<OUTMODE>>,)+
113113
{
114114
$(const $ENCHX: bool = true;)+
115115
type Channels = ($(PwmChannel<TIM, $ENCHX>),+);

src/serial.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ use crate::gpio::gpioa::{PA10, PA2, PA3, PA9};
5353
use crate::gpio::gpiob::{PB10, PB11, PB6, PB7};
5454
use crate::gpio::gpioc::{PC10, PC11};
5555
use crate::gpio::gpiod::{PD5, PD6, PD8, PD9};
56-
use crate::gpio::{Alternate, Input, PushPull};
56+
use crate::gpio::{Alternate, Input};
5757
use crate::rcc::{Clocks, Enable, GetBusFreq, Reset};
5858
use crate::time::{Bps, U32Ext};
5959

@@ -87,31 +87,31 @@ pub trait Pins<USART> {
8787
const REMAP: u8;
8888
}
8989

90-
impl<MODE> Pins<USART1> for (PA9<Alternate<PushPull>>, PA10<Input<MODE>>) {
90+
impl<INMODE, OUTMODE> Pins<USART1> for (PA9<Alternate<OUTMODE>>, PA10<Input<INMODE>>) {
9191
const REMAP: u8 = 0;
9292
}
9393

94-
impl<MODE> Pins<USART1> for (PB6<Alternate<PushPull>>, PB7<Input<MODE>>) {
94+
impl<INMODE, OUTMODE> Pins<USART1> for (PB6<Alternate<OUTMODE>>, PB7<Input<INMODE>>) {
9595
const REMAP: u8 = 1;
9696
}
9797

98-
impl<MODE> Pins<USART2> for (PA2<Alternate<PushPull>>, PA3<Input<MODE>>) {
98+
impl<INMODE, OUTMODE> Pins<USART2> for (PA2<Alternate<OUTMODE>>, PA3<Input<INMODE>>) {
9999
const REMAP: u8 = 0;
100100
}
101101

102-
impl<MODE> Pins<USART2> for (PD5<Alternate<PushPull>>, PD6<Input<MODE>>) {
102+
impl<INMODE, OUTMODE> Pins<USART2> for (PD5<Alternate<OUTMODE>>, PD6<Input<INMODE>>) {
103103
const REMAP: u8 = 0;
104104
}
105105

106-
impl<MODE> Pins<USART3> for (PB10<Alternate<PushPull>>, PB11<Input<MODE>>) {
106+
impl<INMODE, OUTMODE> Pins<USART3> for (PB10<Alternate<OUTMODE>>, PB11<Input<INMODE>>) {
107107
const REMAP: u8 = 0;
108108
}
109109

110-
impl<MODE> Pins<USART3> for (PC10<Alternate<PushPull>>, PC11<Input<MODE>>) {
110+
impl<INMODE, OUTMODE> Pins<USART3> for (PC10<Alternate<OUTMODE>>, PC11<Input<INMODE>>) {
111111
const REMAP: u8 = 1;
112112
}
113113

114-
impl<MODE> Pins<USART3> for (PD8<Alternate<PushPull>>, PD9<Input<MODE>>) {
114+
impl<INMODE, OUTMODE> Pins<USART3> for (PD8<Alternate<OUTMODE>>, PD9<Input<INMODE>>) {
115115
const REMAP: u8 = 0b11;
116116
}
117117

src/spi.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ use crate::gpio::gpioa::{PA5, PA6, PA7};
5050
use crate::gpio::gpiob::{PB13, PB14, PB15, PB3, PB4, PB5};
5151
#[cfg(feature = "connectivity")]
5252
use crate::gpio::gpioc::{PC10, PC11, PC12};
53-
use crate::gpio::{Alternate, Input, OpenDrain, PushPull};
53+
use crate::gpio::{Alternate, Input};
5454
use crate::rcc::{Clocks, Enable, GetBusFreq, Reset};
5555
use crate::time::Hertz;
5656

@@ -127,11 +127,9 @@ macro_rules! remap {
127127
type Periph = $SPIX;
128128
const REMAP: bool = $state;
129129
}
130-
impl Sck<$name> for $SCK<Alternate<PushPull>> {}
131-
impl Sck<$name> for $SCK<Alternate<OpenDrain>> {}
130+
impl<MODE> Sck<$name> for $SCK<Alternate<MODE>> {}
132131
impl<MODE> Miso<$name> for $MISO<Input<MODE>> {}
133-
impl Mosi<$name> for $MOSI<Alternate<PushPull>> {}
134-
impl Mosi<$name> for $MOSI<Alternate<OpenDrain>> {}
132+
impl<MODE> Mosi<$name> for $MOSI<Alternate<MODE>> {}
135133
};
136134
}
137135

0 commit comments

Comments
 (0)