Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion embassy-stm32/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

<!-- next-header -->
## Unreleased - ReleaseDate

- add: Added read_until_idle() example for stm32u5
- fix: Fixed stm32 Uart::read_until_idle() bug in [#3900] [#4452] [#4689]
- fix: Fixed STM32H5 builds requiring time feature
- feat: Derive Clone, Copy for QSPI Config
- fix: stm32/i2c in master mode (blocking): subsequent transmissions failed after a NACK was received
Expand Down
9 changes: 6 additions & 3 deletions embassy-stm32/src/usart/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -876,9 +876,12 @@ impl<'d> UartRx<'d, Async> {
Either::Left(((), _)) => Ok(ReadCompletionEvent::DmaCompleted),

// Idle line detected first
Either::Right((Ok(()), transfer)) => Ok(ReadCompletionEvent::Idle(
buffer_len - transfer.get_remaining_transfers() as usize,
)),
Either::Right((Ok(()), mut transfer)) => {
transfer.request_pause();
Ok(ReadCompletionEvent::Idle(
buffer_len - transfer.get_remaining_transfers() as usize,
))
}

// error occurred
Either::Right((Err(e), _)) => Err(e),
Expand Down
27 changes: 27 additions & 0 deletions examples/stm32u5/src/bin/uart.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#![no_std]
#![no_main]

use defmt::*;
use embassy_executor::Spawner;
use embassy_stm32::usart::{self, Config, Uart};
use embassy_stm32::{bind_interrupts, peripherals};
use {defmt_rtt as _, panic_probe as _};

bind_interrupts!(struct Irqs{
USART1 => usart::InterruptHandler<peripherals::USART1>;
});

#[embassy_executor::main]
async fn main(_spawner: Spawner) -> ! {
let p = embassy_stm32::init(Default::default());
info!("Hello World!");
let config = Config::default();
let mut uart = Uart::new(p.USART1, p.PA10, p.PA9, Irqs, p.GPDMA1_CH0, p.GPDMA1_CH1, config).unwrap();
let mut buffer = [0u8; 32];
loop {
if let Ok(len) = uart.read_until_idle(&mut buffer).await {
info!("{}", &buffer[0..len]);
uart.write(&buffer[0..len]).await.unwrap()
}
}
}