Skip to content

Commit 3ffee5e

Browse files
authored
Merge pull request #3965 from toon23/stm32_usart-pin_config
Stm32 usart: implement pin config for cts, tx, rts and de
2 parents 59c42bd + 94c208b commit 3ffee5e

File tree

3 files changed

+91
-96
lines changed

3 files changed

+91
-96
lines changed

embassy-stm32/src/usart/buffered.rs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ use embassy_sync::waitqueue::AtomicWaker;
1313
use super::DePin;
1414
use super::{
1515
clear_interrupt_flags, configure, half_duplex_set_rx_tx_before_write, rdr, reconfigure, send_break, set_baudrate,
16-
sr, tdr, Config, ConfigError, CtsPin, Duplex, Error, HalfDuplexConfig, HalfDuplexReadback, Info, Instance, Regs,
17-
RtsPin, RxPin, TxPin,
16+
sr, tdr, Config, ConfigError, CtsPin, Duplex, Error, HalfDuplexReadback, Info, Instance, Regs, RtsPin, RxPin,
17+
TxPin,
1818
};
19-
use crate::gpio::{AfType, AnyPin, OutputType, Pull, SealedPin as _, Speed};
19+
use crate::gpio::{AfType, AnyPin, Pull, SealedPin as _};
2020
use crate::interrupt::{self, InterruptExt};
2121
use crate::time::Hertz;
2222

@@ -217,8 +217,8 @@ impl<'d> BufferedUart<'d> {
217217
) -> Result<Self, ConfigError> {
218218
Self::new_inner(
219219
peri,
220-
new_pin!(rx, AfType::input(config.rx_pull)),
221-
new_pin!(tx, AfType::output(OutputType::PushPull, Speed::Medium)),
220+
new_pin!(rx, config.rx_af()),
221+
new_pin!(tx, config.tx_af()),
222222
None,
223223
None,
224224
None,
@@ -242,10 +242,10 @@ impl<'d> BufferedUart<'d> {
242242
) -> Result<Self, ConfigError> {
243243
Self::new_inner(
244244
peri,
245-
new_pin!(rx, AfType::input(Pull::None)),
246-
new_pin!(tx, AfType::output(OutputType::PushPull, Speed::Medium)),
247-
new_pin!(rts, AfType::output(OutputType::PushPull, Speed::Medium)),
248-
new_pin!(cts, AfType::input(Pull::None)),
245+
new_pin!(rx, config.rx_af()),
246+
new_pin!(tx, config.tx_af()),
247+
new_pin!(rts, config.rts_config.af_type()),
248+
new_pin!(cts, AfType::input(config.cts_pull)),
249249
None,
250250
tx_buffer,
251251
rx_buffer,
@@ -266,8 +266,8 @@ impl<'d> BufferedUart<'d> {
266266
) -> Result<Self, ConfigError> {
267267
Self::new_inner(
268268
peri,
269-
new_pin!(rx, AfType::input(Pull::None)),
270-
new_pin!(tx, AfType::output(OutputType::PushPull, Speed::Medium)),
269+
new_pin!(rx, config.rx_af()),
270+
new_pin!(tx, config.tx_af()),
271271
None,
272272
None,
273273
new_pin!(rts, AfType::input(Pull::None)), // RTS mapped used as DE
@@ -290,8 +290,8 @@ impl<'d> BufferedUart<'d> {
290290
) -> Result<Self, ConfigError> {
291291
Self::new_inner(
292292
peri,
293-
new_pin!(rx, AfType::input(Pull::None)),
294-
new_pin!(tx, AfType::output(OutputType::PushPull, Speed::Medium)),
293+
new_pin!(rx, config.rx_af()),
294+
new_pin!(tx, config.tx_af()),
295295
new_pin!(rts, AfType::input(Pull::None)),
296296
None, // no CTS
297297
None, // no DE
@@ -315,11 +315,11 @@ impl<'d> BufferedUart<'d> {
315315
) -> Result<Self, ConfigError> {
316316
Self::new_inner(
317317
peri,
318-
new_pin!(rx, AfType::input(config.rx_pull)),
319-
new_pin!(tx, AfType::output(OutputType::PushPull, Speed::Medium)),
318+
new_pin!(rx, config.rx_af()),
319+
new_pin!(tx, config.tx_af()),
320320
None,
321321
None,
322-
new_pin!(de, AfType::output(OutputType::PushPull, Speed::Medium)),
322+
new_pin!(de, config.de_config.af_type()),
323323
tx_buffer,
324324
rx_buffer,
325325
config,
@@ -346,7 +346,6 @@ impl<'d> BufferedUart<'d> {
346346
rx_buffer: &'d mut [u8],
347347
mut config: Config,
348348
readback: HalfDuplexReadback,
349-
half_duplex: HalfDuplexConfig,
350349
) -> Result<Self, ConfigError> {
351350
#[cfg(not(any(usart_v1, usart_v2)))]
352351
{
@@ -357,7 +356,7 @@ impl<'d> BufferedUart<'d> {
357356
Self::new_inner(
358357
peri,
359358
None,
360-
new_pin!(tx, half_duplex.af_type()),
359+
new_pin!(tx, config.tx_af()),
361360
None,
362361
None,
363362
None,
@@ -386,14 +385,13 @@ impl<'d> BufferedUart<'d> {
386385
rx_buffer: &'d mut [u8],
387386
mut config: Config,
388387
readback: HalfDuplexReadback,
389-
half_duplex: HalfDuplexConfig,
390388
) -> Result<Self, ConfigError> {
391389
config.swap_rx_tx = true;
392390
config.duplex = Duplex::Half(readback);
393391

394392
Self::new_inner(
395393
peri,
396-
new_pin!(rx, half_duplex.af_type()),
394+
new_pin!(rx, config.rx_af()),
397395
None,
398396
None,
399397
None,

0 commit comments

Comments
 (0)