From fae99273c2dc0f4ae4d7032facb7420df289268b Mon Sep 17 00:00:00 2001 From: Filipriec Date: Tue, 3 Mar 2026 13:14:56 +0100 Subject: [PATCH] 2 sem --- 2sem_uart_flow_ctrl/src/bin/main.rs | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/2sem_uart_flow_ctrl/src/bin/main.rs b/2sem_uart_flow_ctrl/src/bin/main.rs index 0257bc8..153dac4 100644 --- a/2sem_uart_flow_ctrl/src/bin/main.rs +++ b/2sem_uart_flow_ctrl/src/bin/main.rs @@ -5,8 +5,8 @@ use defmt::*; use core::sync::atomic::{AtomicBool, Ordering}; use embassy_executor::Spawner; -use embassy_stm32::usart::{Config, Uart, UartRx, InterruptHandler}; -use embassy_stm32::peripherals::USART1; +use embassy_stm32::usart::{Config, Uart, UartRx, UartTx, InterruptHandler}; +use embassy_stm32::peripherals::{USART1, USART3}; use embassy_stm32::bind_interrupts; use embassy_time::{Duration, Timer}; use embassy_sync::channel::Channel; @@ -16,6 +16,7 @@ use {defmt_rtt as _, panic_probe as _}; bind_interrupts!(struct Irqs { USART1 => InterruptHandler; + USART3 => InterruptHandler; }); static PIPE: Channel = Channel::new(); @@ -29,7 +30,7 @@ async fn main(spawner: Spawner) { let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let usart = Uart::new( + let dev_usart = Uart::new( p.USART1, p.PA10, p.PA9, @@ -38,8 +39,19 @@ async fn main(spawner: Spawner) { p.GPDMA1_CH1, // RX DMA config, ).unwrap(); - let (mut tx, rx) = usart.split(); - spawner.spawn(rx_task(rx)).unwrap(); + + let uart = Uart::new( + p.USART3, + p.PD9, // RX zo zariadenia + p.PD8, // TX do zariadenia + Irqs, + p.GPDMA1_CH2, + p.GPDMA1_CH3, + config, + ).unwrap(); + let (mut tx, rx) = uart.split(); + let (dev_tx, dev_rx) = dev_usart.split(); + spawner.spawn(rx_task(rx, dev_tx)).unwrap(); spawner.spawn(toggle_rec_task()).unwrap(); let sender = PIPE.sender(); @@ -74,7 +86,10 @@ async fn main(spawner: Spawner) { } #[embassy_executor::task] -async fn rx_task(mut rx: UartRx<'static, embassy_stm32::mode::Async>) { +async fn rx_task( + mut rx: UartRx<'static, embassy_stm32::mode::Async>, + mut pc_tx: UartTx<'static, embassy_stm32::mode::Async> +) { let mut buf = [0u8; 1]; loop { if rx.read(&mut buf).await.is_ok() { @@ -89,6 +104,7 @@ async fn rx_task(mut rx: UartRx<'static, embassy_stm32::mode::Async>) { } _ => {} } + let _ = pc_tx.write(&buf).await; } } }