49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
#![no_std]
 | 
						|
#![no_main]
 | 
						|
 | 
						|
use defmt::*;
 | 
						|
use embassy_executor::Spawner;
 | 
						|
use embassy_stm32::mode::Async;
 | 
						|
use embassy_stm32::peripherals::UART7;
 | 
						|
use embassy_stm32::usart::{Config, Uart, UartRx};
 | 
						|
use embassy_stm32::{bind_interrupts, peripherals, usart};
 | 
						|
use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex;
 | 
						|
use embassy_sync::channel::Channel;
 | 
						|
use {defmt_rtt as _, panic_probe as _};
 | 
						|
 | 
						|
bind_interrupts!(struct Irqs {
 | 
						|
    UART7 => usart::InterruptHandler<peripherals::UART7>;
 | 
						|
});
 | 
						|
 | 
						|
static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new();
 | 
						|
 | 
						|
#[embassy_executor::main]
 | 
						|
async fn main(spawner: Spawner) -> ! {
 | 
						|
    let p = embassy_stm32::init(Default::default());
 | 
						|
    info!("Hello World!");
 | 
						|
 | 
						|
    let config = Config::default();
 | 
						|
    let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, p.GPDMA1_CH0, p.GPDMA1_CH1, config).unwrap();
 | 
						|
    unwrap!(usart.blocking_write(b"Type 8 chars to echo!\r\n"));
 | 
						|
 | 
						|
    let (mut tx, rx) = usart.split();
 | 
						|
 | 
						|
    unwrap!(spawner.spawn(reader(rx)));
 | 
						|
 | 
						|
    loop {
 | 
						|
        let buf = CHANNEL.receive().await;
 | 
						|
        info!("writing...");
 | 
						|
        unwrap!(tx.write(&buf).await);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[embassy_executor::task]
 | 
						|
async fn reader(mut rx: UartRx<'static, UART7, Async>) {
 | 
						|
    let mut buf = [0; 8];
 | 
						|
    loop {
 | 
						|
        info!("reading...");
 | 
						|
        unwrap!(rx.read(&mut buf).await);
 | 
						|
        CHANNEL.send(buf).await;
 | 
						|
    }
 | 
						|
}
 |