working uart but not waking after sleep
This commit is contained in:
58
semestralka_2_uart/src/sleep/standby.rs
Normal file
58
semestralka_2_uart/src/sleep/standby.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
// src/sleep/standby.rs
|
||||
|
||||
pub fn enter_standby() -> ! {
|
||||
unsafe extern "C" {
|
||||
fn HAL_PWR_EnterSTANDBYMode();
|
||||
}
|
||||
|
||||
unsafe {
|
||||
HAL_PWR_EnterSTANDBYMode();
|
||||
}
|
||||
|
||||
cortex_m::asm::udf(); // never happen marker
|
||||
}
|
||||
|
||||
pub fn enter_standby_with_sram2_8kb() -> ! {
|
||||
sram2_8kb_retention();
|
||||
enter_standby();
|
||||
}
|
||||
|
||||
pub fn enter_standby_with_sram2_full() -> ! {
|
||||
sram2_full_retention();
|
||||
enter_standby();
|
||||
}
|
||||
|
||||
pub fn sram2_full_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
|
||||
// PWR_CR1_RRSB1=0x20, PWR_CR1_RRSB2=0x40
|
||||
HAL_PWREx_EnableSRAM2ContentStandbyRetention(0x60);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn sram2_8kb_retention() {
|
||||
unsafe extern "C" {
|
||||
fn HAL_PWREx_EnableSRAM2ContentStandbyRetention(sram2_pages: u32);
|
||||
}
|
||||
|
||||
unsafe {
|
||||
// 0x40 = PWR_SRAM2_PAGE1_STANDBY = PWR_CR1_RRSB2
|
||||
// 8KB retention only
|
||||
HAL_PWREx_EnableSRAM2ContentStandbyRetention(0x40);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn disable_sram2_full_retention() {
|
||||
unsafe extern "C" {
|
||||
fn HAL_PWREx_DisableSRAM2ContentStandbyRetention(sram2_pages: u32);
|
||||
}
|
||||
|
||||
unsafe {
|
||||
HAL_PWREx_DisableSRAM2ContentStandbyRetention(0x60);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user