Skip to content

Commit 8de0225

Browse files
committed
Make USART pins macro more flexible
1 parent a5b60d3 commit 8de0225

File tree

1 file changed

+38
-17
lines changed

1 file changed

+38
-17
lines changed

src/serial.rs

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,45 +65,66 @@ pub trait TxPin<USART> {}
6565
pub trait RxPin<USART> {}
6666

6767
macro_rules! usart_pins {
68-
($($USART:ident: ($tx:ty, $rx:ty),)+) => {
68+
($($USART:ident => {
69+
tx => [$($tx:ty),+ $(,)*],
70+
rx => [$($rx:ty),+ $(,)*],
71+
})+) => {
6972
$(
70-
impl TxPin<stm32::$USART> for $tx {}
71-
impl RxPin<stm32::$USART> for $rx {}
73+
$(
74+
impl TxPin<stm32::$USART> for $tx {}
75+
)+
76+
$(
77+
impl RxPin<stm32::$USART> for $rx {}
78+
)+
7279
)+
7380
}
7481
}
7582

7683
#[cfg(any(feature = "stm32f030", feature = "stm32f042"))]
7784
usart_pins! {
78-
USART1: (gpioa::PA9<Alternate<AF1>>, gpioa::PA10<Alternate<AF1>>),
79-
USART1: (gpiob::PB6<Alternate<AF0>>, gpiob::PB6<Alternate<AF0>>),
85+
USART1 => {
86+
tx => [gpioa::PA9<Alternate<AF1>>, gpiob::PB6<Alternate<AF0>>],
87+
rx => [gpioa::PA10<Alternate<AF1>>, gpiob::PB6<Alternate<AF0>>],
88+
}
8089
}
8190
#[cfg(feature = "stm32f030x6")]
8291
usart_pins! {
83-
USART1: (gpioa::PA2<Alternate<AF1>>, gpioa::PA3<Alternate<AF1>>),
84-
USART1: (gpioa::PA14<Alternate<AF1>>, gpioa::PA15<Alternate<AF1>>),
92+
USART1 => {
93+
tx => [gpioa::PA2<Alternate<AF1>>, gpioa::PA14<Alternate<AF1>>],
94+
rx => [gpioa::PA3<Alternate<AF1>>, gpioa::PA15<Alternate<AF1>>],
95+
}
8596
}
8697
#[cfg(any(
8798
feature = "stm32f042",
8899
feature = "stm32f030x8",
89100
feature = "stm32f030xc",
90101
))]
91102
usart_pins! {
92-
USART2: (gpioa::PA2<Alternate<AF1>>, gpioa::PA3<Alternate<AF1>>),
93-
USART2: (gpioa::PA14<Alternate<AF1>>, gpioa::PA15<Alternate<AF1>>),
103+
USART2 => {
104+
tx => [gpioa::PA2<Alternate<AF1>>, gpioa::PA14<Alternate<AF1>>],
105+
rx => [gpioa::PA3<Alternate<AF1>>, gpioa::PA15<Alternate<AF1>>],
106+
}
94107
}
95108
#[cfg(feature = "stm32f030xc")]
96109
usart_pins! {
97110
// TODO WTF look at this again, in the datasheet PB10 is both tx and rx
98111
// USART3: (gpiob::PB10, AF4, gpiob::PA11, AF4),
99-
USART3: (gpioc::PC4<Alternate<AF1>>, gpioc::PC5<Alternate<AF1>>),
100-
USART3: (gpioc::PC10<Alternate<AF1>>, gpioc::PC11<Alternate<AF1>>),
101-
USART4: (gpioa::PA0<Alternate<AF4>>, gpioa::PA1<Alternate<AF4>>),
102-
USART4: (gpioc::PC10<Alternate<AF0>>, gpioc::PC11<Alternate<AF0>>),
103-
USART5: (gpiob::PB3<Alternate<AF4>>, gpiob::PB4<Alternate<AF4>>),
104-
USART5: (gpioc::PC12<Alternate<AF2>>, gpiod::PD2<Alternate<AF2>>),
105-
USART6: (gpioa::PA4<Alternate<AF5>>, gpioa::PA5<Alternate<AF5>>),
106-
USART6: (gpioc::PC0<Alternate<AF2>>, gpioc::PC1<Alternate<AF2>>),
112+
USART3 => {
113+
tx => [gpioc::PC4<Alternate<AF1>>, gpioc::PC10<Alternate<AF1>>],
114+
rx => [gpioc::PC5<Alternate<AF1>>, gpioc::PC11<Alternate<AF1>>],
115+
}
116+
USART4 => {
117+
tx => [gpioa::PA0<Alternate<AF4>>, gpioc::PC10<Alternate<AF0>>],
118+
rx => [gpioa::PA1<Alternate<AF4>>, gpioc::PC11<Alternate<AF0>>],
119+
}
120+
USART5 => {
121+
tx => [gpiob::PB3<Alternate<AF4>>, gpioc::PC12<Alternate<AF2>>],
122+
rx => [gpiob::PB4<Alternate<AF4>>, gpiod::PD2<Alternate<AF2>>],
123+
}
124+
USART6 => {
125+
tx => [gpioa::PA4<Alternate<AF5>>, gpioc::PC0<Alternate<AF2>>],
126+
rx => [gpioa::PA5<Alternate<AF5>>, gpioc::PC1<Alternate<AF2>>],
127+
}
107128
}
108129

109130
/// Serial abstraction

0 commit comments

Comments
 (0)