aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/usart/buffered.rs21
-rw-r--r--embassy-stm32/src/usart/ringbuffered.rs9
2 files changed, 27 insertions, 3 deletions
diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs
index f7b2bf4b4..814be2858 100644
--- a/embassy-stm32/src/usart/buffered.rs
+++ b/embassy-stm32/src/usart/buffered.rs
@@ -12,8 +12,8 @@ use embassy_sync::waitqueue::AtomicWaker;
12#[cfg(not(any(usart_v1, usart_v2)))] 12#[cfg(not(any(usart_v1, usart_v2)))]
13use super::DePin; 13use super::DePin;
14use super::{ 14use super::{
15 clear_interrupt_flags, configure, rdr, reconfigure, send_break, sr, tdr, Config, ConfigError, CtsPin, Error, Info, 15 clear_interrupt_flags, configure, rdr, reconfigure, send_break, set_baudrate, sr, tdr, Config, ConfigError, CtsPin,
16 Instance, Regs, RtsPin, RxPin, TxPin, 16 Error, Info, Instance, Regs, RtsPin, RxPin, TxPin,
17}; 17};
18use crate::gpio::{AfType, AnyPin, OutputType, Pull, SealedPin as _, Speed}; 18use crate::gpio::{AfType, AnyPin, OutputType, Pull, SealedPin as _, Speed};
19use crate::interrupt::{self, InterruptExt}; 19use crate::interrupt::{self, InterruptExt};
@@ -441,6 +441,13 @@ impl<'d> BufferedUart<'d> {
441 pub fn send_break(&self) { 441 pub fn send_break(&self) {
442 self.tx.send_break() 442 self.tx.send_break()
443 } 443 }
444
445 /// Set baudrate
446 pub fn set_baudrate(&self, baudrate: u32) -> Result<(), ConfigError> {
447 self.tx.set_baudrate(baudrate)?;
448 self.rx.set_baudrate(baudrate)?;
449 Ok(())
450 }
444} 451}
445 452
446impl<'d> BufferedUartRx<'d> { 453impl<'d> BufferedUartRx<'d> {
@@ -535,6 +542,11 @@ impl<'d> BufferedUartRx<'d> {
535 542
536 Ok(()) 543 Ok(())
537 } 544 }
545
546 /// Set baudrate
547 pub fn set_baudrate(&self, baudrate: u32) -> Result<(), ConfigError> {
548 set_baudrate(self.info, self.kernel_clock, baudrate)
549 }
538} 550}
539 551
540impl<'d> BufferedUartTx<'d> { 552impl<'d> BufferedUartTx<'d> {
@@ -625,6 +637,11 @@ impl<'d> BufferedUartTx<'d> {
625 pub fn send_break(&self) { 637 pub fn send_break(&self) {
626 send_break(&self.info.regs); 638 send_break(&self.info.regs);
627 } 639 }
640
641 /// Set baudrate
642 pub fn set_baudrate(&self, baudrate: u32) -> Result<(), ConfigError> {
643 set_baudrate(self.info, self.kernel_clock, baudrate)
644 }
628} 645}
629 646
630impl<'d> Drop for BufferedUartRx<'d> { 647impl<'d> Drop for BufferedUartRx<'d> {
diff --git a/embassy-stm32/src/usart/ringbuffered.rs b/embassy-stm32/src/usart/ringbuffered.rs
index a791ac2a9..560ce4e8f 100644
--- a/embassy-stm32/src/usart/ringbuffered.rs
+++ b/embassy-stm32/src/usart/ringbuffered.rs
@@ -8,7 +8,9 @@ use embassy_hal_internal::PeripheralRef;
8use embedded_io_async::ReadReady; 8use embedded_io_async::ReadReady;
9use futures_util::future::{select, Either}; 9use futures_util::future::{select, Either};
10 10
11use super::{clear_interrupt_flags, rdr, reconfigure, sr, Config, ConfigError, Error, Info, State, UartRx}; 11use super::{
12 clear_interrupt_flags, rdr, reconfigure, set_baudrate, sr, Config, ConfigError, Error, Info, State, UartRx,
13};
12use crate::dma::ReadableRingBuffer; 14use crate::dma::ReadableRingBuffer;
13use crate::gpio::{AnyPin, SealedPin as _}; 15use crate::gpio::{AnyPin, SealedPin as _};
14use crate::mode::Async; 16use crate::mode::Async;
@@ -213,6 +215,11 @@ impl<'d> RingBufferedUartRx<'d> {
213 Either::Right(((), _)) => Ok(()), 215 Either::Right(((), _)) => Ok(()),
214 } 216 }
215 } 217 }
218
219 /// Set baudrate
220 pub fn set_baudrate(&self, baudrate: u32) -> Result<(), ConfigError> {
221 set_baudrate(self.info, self.kernel_clock, baudrate)
222 }
216} 223}
217 224
218impl Drop for RingBufferedUartRx<'_> { 225impl Drop for RingBufferedUartRx<'_> {