diff options
| author | Vincent Stakenburg <[email protected]> | 2022-12-09 14:26:09 +0100 |
|---|---|---|
| committer | Vincent Stakenburg <[email protected]> | 2022-12-09 14:26:09 +0100 |
| commit | 236d1048444fbaeddf1210d237bf9ab319f60079 (patch) | |
| tree | 40385f10ed4531cbac4758a8861061f27bf785d0 | |
| parent | 58ab82904970f2df3984e54c722955a7b7c81391 (diff) | |
embassy-stm32: add rs485 driver enable to uart
| -rw-r--r-- | embassy-stm32/build.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/buffered.rs | 27 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 26 |
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); | |||
| 1040 | pin_trait!(CtsPin, BasicInstance); | 1065 | pin_trait!(CtsPin, BasicInstance); |
| 1041 | pin_trait!(RtsPin, BasicInstance); | 1066 | pin_trait!(RtsPin, BasicInstance); |
| 1042 | pin_trait!(CkPin, BasicInstance); | 1067 | pin_trait!(CkPin, BasicInstance); |
| 1068 | pin_trait!(DePin, BasicInstance); | ||
| 1043 | 1069 | ||
| 1044 | dma_trait!(TxDma, BasicInstance); | 1070 | dma_trait!(TxDma, BasicInstance); |
| 1045 | dma_trait!(RxDma, BasicInstance); | 1071 | dma_trait!(RxDma, BasicInstance); |
