@@ -121,36 +121,32 @@ pub enum Error {
121
121
// USART REMAPPING, see: https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf
122
122
// Section 9.3.8
123
123
pub trait Pins < USART > {
124
- const REMAP : u8 ;
124
+ fn remap ( mapr : & mut MAPR ) ;
125
125
}
126
126
127
- impl < INMODE , OUTMODE > Pins < USART1 > for ( gpio:: PA9 < Alternate < OUTMODE > > , gpio:: PA10 < Input < INMODE > > ) {
128
- const REMAP : u8 = 0 ;
129
- }
130
-
131
- impl < INMODE , OUTMODE > Pins < USART1 > for ( gpio:: PB6 < Alternate < OUTMODE > > , gpio:: PB7 < Input < INMODE > > ) {
132
- const REMAP : u8 = 1 ;
133
- }
134
-
135
- impl < INMODE , OUTMODE > Pins < USART2 > for ( gpio:: PA2 < Alternate < OUTMODE > > , gpio:: PA3 < Input < INMODE > > ) {
136
- const REMAP : u8 = 0 ;
137
- }
138
-
139
- impl < INMODE , OUTMODE > Pins < USART2 > for ( gpio:: PD5 < Alternate < OUTMODE > > , gpio:: PD6 < Input < INMODE > > ) {
140
- const REMAP : u8 = 1 ;
127
+ macro_rules! remap {
128
+ ( $( $USART: ty, $TX: ident, $RX: ident => { $remapex: expr } ; ) +) => {
129
+ $(
130
+ impl <INMODE , OUTMODE > Pins <$USART> for ( gpio:: $TX<Alternate <OUTMODE >>, gpio:: $RX<Input <INMODE >>) {
131
+ fn remap( mapr: & mut MAPR ) {
132
+ mapr. modify_mapr( $remapex) ;
133
+ }
134
+ }
135
+ ) +
136
+ }
141
137
}
142
138
143
- impl < INMODE , OUTMODE > Pins < USART3 > for ( gpio :: PB10 < Alternate < OUTMODE > > , gpio :: PB11 < Input < INMODE > > ) {
144
- const REMAP : u8 = 0 ;
145
- }
139
+ remap ! (
140
+ USART1 , PA9 , PA10 => { |_ , w| w . usart1_remap ( ) . bit ( false ) } ;
141
+ USART1 , PB6 , PB7 => { |_ , w| w . usart1_remap ( ) . bit ( true ) } ;
146
142
147
- impl < INMODE , OUTMODE > Pins < USART3 > for ( gpio:: PC10 < Alternate < OUTMODE > > , gpio:: PC11 < Input < INMODE > > ) {
148
- const REMAP : u8 = 1 ;
149
- }
143
+ USART2 , PA2 , PA3 => { |_, w| w. usart2_remap( ) . bit( false ) } ;
144
+ USART2 , PD5 , PD6 => { |_, w| w. usart2_remap( ) . bit( true ) } ;
150
145
151
- impl < INMODE , OUTMODE > Pins < USART3 > for ( gpio:: PD8 < Alternate < OUTMODE > > , gpio:: PD9 < Input < INMODE > > ) {
152
- const REMAP : u8 = 0b11 ;
153
- }
146
+ USART3 , PB10 , PB11 => { |_, w| unsafe { w. usart3_remap( ) . bits( 0b00 ) } } ;
147
+ USART3 , PC10 , PC11 => { |_, w| unsafe { w. usart3_remap( ) . bits( 0b01 ) } } ;
148
+ USART3 , PD8 , PD9 => { |_, w| unsafe { w. usart3_remap( ) . bits( 0b11 ) } } ;
149
+ ) ;
154
150
155
151
pub enum WordLength {
156
152
/// When parity is enabled, a word has 7 data bits + 1 parity bit,
@@ -431,9 +427,6 @@ macro_rules! hal {
431
427
$( #[ $meta: meta] ) *
432
428
$USARTX: ident: (
433
429
$usartX: ident,
434
- $usartX_remap: ident,
435
- $bit: ident,
436
- $closure: expr,
437
430
) ,
438
431
) => {
439
432
impl Instance for $USARTX {
@@ -473,10 +466,7 @@ macro_rules! hal {
473
466
{
474
467
#[ allow( unused_unsafe) ]
475
468
Serial { usart, pins, tx: Tx :: new( ) , rx: Rx :: new( ) } . init( config. into( ) , clocks, || {
476
- mapr. modify_mapr( |_, w| unsafe {
477
- #[ allow( clippy:: redundant_closure_call) ]
478
- w. $usartX_remap( ) . $bit( ( $closure) ( PINS :: REMAP ) )
479
- } )
469
+ PINS :: remap( mapr) ;
480
470
} )
481
471
}
482
472
}
@@ -488,27 +478,18 @@ hal! {
488
478
/// # USART1 functions
489
479
USART1 : (
490
480
usart1,
491
- usart1_remap,
492
- bit,
493
- |remap| remap == 1 ,
494
481
) ,
495
482
}
496
483
hal ! {
497
484
/// # USART2 functions
498
485
USART2 : (
499
486
usart2,
500
- usart2_remap,
501
- bit,
502
- |remap| remap == 1 ,
503
487
) ,
504
488
}
505
489
hal ! {
506
490
/// # USART3 functions
507
491
USART3 : (
508
492
usart3,
509
- usart3_remap,
510
- bits,
511
- |remap| remap,
512
493
) ,
513
494
}
514
495
0 commit comments