@@ -120,17 +120,24 @@ pub struct DMA;
120
120
121
121
#[ allow( non_upper_case_globals) ]
122
122
pub trait SerialExt < Config > : Sized + Instance {
123
- const NoTx : Option < Self :: Tx < PushPull > > = None ;
124
- const NoRx : Option < Self :: Rx < PushPull > > = None ;
125
123
fn usart < Otype > (
126
124
self ,
127
- pins : (
128
- Option < impl Into < Self :: Tx < Otype > > > ,
129
- Option < impl Into < Self :: Rx < PushPull > > > ,
130
- ) ,
125
+ pins : ( impl Into < Self :: Tx < Otype > > , impl Into < Self :: Rx < PushPull > > ) ,
131
126
config : impl Into < Config > ,
132
127
rcc : & mut Rcc ,
133
128
) -> Result < Serial < Self , Otype > , InvalidConfig > ;
129
+ fn tx < Otype > (
130
+ self ,
131
+ tx : impl Into < Self :: Tx < Otype > > ,
132
+ config : impl Into < Config > ,
133
+ rcc : & mut Rcc ,
134
+ ) -> Result < Tx < Self , NoDMA , Otype > , InvalidConfig > ;
135
+ fn rx (
136
+ self ,
137
+ rx : impl Into < Self :: Rx < PushPull > > ,
138
+ config : impl Into < Config > ,
139
+ rcc : & mut Rcc ,
140
+ ) -> Result < Rx < Self , NoDMA > , InvalidConfig > ;
134
141
}
135
142
136
143
impl < USART : Instance , Otype > fmt:: Write for Serial < USART , Otype >
@@ -501,19 +508,45 @@ macro_rules! uart_lp {
501
508
impl SerialExt <LowPowerConfig > for $USARTX {
502
509
fn usart<Otype >(
503
510
self ,
504
- pins: (
505
- Option <impl Into <Self :: Tx <Otype >>>,
506
- Option <impl Into <Self :: Rx <PushPull >>>,
507
- ) ,
511
+ pins: ( impl Into <Self :: Tx <Otype >>, impl Into <Self :: Rx <PushPull >>) ,
508
512
config: impl Into <LowPowerConfig >,
509
513
rcc: & mut Rcc ,
510
514
) -> Result <Serial <Self , Otype >, InvalidConfig > {
511
515
Serial :: $usartX( self , pins, config, rcc)
512
516
}
517
+ fn tx<Otype >(
518
+ self ,
519
+ tx: impl Into <Self :: Tx <Otype >>,
520
+ config: impl Into <LowPowerConfig >,
521
+ rcc: & mut Rcc ,
522
+ ) -> Result <Tx <Self , NoDMA , Otype >, InvalidConfig > {
523
+ Serial :: <Self , _>:: _new( self , ( Some ( tx) , None :: <Self :: Rx <PushPull >>) , config, rcc)
524
+ . map( |s| s. split( ) . 0 )
525
+ }
526
+ fn rx(
527
+ self ,
528
+ rx: impl Into <Self :: Rx <PushPull >>,
529
+ config: impl Into <LowPowerConfig >,
530
+ rcc: & mut Rcc ,
531
+ ) -> Result <Rx <Self , NoDMA >, InvalidConfig > {
532
+ Serial :: <Self , _>:: _new( self , ( None :: <Self :: Tx <PushPull >>, Some ( rx) ) , config, rcc)
533
+ . map( |s| s. split( ) . 1 )
534
+ }
513
535
}
514
536
515
537
impl <Otype > Serial <$USARTX, Otype > {
516
538
pub fn $usartX(
539
+ usart: $USARTX,
540
+ pins: (
541
+ impl Into <<$USARTX as CommonPins >:: Tx <Otype >>,
542
+ impl Into <<$USARTX as CommonPins >:: Rx <PushPull >>,
543
+ ) ,
544
+ config: impl Into <LowPowerConfig >,
545
+ rcc: & mut Rcc ,
546
+ ) -> Result <Self , InvalidConfig > {
547
+ Self :: _new( usart, ( Some ( pins. 0 ) , Some ( pins. 1 ) ) , config, rcc)
548
+ }
549
+ fn _new(
517
550
usart: $USARTX,
518
551
pins: (
519
552
Option <impl Into <<$USARTX as CommonPins >:: Tx <Otype >>>,
@@ -629,19 +662,45 @@ macro_rules! uart_full {
629
662
impl SerialExt <FullConfig > for $USARTX {
630
663
fn usart<Otype >(
631
664
self ,
632
- pins: (
633
- Option <impl Into <Self :: Tx <Otype >>>,
634
- Option <impl Into <Self :: Rx <PushPull >>>,
635
- ) ,
665
+ pins: ( impl Into <Self :: Tx <Otype >>, impl Into <Self :: Rx <PushPull >>) ,
636
666
config: impl Into <FullConfig >,
637
667
rcc: & mut Rcc ,
638
668
) -> Result <Serial <Self , Otype >, InvalidConfig > {
639
669
Serial :: $usartX( self , pins, config, rcc)
640
670
}
671
+ fn tx<Otype >(
672
+ self ,
673
+ tx: impl Into <Self :: Tx <Otype >>,
674
+ config: impl Into <FullConfig >,
675
+ rcc: & mut Rcc ,
676
+ ) -> Result <Tx <Self , NoDMA , Otype >, InvalidConfig > {
677
+ Serial :: <Self , _>:: _new( self , ( Some ( tx) , None :: <Self :: Rx <PushPull >>) , config, rcc)
678
+ . map( |s| s. split( ) . 0 )
679
+ }
680
+ fn rx(
681
+ self ,
682
+ rx: impl Into <Self :: Rx <PushPull >>,
683
+ config: impl Into <FullConfig >,
684
+ rcc: & mut Rcc ,
685
+ ) -> Result <Rx <Self , NoDMA >, InvalidConfig > {
686
+ Serial :: <Self , _>:: _new( self , ( None :: <Self :: Tx <PushPull >>, Some ( rx) ) , config, rcc)
687
+ . map( |s| s. split( ) . 1 )
688
+ }
641
689
}
642
690
643
691
impl <Otype > Serial <$USARTX, Otype > {
644
692
pub fn $usartX(
693
+ usart: $USARTX,
694
+ pins: (
695
+ impl Into <<$USARTX as CommonPins >:: Tx <Otype >>,
696
+ impl Into <<$USARTX as CommonPins >:: Rx <PushPull >>,
697
+ ) ,
698
+ config: impl Into <FullConfig >,
699
+ rcc: & mut Rcc ,
700
+ ) -> Result <Self , InvalidConfig > {
701
+ Self :: _new( usart, ( Some ( pins. 0 ) , Some ( pins. 1 ) ) , config, rcc)
702
+ }
703
+ fn _new(
645
704
usart: $USARTX,
646
705
pins: (
647
706
Option <impl Into <<$USARTX as CommonPins >:: Tx <Otype >>>,
0 commit comments