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, |         rx_dma: impl Peripheral<P = RxDma> + 'd, | ||||||
|         config: Config, |         config: Config, | ||||||
|     ) -> Self { |     ) -> 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::enable(); | ||||||
|         T::reset(); |         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(); |         let pclk_freq = T::frequency(); | ||||||
| 
 | 
 | ||||||
|         // TODO: better calculation, including error checking and OVER8 if possible.
 |         // 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); |             tx.set_as_af(tx.af_num(), AFType::OutputPushPull); | ||||||
| 
 | 
 | ||||||
|             r.cr2().write(|_w| {}); |             r.cr2().write(|_w| {}); | ||||||
|             r.cr3().write(|_w| {}); |  | ||||||
|             r.brr().write_value(regs::Brr(div)); |             r.brr().write_value(regs::Brr(div)); | ||||||
|             r.cr1().write(|w| { |             r.cr1().write(|w| { | ||||||
|                 w.set_ue(true); |                 w.set_ue(true); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user