From 1b768d7dc3e7918f22b02f7fd782deeecabaf909 Mon Sep 17 00:00:00 2001 From: Albin Hedman Date: Sun, 19 Jan 2025 19:30:39 +0100 Subject: [PATCH] Cleanup uart examples --- examples/uart-fifo.rs | 24 ++++++++++++------------ examples/uart.rs | 6 +++--- src/serial/usart.rs | 1 + 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/examples/uart-fifo.rs b/examples/uart-fifo.rs index 74084b97..801ae471 100644 --- a/examples/uart-fifo.rs +++ b/examples/uart-fifo.rs @@ -7,13 +7,12 @@ extern crate cortex_m_rt as rt; use core::fmt::Write; +use embedded_io::{Read, ReadReady}; use hal::prelude::*; use hal::pwr::PwrExt; use hal::serial::*; use hal::{rcc, stm32}; use stm32g4xx_hal as hal; -// TODO: switch to embedded-hal-nb -use hal::hal_02::serial::Read; use cortex_m_rt::entry; @@ -52,23 +51,24 @@ fn main() -> ! { let (mut tx1, mut rx1) = usart.split(); + let mut buffer = [0; 4]; let mut cnt = 0; loop { if rx1.fifo_threshold_reached() { loop { - match rx1.read() { - Err(nb::Error::WouldBlock) => { - // no more data available in fifo - break; - } - Err(nb::Error::Other(_err)) => { + match rx1.read_ready() { + Ok(true) => (), + Ok(false) => break, // no more data available in fifo + Err(e) => { // Handle other error Overrun, Framing, Noise or Parity - } - Ok(byte) => { - writeln!(tx1, "{}: {}\r", cnt, byte).unwrap(); - cnt += 1; + utils::logger::error!("Error: {:?}", e); } } + + let count = rx1.read(&mut buffer).unwrap(); + let bytes = &buffer[count]; + writeln!(tx1, "{}: {}\r", cnt, bytes).unwrap(); + cnt += count; } } } diff --git a/examples/uart.rs b/examples/uart.rs index a7154f39..e4ec6519 100644 --- a/examples/uart.rs +++ b/examples/uart.rs @@ -11,7 +11,6 @@ use hal::{rcc, stm32}; use stm32g4xx_hal as hal; use cortex_m_rt::entry; -use nb::block; use utils::logger::info; #[macro_use] @@ -57,10 +56,11 @@ fn main() -> ! { usart.read_exact(&mut read_buf).unwrap(); usart.write_all(&read_buf).unwrap(); + let mut single_byte_buffer = [0; 1]; let mut cnt = 0; loop { - match block!(embedded_hal_old::serial::Read::read(&mut usart)) { - Ok(byte) => writeln!(usart, "{}: {}\r", cnt, byte).unwrap(), + match usart.read_exact(&mut single_byte_buffer) { + Ok(()) => writeln!(usart, "{}: {}\r", cnt, single_byte_buffer[0]).unwrap(), Err(e) => writeln!(usart, "E: {:?}\r", e).unwrap(), }; cnt += 1; diff --git a/src/serial/usart.rs b/src/serial/usart.rs index 4aa5ae41..f4a5dc12 100644 --- a/src/serial/usart.rs +++ b/src/serial/usart.rs @@ -18,6 +18,7 @@ use embedded_io::{ReadReady, WriteReady}; use crate::serial::config::*; /// Serial error #[derive(Debug)] +#[cfg_attr(feature = "defmt", derive(defmt::Format))] pub enum Error { /// Framing error Framing,