From 55398e8459f4822ecd663099320856f82a8765a1 Mon Sep 17 00:00:00 2001 From: Priec Date: Wed, 3 Dec 2025 23:03:56 +0100 Subject: [PATCH] moved uart to init file, now main is purely about low power modes and sleeps --- semestralka_2_uart/src/bin/main.rs | 35 ++--------------- semestralka_2_uart/src/hw_uart_pc/init.rs | 47 ++++++++++++++++++++++- 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/semestralka_2_uart/src/bin/main.rs b/semestralka_2_uart/src/bin/main.rs index 691a3b1..d13f4fa 100644 --- a/semestralka_2_uart/src/bin/main.rs +++ b/semestralka_2_uart/src/bin/main.rs @@ -6,27 +6,16 @@ use defmt::*; use embassy_stm32::pac; use embassy_executor::Spawner; use embassy_stm32::Config; -use embassy_stm32::bind_interrupts; -use embassy_stm32::peripherals; -use embassy_stm32::usart::{BufferedInterruptHandler, BufferedUart, Config as UsartConfig}; use embassy_stm32::gpio::{Output, Level, Speed}; use embassy_time::{Duration, Timer}; -use static_cell::StaticCell; -use dma_gpio::config::{ - BAUD, PIPE_HW_RX, PIPE_HW_TX, -}; -use dma_gpio::hw_uart_pc::driver::uart_task; +use dma_gpio::config::BAUD; use dma_gpio::wakeup::iwdg::{clear_wakeup_flags, init_watchdog_reset}; use dma_gpio::sleep::shutdown; use dma_gpio::sleep::standby; -use dma_gpio::hw_uart_pc::init::{LowPowerCmd, CMD_CH, uart_cmd_task}; +use dma_gpio::hw_uart_pc::init::{init_hw_uart_to_pc, LowPowerCmd, CMD_CH}; use {defmt_rtt as _, panic_probe as _}; -bind_interrupts!(struct Irqs { - USART1 => BufferedInterruptHandler; -}); - #[embassy_executor::main] async fn main(spawner: Spawner) { info!("boot"); @@ -40,24 +29,8 @@ async fn main(spawner: Spawner) { led.set_high(); info!("LED ON (MCU awake)"); - // HARDWARE UART to the PC - let mut cfg = UsartConfig::default(); - cfg.baudrate = BAUD; - static TX_BUF: StaticCell<[u8; 256]> = StaticCell::new(); - static RX_BUF: StaticCell<[u8; 256]> = StaticCell::new(); - let uart = BufferedUart::new( - p.USART1, - p.PA10, // RX pin - p.PA9, // TX pin - TX_BUF.init([0; 256]), - RX_BUF.init([0; 256]), - Irqs, - cfg, - ).unwrap(); - // let yield_period = usart1::setup_and_spawn(BAUD); - spawner.spawn(uart_task(uart, &PIPE_HW_TX, &PIPE_HW_RX).unwrap()); - spawner.spawn(uart_cmd_task().unwrap()); - // END OF HARDWARE UART to the PC + // INIT HW UART + init_hw_uart_to_pc(p.USART1, p.PA10, p.PA9, &spawner); // DEBUG INFO let dbg = pac::DBGMCU; diff --git a/semestralka_2_uart/src/hw_uart_pc/init.rs b/semestralka_2_uart/src/hw_uart_pc/init.rs index e806705..1b8263f 100644 --- a/semestralka_2_uart/src/hw_uart_pc/init.rs +++ b/semestralka_2_uart/src/hw_uart_pc/init.rs @@ -3,7 +3,23 @@ use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::channel::Channel; use embassy_futures::yield_now; -use crate::config::{PIPE_HW_TX, PIPE_HW_RX}; + +// UART HW init +use crate::config::{BAUD, PIPE_HW_TX, PIPE_HW_RX}; +use crate::hw_uart_pc::driver::uart_task; +use static_cell::StaticCell; +use embassy_stm32::usart::BufferedInterruptHandler; +use embassy_stm32::usart::{BufferedUart, Config as UsartConfig}; +use embassy_stm32::peripherals; +use embassy_stm32::bind_interrupts; +use embassy_executor::Spawner; +use embassy_hal_internal::Peri; +use embassy_stm32::peripherals::{USART1, PA9, PA10}; +use defmt::info; + +bind_interrupts!(struct Irqs { + USART1 => BufferedInterruptHandler; +}); #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum LowPowerCmd { @@ -51,3 +67,32 @@ pub async fn uart_cmd_task() { yield_now().await; } } + +pub fn init_hw_uart_to_pc( + usart1: Peri<'static, USART1>, + pa10: Peri<'static, PA10>, + pa9: Peri<'static, PA9>, + spawner: &Spawner, +) { + let mut cfg = UsartConfig::default(); + cfg.baudrate = BAUD; + + static TX_BUF: StaticCell<[u8; 256]> = StaticCell::new(); + static RX_BUF: StaticCell<[u8; 256]> = StaticCell::new(); + + let uart = BufferedUart::new( + usart1, + pa10, // RX pin + pa9, // TX pin + TX_BUF.init([0; 256]), + RX_BUF.init([0; 256]), + Irqs, + cfg, + ) + .unwrap(); + + spawner.spawn(uart_task(uart, &PIPE_HW_TX, &PIPE_HW_RX).unwrap()); + spawner.spawn(uart_cmd_task().unwrap()); + + info!("USART1 initialized @ {} bps", BAUD); +}