From f6b9c1ddaffeab5f22db5552711ceb5a595d2e3a Mon Sep 17 00:00:00 2001 From: xoviat Date: Mon, 8 Dec 2025 09:26:55 -0600 Subject: stm32/tests: allow some noise --- tests/stm32/src/bin/usart_dma.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/stm32/src/bin/usart_dma.rs b/tests/stm32/src/bin/usart_dma.rs index a34498376..9f610739d 100644 --- a/tests/stm32/src/bin/usart_dma.rs +++ b/tests/stm32/src/bin/usart_dma.rs @@ -7,7 +7,7 @@ use common::*; use defmt::assert_eq; use embassy_executor::Spawner; use embassy_futures::join::join; -use embassy_stm32::usart::{Config, Uart}; +use embassy_stm32::usart::{Config, Error, Uart}; #[embassy_executor::main] async fn main(_spawner: Spawner) { @@ -32,6 +32,7 @@ async fn main(_spawner: Spawner) { let (mut tx, mut rx) = usart.split(); + let mut noise_count = 0; for n in 0..42 { for i in 0..LEN { tx_buf[i] = (i ^ n) as u8; @@ -40,17 +41,30 @@ async fn main(_spawner: Spawner) { let tx_fut = async { tx.write(&tx_buf).await.unwrap(); }; + + let mut is_noisy = false; let rx_fut = async { - rx.read(&mut rx_buf).await.unwrap(); + match rx.read(&mut rx_buf).await { + Ok(()) => {} + Err(Error::Noise) => is_noisy = true, + _ => defmt::panic!(), + } }; // note: rx needs to be polled first, to workaround this bug: // https://github.com/embassy-rs/embassy/issues/1426 join(rx_fut, tx_fut).await; + if is_noisy { + noise_count += 1; + continue; + } + assert_eq!(tx_buf, rx_buf); } + defmt::assert!(noise_count < 3); + // Test flush doesn't hang. Check multiple combinations of async+blocking. tx.write(&tx_buf).await.unwrap(); tx.flush().await.unwrap(); -- cgit