aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Stakenburg <[email protected]>2022-12-09 14:26:09 +0100
committerVincent Stakenburg <[email protected]>2022-12-09 14:26:09 +0100
commit236d1048444fbaeddf1210d237bf9ab319f60079 (patch)
tree40385f10ed4531cbac4758a8861061f27bf785d0
parent58ab82904970f2df3984e54c722955a7b7c81391 (diff)
embassy-stm32: add rs485 driver enable to uart
-rw-r--r--embassy-stm32/build.rs2
-rw-r--r--embassy-stm32/src/usart/buffered.rs27
-rw-r--r--embassy-stm32/src/usart/mod.rs26
3 files changed, 55 insertions, 0 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index a4709f4ca..ddfa97b29 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -244,11 +244,13 @@ fn main() {
244 (("usart", "CTS"), quote!(crate::usart::CtsPin)), 244 (("usart", "CTS"), quote!(crate::usart::CtsPin)),
245 (("usart", "RTS"), quote!(crate::usart::RtsPin)), 245 (("usart", "RTS"), quote!(crate::usart::RtsPin)),
246 (("usart", "CK"), quote!(crate::usart::CkPin)), 246 (("usart", "CK"), quote!(crate::usart::CkPin)),
247 (("usart", "DE"), quote!(crate::usart::DePin)),
247 (("lpuart", "TX"), quote!(crate::usart::TxPin)), 248 (("lpuart", "TX"), quote!(crate::usart::TxPin)),
248 (("lpuart", "RX"), quote!(crate::usart::RxPin)), 249 (("lpuart", "RX"), quote!(crate::usart::RxPin)),
249 (("lpuart", "CTS"), quote!(crate::usart::CtsPin)), 250 (("lpuart", "CTS"), quote!(crate::usart::CtsPin)),
250 (("lpuart", "RTS"), quote!(crate::usart::RtsPin)), 251 (("lpuart", "RTS"), quote!(crate::usart::RtsPin)),
251 (("lpuart", "CK"), quote!(crate::usart::CkPin)), 252 (("lpuart", "CK"), quote!(crate::usart::CkPin)),
253 (("lpuart", "DE"), quote!(crate::usart::DePin)),
252 (("spi", "SCK"), quote!(crate::spi::SckPin)), 254 (("spi", "SCK"), quote!(crate::spi::SckPin)),
253 (("spi", "MOSI"), quote!(crate::spi::MosiPin)), 255 (("spi", "MOSI"), quote!(crate::spi::MosiPin)),
254 (("spi", "MISO"), quote!(crate::spi::MisoPin)), 256 (("spi", "MISO"), quote!(crate::spi::MisoPin)),
diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs
index d024bedcf..874af1d73 100644
--- a/embassy-stm32/src/usart/buffered.rs
+++ b/embassy-stm32/src/usart/buffered.rs
@@ -89,6 +89,33 @@ impl<'d, T: BasicInstance> BufferedUart<'d, T> {
89 Self::new_inner(state, peri, rx, tx, irq, tx_buffer, rx_buffer, config) 89 Self::new_inner(state, peri, rx, tx, irq, tx_buffer, rx_buffer, config)
90 } 90 }
91 91
92 #[cfg(not(usart_v1))]
93 pub fn new_with_de(
94 state: &'d mut State<'d, T>,
95 peri: impl Peripheral<P = T> + 'd,
96 rx: impl Peripheral<P = impl RxPin<T>> + 'd,
97 tx: impl Peripheral<P = impl TxPin<T>> + 'd,
98 irq: impl Peripheral<P = T::Interrupt> + 'd,
99 de: impl Peripheral<P = impl DePin<T>> + 'd,
100 tx_buffer: &'d mut [u8],
101 rx_buffer: &'d mut [u8],
102 config: Config,
103 ) -> BufferedUart<'d, T> {
104 into_ref!(de);
105
106 T::enable();
107 T::reset();
108
109 unsafe {
110 de.set_as_af(de.af_num(), AFType::OutputPushPull);
111 T::regs().cr3().write(|w| {
112 w.set_dem(true);
113 });
114 }
115
116 Self::new_inner(state, peri, rx, tx, irq, tx_buffer, rx_buffer, config)
117 }
118
92 fn new_inner( 119 fn new_inner(
93 state: &'d mut State<'d, T>, 120 state: &'d mut State<'d, T>,
94 _peri: impl Peripheral<P = T> + 'd, 121 _peri: impl Peripheral<P = T> + 'd,
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index aea054a4b..ea75361fa 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -646,6 +646,31 @@ impl<'d, T: BasicInstance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> {
646 Self::new_inner(peri, rx, tx, irq, tx_dma, rx_dma, config) 646 Self::new_inner(peri, rx, tx, irq, tx_dma, rx_dma, config)
647 } 647 }
648 648
649 #[cfg(not(usart_v1))]
650 pub fn new_with_de(
651 peri: impl Peripheral<P = T> + 'd,
652 rx: impl Peripheral<P = impl RxPin<T>> + 'd,
653 tx: impl Peripheral<P = impl TxPin<T>> + 'd,
654 irq: impl Peripheral<P = T::Interrupt> + 'd,
655 de: impl Peripheral<P = impl DePin<T>> + 'd,
656 tx_dma: impl Peripheral<P = TxDma> + 'd,
657 rx_dma: impl Peripheral<P = RxDma> + 'd,
658 config: Config,
659 ) -> Self {
660 into_ref!(de);
661
662 T::enable();
663 T::reset();
664
665 unsafe {
666 de.set_as_af(de.af_num(), AFType::OutputPushPull);
667 T::regs().cr3().write(|w| {
668 w.set_dem(true);
669 });
670 }
671 Self::new_inner(peri, rx, tx, irq, tx_dma, rx_dma, config)
672 }
673
649 fn new_inner( 674 fn new_inner(
650 peri: impl Peripheral<P = T> + 'd, 675 peri: impl Peripheral<P = T> + 'd,
651 rx: impl Peripheral<P = impl RxPin<T>> + 'd, 676 rx: impl Peripheral<P = impl RxPin<T>> + 'd,
@@ -1040,6 +1065,7 @@ pin_trait!(TxPin, BasicInstance);
1040pin_trait!(CtsPin, BasicInstance); 1065pin_trait!(CtsPin, BasicInstance);
1041pin_trait!(RtsPin, BasicInstance); 1066pin_trait!(RtsPin, BasicInstance);
1042pin_trait!(CkPin, BasicInstance); 1067pin_trait!(CkPin, BasicInstance);
1068pin_trait!(DePin, BasicInstance);
1043 1069
1044dma_trait!(TxDma, BasicInstance); 1070dma_trait!(TxDma, BasicInstance);
1045dma_trait!(RxDma, BasicInstance); 1071dma_trait!(RxDma, BasicInstance);