diff --git a/usart_async/src/bin/main.rs b/usart_async/src/bin/main.rs index 7150307..db6a6fb 100644 --- a/usart_async/src/bin/main.rs +++ b/usart_async/src/bin/main.rs @@ -3,26 +3,48 @@ #![no_main] use defmt::*; -use embassy_stm32::usart::{Config, Uart}; +use embassy_executor::Spawner; use embassy_time::{Duration, Timer}; +use embassy_stm32::usart::{Config, Uart}; +use embassy_stm32::bind_interrupts; +use embassy_stm32::mode::Async; use {defmt_rtt as _, panic_probe as _}; -#[cortex_m_rt::entry] -fn main() -> ! { - info!("tititititi"); +bind_interrupts!( + struct Irqs { + USART1 => embassy_stm32::usart::InterruptHandler; + } +); +#[embassy_executor::task] +async fn receive_uart(mut uart: Uart<'static, Async>) { + let mut buf = [0u8; 1]; + loop { + unwrap!(uart.read(&mut buf).await); + unwrap!(uart.write(&buf).await); + unwrap!(uart.write(b"a\r\n").await); + info!("uart received {}", buf[0]); + Timer::after(Duration::from_secs(1)).await; + } +} + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + info!("tititititi"); let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let mut usart = Uart::new_blocking(p.USART1, p.PA10, p.PA9, config).unwrap(); + let usart = Uart::new(p.USART1, p.PA10, p.PA9, Irqs, p.GPDMA1_CH1, p.GPDMA1_CH0, config).unwrap(); info!("starting echo"); + spawner.spawn(receive_uart(usart)).unwrap(); - let mut buf = [0u8; 1]; + let mut counter: u8 = 230; loop { - unwrap!(usart.blocking_read(&mut buf)); - unwrap!(usart.blocking_write(&buf)); - unwrap!(usart.blocking_write(b"a\r\n")); - Timer::after(Duration::from_secs(2)); + counter = counter.wrapping_add(1); + info!("CPU doing other work: {}", counter); + Timer::after(Duration::from_millis(300)).await; + } + }