From ab932d16987bb600a77e282d8fbe7e0029acfa8a Mon Sep 17 00:00:00 2001 From: Filipriec Date: Tue, 2 Dec 2025 15:40:13 +0100 Subject: [PATCH] hal working --- semestralka_2/build.rs | 9 ++++++--- semestralka_2/src/bin/main.rs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/semestralka_2/build.rs b/semestralka_2/build.rs index ba9dd9a..6e6dd89 100644 --- a/semestralka_2/build.rs +++ b/semestralka_2/build.rs @@ -1,4 +1,5 @@ -use std::env; +// build.rs + use std::path::PathBuf; fn main() { @@ -7,9 +8,9 @@ fn main() { let hal_driver = cube_path.join("Drivers/STM32U5xx_HAL_Driver"); let cmsis = cube_path.join("Drivers/CMSIS"); let device = cmsis.join("Device/ST/STM32U5xx"); - let example_inc = cube_path.join("Projects/NUCLEO-U575ZI-Q/Examples/GPIO/GPIO_IOToggle/Inc"); + // HAL source files let hal_srcs = [ "stm32u5xx_hal.c", "stm32u5xx_hal_rcc.c", @@ -27,6 +28,9 @@ fn main() { ]; let mut build = cc::Build::new(); + + // system_stm32u5xx.c adds SystemCoreClock, tables, etc. + build.file(device.join("Source/Templates/system_stm32u5xx.c")); for src in hal_srcs { build.file(hal_driver.join("Src").join(src)); } @@ -38,7 +42,6 @@ fn main() { .include(&example_inc) .define("USE_HAL_DRIVER", None) .define("STM32U575xx", None) - // flags .flag("-mthumb") .flag("-march=armv8-m.main+fp.dp") .flag("-mfloat-abi=hard") diff --git a/semestralka_2/src/bin/main.rs b/semestralka_2/src/bin/main.rs index 9f1d04a..ae994b5 100644 --- a/semestralka_2/src/bin/main.rs +++ b/semestralka_2/src/bin/main.rs @@ -20,6 +20,12 @@ bind_interrupts!(struct Irqs { USART1 => BufferedInterruptHandler; }); +unsafe extern "C" { + fn HAL_Init(); + fn HAL_PWR_EnterSTANDBYMode(); + fn HAL_PWREx_EnterSHUTDOWNMode(); +} + #[embassy_executor::main] async fn main(spawner: Spawner) { info!("boot"); @@ -44,11 +50,19 @@ async fn main(spawner: Spawner) { spawner.spawn(uart_task(uart, &PIPE_HW_TX, &PIPE_HW_RX).unwrap()); // END OF HARDWARE UART to the PC + unsafe { + HAL_Init(); + HAL_PWR_EnterSTANDBYMode(); + + // Example 2 (unreachable if above executes): enter Shutdown + // HAL_PWREx_EnterSHUTDOWNMode(); + } loop { info!("tick start"); // Timer::after(Duration::from_millis(100)).await; // info!("tick end"); + yield_now().await; } }