Merge #987
987: (embassy-stm32): uart flowcontrol r=Dirbaio a=MathiasKoch Add RTS & CTS flow control to stm32 UARTs Co-authored-by: Mathias <mk@blackbird.online>
This commit is contained in:
		
						commit
						1b249ca72d
					
				| @ -222,10 +222,48 @@ impl<'d, T: BasicInstance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> { | ||||
|         rx_dma: impl Peripheral<P = RxDma> + 'd, | ||||
|         config: Config, | ||||
|     ) -> Self { | ||||
|         into_ref!(_inner, rx, tx, tx_dma, rx_dma); | ||||
|         T::enable(); | ||||
|         T::reset(); | ||||
| 
 | ||||
|         Self::new_inner(_inner, rx, tx, tx_dma, rx_dma, config) | ||||
|     } | ||||
| 
 | ||||
|     pub fn new_with_rtscts( | ||||
|         _inner: impl Peripheral<P = T> + 'd, | ||||
|         rx: impl Peripheral<P = impl RxPin<T>> + 'd, | ||||
|         tx: impl Peripheral<P = impl TxPin<T>> + 'd, | ||||
|         rts: impl Peripheral<P = impl RtsPin<T>> + 'd, | ||||
|         cts: impl Peripheral<P = impl CtsPin<T>> + 'd, | ||||
|         tx_dma: impl Peripheral<P = TxDma> + 'd, | ||||
|         rx_dma: impl Peripheral<P = RxDma> + 'd, | ||||
|         config: Config, | ||||
|     ) -> Self { | ||||
|         into_ref!(cts, rts); | ||||
| 
 | ||||
|         T::enable(); | ||||
|         T::reset(); | ||||
| 
 | ||||
|         unsafe { | ||||
|             rts.set_as_af(rts.af_num(), AFType::OutputPushPull); | ||||
|             cts.set_as_af(cts.af_num(), AFType::Input); | ||||
|             T::regs().cr3().write(|w| { | ||||
|                 w.set_rtse(true); | ||||
|                 w.set_ctse(true); | ||||
|             }); | ||||
|         } | ||||
|         Self::new_inner(_inner, rx, tx, tx_dma, rx_dma, config) | ||||
|     } | ||||
| 
 | ||||
|     fn new_inner( | ||||
|         _inner: impl Peripheral<P = T> + 'd, | ||||
|         rx: impl Peripheral<P = impl RxPin<T>> + 'd, | ||||
|         tx: impl Peripheral<P = impl TxPin<T>> + 'd, | ||||
|         tx_dma: impl Peripheral<P = TxDma> + 'd, | ||||
|         rx_dma: impl Peripheral<P = RxDma> + 'd, | ||||
|         config: Config, | ||||
|     ) -> Self { | ||||
|         into_ref!(_inner, rx, tx, tx_dma, rx_dma); | ||||
| 
 | ||||
|         let pclk_freq = T::frequency(); | ||||
| 
 | ||||
|         // TODO: better calculation, including error checking and OVER8 if possible.
 | ||||
| @ -238,7 +276,6 @@ impl<'d, T: BasicInstance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> { | ||||
|             tx.set_as_af(tx.af_num(), AFType::OutputPushPull); | ||||
| 
 | ||||
|             r.cr2().write(|_w| {}); | ||||
|             r.cr3().write(|_w| {}); | ||||
|             r.brr().write_value(regs::Brr(div)); | ||||
|             r.cr1().write(|w| { | ||||
|                 w.set_ue(true); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user