sram2 standby working

This commit is contained in:
Priec
2025-12-03 18:33:07 +01:00
parent 434e2b3d21
commit 68d13ebbbc
2 changed files with 32 additions and 2 deletions

View File

@@ -20,6 +20,7 @@ use dma_gpio::config::{
use dma_gpio::hw_uart_pc::{driver::uart_task, usart1}; use dma_gpio::hw_uart_pc::{driver::uart_task, usart1};
use dma_gpio::wakeup::iwdg::{clear_wakeup_flags, init_watchdog}; use dma_gpio::wakeup::iwdg::{clear_wakeup_flags, init_watchdog};
use dma_gpio::sleep::shutdown::enter_shutdown; use dma_gpio::sleep::shutdown::enter_shutdown;
use dma_gpio::sleep::standby::enter_standby_with_sram2_retention;
use {defmt_rtt as _, panic_probe as _}; use {defmt_rtt as _, panic_probe as _};
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {
@@ -64,12 +65,12 @@ async fn main(spawner: Spawner) {
// MAIN LOOP // MAIN LOOP
Timer::after(Duration::from_millis(500)).await; Timer::after(Duration::from_millis(500)).await;
// init_watchdog(p.IWDG).await; init_watchdog(p.IWDG).await;
Timer::after(Duration::from_millis(10)).await; Timer::after(Duration::from_millis(10)).await;
loop { loop {
info!("entering shutdown"); info!("entering shutdown");
enter_shutdown(); enter_standby_with_sram2_retention();
cortex_m::asm::wfi(); cortex_m::asm::wfi();
yield_now().await; yield_now().await;
} }

View File

@@ -11,3 +11,32 @@ pub fn enter_standby() -> ! {
cortex_m::asm::udf(); // never happen marker cortex_m::asm::udf(); // never happen marker
} }
pub fn enter_standby_with_sram2_retention() -> ! {
sram2_retention();
enter_standby();
}
pub fn sram2_retention() {
unsafe extern "C" {
fn HAL_PWREx_EnableSRAM2ContentStandbyRetention(sram2_pages: u32);
}
unsafe {
// 0x60 = PWR_SRAM2_FULL_STANDBY = PWR_CR1_RRSB1 | PWR_CR1_RRSB2
// See: STM32U5xx HAL: stm32u5xx_hal_pwr_ex.h line 227
// CMSIS: PWR_CR1_RRSB1=0x20, PWR_CR1_RRSB2=0x40
HAL_PWREx_EnableSRAM2ContentStandbyRetention(0x60);
}
}
pub fn disable_sram2_retention() {
unsafe extern "C" {
fn HAL_PWREx_DisableSRAM2ContentStandbyRetention(sram2_pages: u32);
}
unsafe {
// Disable full SRAM2 retention
HAL_PWREx_DisableSRAM2ContentStandbyRetention(0x60);
}
}