tests/stm32: add stop and cleanpu
This commit is contained in:
		@@ -3,7 +3,6 @@ use core::marker::PhantomData;
 | 
			
		||||
 | 
			
		||||
use cortex_m::peripheral::SCB;
 | 
			
		||||
use embassy_executor::*;
 | 
			
		||||
use embassy_time::Duration;
 | 
			
		||||
 | 
			
		||||
use crate::interrupt;
 | 
			
		||||
use crate::interrupt::typelevel::Interrupt;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ autobins = false
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
stm32f103c8 = ["embassy-stm32/stm32f103c8", "not-gpdma"]     # Blue Pill
 | 
			
		||||
stm32f429zi = ["embassy-stm32/stm32f429zi", "chrono", "can", "not-gpdma", "dac-adc-pin"]     # Nucleo "sdmmc"
 | 
			
		||||
stm32f429zi = ["embassy-stm32/stm32f429zi", "chrono", "stop", "can", "not-gpdma", "dac-adc-pin"]     # Nucleo "sdmmc"
 | 
			
		||||
stm32g071rb = ["embassy-stm32/stm32g071rb", "not-gpdma", "dac-adc-pin"]     # Nucleo
 | 
			
		||||
stm32c031c6 = ["embassy-stm32/stm32c031c6", "not-gpdma"]     # Nucleo
 | 
			
		||||
stm32g491re = ["embassy-stm32/stm32g491re", "not-gpdma"]     # Nucleo
 | 
			
		||||
@@ -17,6 +17,7 @@ stm32h563zi = ["embassy-stm32/stm32h563zi"]     # Nucleo
 | 
			
		||||
stm32u585ai = ["embassy-stm32/stm32u585ai"]     # IoT board
 | 
			
		||||
 | 
			
		||||
sdmmc = []
 | 
			
		||||
stop = ["embassy-stm32/low-power"]
 | 
			
		||||
chrono = ["embassy-stm32/chrono", "dep:chrono"]
 | 
			
		||||
can = []
 | 
			
		||||
ble = ["dep:embassy-stm32-wpan", "embassy-stm32-wpan/ble"]
 | 
			
		||||
@@ -47,6 +48,7 @@ micromath = "2.0.0"
 | 
			
		||||
panic-probe = { version = "0.3.0", features = ["print-defmt"] }
 | 
			
		||||
rand_core = { version = "0.6", default-features = false }
 | 
			
		||||
rand_chacha = { version = "0.3", default-features = false }
 | 
			
		||||
static_cell = {version = "1.1", features = ["nightly"] }
 | 
			
		||||
 | 
			
		||||
chrono = { version = "^0.4", default-features = false, optional = true}
 | 
			
		||||
 | 
			
		||||
@@ -87,6 +89,11 @@ name = "spi_dma"
 | 
			
		||||
path = "src/bin/spi_dma.rs"
 | 
			
		||||
required-features = []
 | 
			
		||||
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "stop"
 | 
			
		||||
path = "src/bin/stop.rs"
 | 
			
		||||
required-features = [ "stop", "chrono",]
 | 
			
		||||
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "timer"
 | 
			
		||||
path = "src/bin/timer.rs"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								tests/stm32/src/bin/stop.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								tests/stm32/src/bin/stop.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
// required-features: stop,chrono
 | 
			
		||||
 | 
			
		||||
#![no_std]
 | 
			
		||||
#![no_main]
 | 
			
		||||
#![feature(type_alias_impl_trait)]
 | 
			
		||||
#[path = "../common.rs"]
 | 
			
		||||
mod common;
 | 
			
		||||
 | 
			
		||||
use chrono::NaiveDate;
 | 
			
		||||
use common::*;
 | 
			
		||||
use cortex_m_rt::entry;
 | 
			
		||||
use embassy_executor::Spawner;
 | 
			
		||||
use embassy_stm32::low_power::{stop_with_rtc, Executor};
 | 
			
		||||
use embassy_stm32::rtc::{Rtc, RtcClockSource, RtcConfig};
 | 
			
		||||
use embassy_time::{Duration, Timer};
 | 
			
		||||
use static_cell::make_static;
 | 
			
		||||
 | 
			
		||||
#[entry]
 | 
			
		||||
fn main() -> ! {
 | 
			
		||||
    let executor = Executor::take();
 | 
			
		||||
    executor.run(|spawner| {
 | 
			
		||||
        unwrap!(spawner.spawn(async_main(spawner)));
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[embassy_executor::task]
 | 
			
		||||
async fn async_main(_spawner: Spawner) {
 | 
			
		||||
    let mut config = config();
 | 
			
		||||
 | 
			
		||||
    config.rcc.rtc = Some(RtcClockSource::LSI);
 | 
			
		||||
 | 
			
		||||
    let p = embassy_stm32::init(config);
 | 
			
		||||
    info!("Hello World!");
 | 
			
		||||
 | 
			
		||||
    let now = NaiveDate::from_ymd_opt(2020, 5, 15)
 | 
			
		||||
        .unwrap()
 | 
			
		||||
        .and_hms_opt(10, 30, 15)
 | 
			
		||||
        .unwrap();
 | 
			
		||||
 | 
			
		||||
    let mut rtc = Rtc::new(p.RTC, RtcConfig::default());
 | 
			
		||||
 | 
			
		||||
    rtc.set_datetime(now.into()).expect("datetime not set");
 | 
			
		||||
 | 
			
		||||
    let rtc = make_static!(rtc);
 | 
			
		||||
 | 
			
		||||
    stop_with_rtc(rtc);
 | 
			
		||||
 | 
			
		||||
    info!("Waiting 5 seconds");
 | 
			
		||||
    Timer::after(Duration::from_secs(5)).await;
 | 
			
		||||
 | 
			
		||||
    info!("Test OK");
 | 
			
		||||
    cortex_m::asm::bkpt();
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user