stm32/uart: add swap_rx_tx
This commit is contained in:
parent
a1d3bc30fa
commit
3df2c71e6c
@ -116,6 +116,10 @@ pub struct Config {
|
|||||||
/// but will effectively disable noise detection.
|
/// but will effectively disable noise detection.
|
||||||
#[cfg(not(usart_v1))]
|
#[cfg(not(usart_v1))]
|
||||||
pub assume_noise_free: bool,
|
pub assume_noise_free: bool,
|
||||||
|
|
||||||
|
/// Set this to true to swap the RX and TX pins.
|
||||||
|
#[cfg(any(usart_v3, usart_v4))]
|
||||||
|
pub swap_rx_tx: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
@ -129,6 +133,8 @@ impl Default for Config {
|
|||||||
detect_previous_overrun: false,
|
detect_previous_overrun: false,
|
||||||
#[cfg(not(usart_v1))]
|
#[cfg(not(usart_v1))]
|
||||||
assume_noise_free: false,
|
assume_noise_free: false,
|
||||||
|
#[cfg(any(usart_v3, usart_v4))]
|
||||||
|
swap_rx_tx: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -688,8 +694,20 @@ impl<'d, T: BasicInstance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> {
|
|||||||
|
|
||||||
let r = T::regs();
|
let r = T::regs();
|
||||||
|
|
||||||
rx.set_as_af(rx.af_num(), AFType::Input);
|
#[allow(unused_variables)]
|
||||||
tx.set_as_af(tx.af_num(), AFType::OutputPushPull);
|
let swap_rx_tx = false;
|
||||||
|
|
||||||
|
#[cfg(any(usart_v3, usart_v4))]
|
||||||
|
let swap_rx_tx = config.swap_rx_tx;
|
||||||
|
|
||||||
|
if swap_rx_tx {
|
||||||
|
let (rx, tx) = (tx, rx);
|
||||||
|
rx.set_as_af(rx.af_num(), AFType::Input);
|
||||||
|
tx.set_as_af(tx.af_num(), AFType::OutputPushPull);
|
||||||
|
} else {
|
||||||
|
rx.set_as_af(rx.af_num(), AFType::Input);
|
||||||
|
tx.set_as_af(tx.af_num(), AFType::OutputPushPull);
|
||||||
|
}
|
||||||
|
|
||||||
configure(r, &config, T::frequency(), T::KIND, true, true);
|
configure(r, &config, T::frequency(), T::KIND, true, true);
|
||||||
|
|
||||||
@ -847,6 +865,9 @@ fn configure(r: Regs, config: &Config, pclk_freq: Hertz, kind: Kind, enable_rx:
|
|||||||
StopBits::STOP1P5 => vals::Stop::STOP1P5,
|
StopBits::STOP1P5 => vals::Stop::STOP1P5,
|
||||||
StopBits::STOP2 => vals::Stop::STOP2,
|
StopBits::STOP2 => vals::Stop::STOP2,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#[cfg(any(usart_v3, usart_v4))]
|
||||||
|
w.set_swap(config.swap_rx_tx);
|
||||||
});
|
});
|
||||||
r.cr1().write(|w| {
|
r.cr1().write(|w| {
|
||||||
// enable uart
|
// enable uart
|
||||||
|
Loading…
Reference in New Issue
Block a user