From 488d06c0e9da673f770b41d8f79bf26227dc6d53 Mon Sep 17 00:00:00 2001 From: xoviat Date: Tue, 4 Nov 2025 12:26:37 -0600 Subject: stm32/stop: move stop_with_rtc into init --- examples/stm32h5/src/bin/stop.rs | 5 ----- examples/stm32l5/src/bin/stop.rs | 5 ----- examples/stm32wle5/src/bin/adc.rs | 6 ------ examples/stm32wle5/src/bin/blinky.rs | 6 ------ examples/stm32wle5/src/bin/button_exti.rs | 6 ------ examples/stm32wle5/src/bin/i2c.rs | 6 ------ 6 files changed, 34 deletions(-) (limited to 'examples') diff --git a/examples/stm32h5/src/bin/stop.rs b/examples/stm32h5/src/bin/stop.rs index 2026d8f99..caebc9daf 100644 --- a/examples/stm32h5/src/bin/stop.rs +++ b/examples/stm32h5/src/bin/stop.rs @@ -9,7 +9,6 @@ use embassy_executor::Spawner; use embassy_stm32::gpio::{AnyPin, Level, Output, Speed}; use embassy_stm32::low_power::Executor; use embassy_stm32::rcc::{HSIPrescaler, LsConfig}; -use embassy_stm32::rtc::{Rtc, RtcConfig}; use embassy_stm32::{Config, Peri}; use embassy_time::Timer; use {defmt_rtt as _, panic_probe as _}; @@ -36,10 +35,6 @@ async fn async_main(spawner: Spawner) { // config.enable_debug_during_sleep = false; let p = embassy_stm32::init(config); - // give the RTC to the executor... - let rtc = Rtc::new(p.RTC, RtcConfig::default()); - embassy_stm32::low_power::stop_with_rtc(rtc); - spawner.spawn(unwrap!(blinky(p.PB4.into()))); spawner.spawn(unwrap!(timeout())); } diff --git a/examples/stm32l5/src/bin/stop.rs b/examples/stm32l5/src/bin/stop.rs index 7662dbfa8..3d119f90f 100644 --- a/examples/stm32l5/src/bin/stop.rs +++ b/examples/stm32l5/src/bin/stop.rs @@ -6,7 +6,6 @@ use embassy_executor::Spawner; use embassy_stm32::gpio::{AnyPin, Level, Output, Speed}; use embassy_stm32::low_power::Executor; use embassy_stm32::rcc::LsConfig; -use embassy_stm32::rtc::{Rtc, RtcConfig}; use embassy_stm32::{Config, Peri}; use embassy_time::Timer; use {defmt_rtt as _, panic_probe as _}; @@ -27,10 +26,6 @@ async fn async_main(spawner: Spawner) { // config.enable_debug_during_sleep = false; let p = embassy_stm32::init(config); - // give the RTC to the executor... - let rtc = Rtc::new(p.RTC, RtcConfig::default()); - embassy_stm32::low_power::stop_with_rtc(rtc); - spawner.spawn(unwrap!(blinky(p.PC7.into()))); spawner.spawn(unwrap!(timeout())); } diff --git a/examples/stm32wle5/src/bin/adc.rs b/examples/stm32wle5/src/bin/adc.rs index ff1a5fa16..8b830a1e6 100644 --- a/examples/stm32wle5/src/bin/adc.rs +++ b/examples/stm32wle5/src/bin/adc.rs @@ -7,7 +7,6 @@ use defmt_rtt as _; use embassy_executor::Spawner; use embassy_stm32::adc::{Adc, SampleTime}; use embassy_stm32::low_power::Executor; -use embassy_stm32::rtc::{Rtc, RtcConfig}; use embassy_time::Timer; use panic_probe as _; use static_cell::StaticCell; @@ -71,11 +70,6 @@ async fn async_main(_spawner: Spawner) { defmt_serial::defmt_serial(SERIAL.init(uart)); } - // give the RTC to the low_power executor... - let rtc_config = RtcConfig::default(); - let rtc = Rtc::new(p.RTC, rtc_config); - embassy_stm32::low_power::stop_with_rtc(rtc); - info!("Hello World!"); let mut adc = Adc::new(p.ADC1); diff --git a/examples/stm32wle5/src/bin/blinky.rs b/examples/stm32wle5/src/bin/blinky.rs index 1191a1157..b2745fdaf 100644 --- a/examples/stm32wle5/src/bin/blinky.rs +++ b/examples/stm32wle5/src/bin/blinky.rs @@ -7,7 +7,6 @@ use defmt_rtt as _; use embassy_executor::Spawner; use embassy_stm32::gpio::{Level, Output, Speed}; use embassy_stm32::low_power::Executor; -use embassy_stm32::rtc::{Rtc, RtcConfig}; use embassy_time::Timer; use panic_probe as _; use static_cell::StaticCell; @@ -69,11 +68,6 @@ async fn async_main(_spawner: Spawner) { defmt_serial::defmt_serial(SERIAL.init(uart)); } - // give the RTC to the low_power executor... - let rtc_config = RtcConfig::default(); - let rtc = Rtc::new(p.RTC, rtc_config); - embassy_stm32::low_power::stop_with_rtc(rtc); - info!("Hello World!"); let mut led = Output::new(p.PB5, Level::High, Speed::Low); diff --git a/examples/stm32wle5/src/bin/button_exti.rs b/examples/stm32wle5/src/bin/button_exti.rs index f07f9724d..db1bff0be 100644 --- a/examples/stm32wle5/src/bin/button_exti.rs +++ b/examples/stm32wle5/src/bin/button_exti.rs @@ -8,7 +8,6 @@ use embassy_executor::Spawner; use embassy_stm32::exti::ExtiInput; use embassy_stm32::gpio::Pull; use embassy_stm32::low_power::Executor; -use embassy_stm32::rtc::{Rtc, RtcConfig}; use panic_probe as _; use static_cell::StaticCell; @@ -71,11 +70,6 @@ async fn async_main(_spawner: Spawner) { defmt_serial::defmt_serial(SERIAL.init(uart)); } - // give the RTC to the low_power executor... - let rtc_config = RtcConfig::default(); - let rtc = Rtc::new(p.RTC, rtc_config); - embassy_stm32::low_power::stop_with_rtc(rtc); - info!("Hello World!"); let mut button = ExtiInput::new(p.PA0, p.EXTI0, Pull::Up); diff --git a/examples/stm32wle5/src/bin/i2c.rs b/examples/stm32wle5/src/bin/i2c.rs index af07f911e..c31c673c9 100644 --- a/examples/stm32wle5/src/bin/i2c.rs +++ b/examples/stm32wle5/src/bin/i2c.rs @@ -7,7 +7,6 @@ use defmt_rtt as _; use embassy_executor::Spawner; use embassy_stm32::i2c::I2c; use embassy_stm32::low_power::Executor; -use embassy_stm32::rtc::{Rtc, RtcConfig}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; use embassy_time::{Duration, Timer}; @@ -78,11 +77,6 @@ async fn async_main(_spawner: Spawner) { defmt_serial::defmt_serial(SERIAL.init(uart)); } - // give the RTC to the low_power executor... - let rtc_config = RtcConfig::default(); - let rtc = Rtc::new(p.RTC, rtc_config); - embassy_stm32::low_power::stop_with_rtc(rtc); - info!("Hello World!"); let en3v3 = embassy_stm32::gpio::Output::new( p.PA9, -- cgit From b9559c7713bc7f773cdef0df14f1158840d06d06 Mon Sep 17 00:00:00 2001 From: xoviat Date: Tue, 4 Nov 2025 16:35:07 -0600 Subject: rtc: use consistent api between stop and non-stop --- examples/stm32c0/src/bin/rtc.rs | 4 ++-- examples/stm32f4/src/bin/rtc.rs | 4 ++-- examples/stm32g0/src/bin/rtc.rs | 4 ++-- examples/stm32h7/src/bin/rtc.rs | 4 ++-- examples/stm32h7rs/src/bin/rtc.rs | 4 ++-- examples/stm32l4/src/bin/rtc.rs | 4 ++-- examples/stm32u0/src/bin/rtc.rs | 4 ++-- examples/stm32wl/src/bin/rtc.rs | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) (limited to 'examples') diff --git a/examples/stm32c0/src/bin/rtc.rs b/examples/stm32c0/src/bin/rtc.rs index feb27f6d9..5ff705ca2 100644 --- a/examples/stm32c0/src/bin/rtc.rs +++ b/examples/stm32c0/src/bin/rtc.rs @@ -21,12 +21,12 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); rtc.set_datetime(now.into()).expect("datetime not set"); loop { - let now: NaiveDateTime = rtc.now().unwrap().into(); + let now: NaiveDateTime = time_provider.now().unwrap().into(); info!("{}", now.and_utc().timestamp()); diff --git a/examples/stm32f4/src/bin/rtc.rs b/examples/stm32f4/src/bin/rtc.rs index feb27f6d9..5ff705ca2 100644 --- a/examples/stm32f4/src/bin/rtc.rs +++ b/examples/stm32f4/src/bin/rtc.rs @@ -21,12 +21,12 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); rtc.set_datetime(now.into()).expect("datetime not set"); loop { - let now: NaiveDateTime = rtc.now().unwrap().into(); + let now: NaiveDateTime = time_provider.now().unwrap().into(); info!("{}", now.and_utc().timestamp()); diff --git a/examples/stm32g0/src/bin/rtc.rs b/examples/stm32g0/src/bin/rtc.rs index 21da204cc..d8b58de22 100644 --- a/examples/stm32g0/src/bin/rtc.rs +++ b/examples/stm32g0/src/bin/rtc.rs @@ -17,12 +17,12 @@ async fn main(_spawner: Spawner) { let now = DateTime::from(2023, 6, 14, DayOfWeek::Friday, 15, 59, 10, 0); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); rtc.set_datetime(now.unwrap()).expect("datetime not set"); loop { - let now: DateTime = rtc.now().unwrap().into(); + let now: DateTime = time_provider.now().unwrap().into(); info!("{}:{}:{}", now.hour(), now.minute(), now.second()); diff --git a/examples/stm32h7/src/bin/rtc.rs b/examples/stm32h7/src/bin/rtc.rs index 1bd71637b..965716d23 100644 --- a/examples/stm32h7/src/bin/rtc.rs +++ b/examples/stm32h7/src/bin/rtc.rs @@ -23,7 +23,7 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); info!("Got RTC! {:?}", now.and_utc().timestamp()); rtc.set_datetime(now.into()).expect("datetime not set"); @@ -31,6 +31,6 @@ async fn main(_spawner: Spawner) { // In reality the delay would be much longer Timer::after_millis(20000).await; - let then: NaiveDateTime = rtc.now().unwrap().into(); + let then: NaiveDateTime = time_provider.now().unwrap().into(); info!("Got RTC! {:?}", then.and_utc().timestamp()); } diff --git a/examples/stm32h7rs/src/bin/rtc.rs b/examples/stm32h7rs/src/bin/rtc.rs index 1bd71637b..965716d23 100644 --- a/examples/stm32h7rs/src/bin/rtc.rs +++ b/examples/stm32h7rs/src/bin/rtc.rs @@ -23,7 +23,7 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); info!("Got RTC! {:?}", now.and_utc().timestamp()); rtc.set_datetime(now.into()).expect("datetime not set"); @@ -31,6 +31,6 @@ async fn main(_spawner: Spawner) { // In reality the delay would be much longer Timer::after_millis(20000).await; - let then: NaiveDateTime = rtc.now().unwrap().into(); + let then: NaiveDateTime = time_provider.now().unwrap().into(); info!("Got RTC! {:?}", then.and_utc().timestamp()); } diff --git a/examples/stm32l4/src/bin/rtc.rs b/examples/stm32l4/src/bin/rtc.rs index 1d26cd008..8b92075cc 100644 --- a/examples/stm32l4/src/bin/rtc.rs +++ b/examples/stm32l4/src/bin/rtc.rs @@ -39,7 +39,7 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); info!("Got RTC! {:?}", now.and_utc().timestamp()); rtc.set_datetime(now.into()).expect("datetime not set"); @@ -47,6 +47,6 @@ async fn main(_spawner: Spawner) { // In reality the delay would be much longer Timer::after_millis(20000).await; - let then: NaiveDateTime = rtc.now().unwrap().into(); + let then: NaiveDateTime = time_provider.now().unwrap().into(); info!("Got RTC! {:?}", then.and_utc().timestamp()); } diff --git a/examples/stm32u0/src/bin/rtc.rs b/examples/stm32u0/src/bin/rtc.rs index d071cfbc7..56d16ccf7 100644 --- a/examples/stm32u0/src/bin/rtc.rs +++ b/examples/stm32u0/src/bin/rtc.rs @@ -36,7 +36,7 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); info!("Got RTC! {:?}", now.and_utc().timestamp()); rtc.set_datetime(now.into()).expect("datetime not set"); @@ -44,6 +44,6 @@ async fn main(_spawner: Spawner) { // In reality the delay would be much longer Timer::after_millis(20000).await; - let then: NaiveDateTime = rtc.now().unwrap().into(); + let then: NaiveDateTime = time_provider.now().unwrap().into(); info!("Got RTC! {:?}", then.and_utc().timestamp()); } diff --git a/examples/stm32wl/src/bin/rtc.rs b/examples/stm32wl/src/bin/rtc.rs index d3709120f..2185142c9 100644 --- a/examples/stm32wl/src/bin/rtc.rs +++ b/examples/stm32wl/src/bin/rtc.rs @@ -44,7 +44,7 @@ async fn main(_spawner: Spawner) { .and_hms_opt(10, 30, 15) .unwrap(); - let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); + let (mut rtc, time_provider) = Rtc::new(p.RTC, RtcConfig::default()); info!("Got RTC! {:?}", now.and_utc().timestamp()); rtc.set_datetime(now.into()).expect("datetime not set"); @@ -52,6 +52,6 @@ async fn main(_spawner: Spawner) { // In reality the delay would be much longer Timer::after_millis(20000).await; - let then: NaiveDateTime = rtc.now().unwrap().into(); + let then: NaiveDateTime = time_provider.now().unwrap().into(); info!("Got RTC! {:?}", then.and_utc().timestamp()); } -- cgit From 141f826e10802a40ac1bca8fdcdfa3da821e0f28 Mon Sep 17 00:00:00 2001 From: Cristian Milatinov Date: Wed, 9 Jul 2025 20:35:01 -0400 Subject: feat: stm32 spi driver slave mode Add SPI slave constructors Fix SPI slave constructors Fix embedded hal async trait One more constructor fix Set SSM bit in SPI driver according to CommunicationMode Fix embedded_hal_async trait to be generic for both master and slave Fix I2S driver to use async master SPI Forgot import from spi mode Fix CommunicationMode associated const conditionals Duplicate doc for CommunicationMode const Add missing nss argument Fix existing SPI tests not compiling Fix stm32h7rs examples not compiling Fix failing stm32l4 example Fix stm32h7 example Fix stm32h7 spi_bdma example Fix stm32h7 spi example Fix stm32f4 example docs: added entry in changelog.md fix: spi_v3 vals mismatch + rise_fall_speed renamed to gpio_speed fix: added spi_v6 conditional compilation feature fix: use if_afio macro in slave constructors fix: add missing trait bound fix: if_afio for cs pin trait fix: changelog message fix: broken rebase --- examples/stm32f4/src/bin/eth_w5500.rs | 3 ++- examples/stm32h7/src/bin/spi.rs | 2 +- examples/stm32h7/src/bin/spi_bdma.rs | 2 +- examples/stm32h7/src/bin/spi_dma.rs | 2 +- examples/stm32h7rs/src/bin/spi.rs | 2 +- examples/stm32h7rs/src/bin/spi_dma.rs | 2 +- examples/stm32l4/src/bin/spe_adin1110_http_server.rs | 3 ++- 7 files changed, 9 insertions(+), 7 deletions(-) (limited to 'examples') diff --git a/examples/stm32f4/src/bin/eth_w5500.rs b/examples/stm32f4/src/bin/eth_w5500.rs index cccf20949..0adcda614 100644 --- a/examples/stm32f4/src/bin/eth_w5500.rs +++ b/examples/stm32f4/src/bin/eth_w5500.rs @@ -12,6 +12,7 @@ use embassy_stm32::gpio::{Level, Output, Pull, Speed}; use embassy_stm32::mode::Async; use embassy_stm32::rng::Rng; use embassy_stm32::spi::Spi; +use embassy_stm32::spi::mode::Master; use embassy_stm32::time::Hertz; use embassy_stm32::{Config, bind_interrupts, peripherals, rng, spi}; use embassy_time::{Delay, Timer}; @@ -24,7 +25,7 @@ bind_interrupts!(struct Irqs { HASH_RNG => rng::InterruptHandler; }); -type EthernetSPI = ExclusiveDevice, Output<'static>, Delay>; +type EthernetSPI = ExclusiveDevice, Output<'static>, Delay>; #[embassy_executor::task] async fn ethernet_task(runner: Runner<'static, W5500, EthernetSPI, ExtiInput<'static>, Output<'static>>) -> ! { runner.run().await diff --git a/examples/stm32h7/src/bin/spi.rs b/examples/stm32h7/src/bin/spi.rs index 61f31be24..f7ab20cdd 100644 --- a/examples/stm32h7/src/bin/spi.rs +++ b/examples/stm32h7/src/bin/spi.rs @@ -15,7 +15,7 @@ use static_cell::StaticCell; use {defmt_rtt as _, panic_probe as _}; #[embassy_executor::task] -async fn main_task(mut spi: spi::Spi<'static, Blocking>) { +async fn main_task(mut spi: spi::Spi<'static, Blocking, spi::mode::Master>) { for n in 0u32.. { let mut write: String<128> = String::new(); core::write!(&mut write, "Hello DMA World {}!\r\n", n).unwrap(); diff --git a/examples/stm32h7/src/bin/spi_bdma.rs b/examples/stm32h7/src/bin/spi_bdma.rs index be6a26d82..cd9d6c789 100644 --- a/examples/stm32h7/src/bin/spi_bdma.rs +++ b/examples/stm32h7/src/bin/spi_bdma.rs @@ -20,7 +20,7 @@ use {defmt_rtt as _, panic_probe as _}; static mut RAM_D3: GroundedArrayCell = GroundedArrayCell::uninit(); #[embassy_executor::task] -async fn main_task(mut spi: spi::Spi<'static, Async>) { +async fn main_task(mut spi: spi::Spi<'static, Async, spi::mode::Master>) { let (read_buffer, write_buffer) = unsafe { let ram = &mut *core::ptr::addr_of_mut!(RAM_D3); ram.initialize_all_copied(0); diff --git a/examples/stm32h7/src/bin/spi_dma.rs b/examples/stm32h7/src/bin/spi_dma.rs index 20cb67ba0..3d3c2f43e 100644 --- a/examples/stm32h7/src/bin/spi_dma.rs +++ b/examples/stm32h7/src/bin/spi_dma.rs @@ -15,7 +15,7 @@ use static_cell::StaticCell; use {defmt_rtt as _, panic_probe as _}; #[embassy_executor::task] -async fn main_task(mut spi: spi::Spi<'static, Async>) { +async fn main_task(mut spi: spi::Spi<'static, Async, spi::mode::Master>) { for n in 0u32.. { let mut write: String<128> = String::new(); let mut read = [0; 128]; diff --git a/examples/stm32h7rs/src/bin/spi.rs b/examples/stm32h7rs/src/bin/spi.rs index 8c280fdae..3253304eb 100644 --- a/examples/stm32h7rs/src/bin/spi.rs +++ b/examples/stm32h7rs/src/bin/spi.rs @@ -15,7 +15,7 @@ use static_cell::StaticCell; use {defmt_rtt as _, panic_probe as _}; #[embassy_executor::task] -async fn main_task(mut spi: spi::Spi<'static, Blocking>) { +async fn main_task(mut spi: spi::Spi<'static, Blocking, spi::mode::Master>) { for n in 0u32.. { let mut write: String<128> = String::new(); core::write!(&mut write, "Hello DMA World {}!\r\n", n).unwrap(); diff --git a/examples/stm32h7rs/src/bin/spi_dma.rs b/examples/stm32h7rs/src/bin/spi_dma.rs index 3fa69fd15..ca644c6a8 100644 --- a/examples/stm32h7rs/src/bin/spi_dma.rs +++ b/examples/stm32h7rs/src/bin/spi_dma.rs @@ -15,7 +15,7 @@ use static_cell::StaticCell; use {defmt_rtt as _, panic_probe as _}; #[embassy_executor::task] -async fn main_task(mut spi: spi::Spi<'static, Async>) { +async fn main_task(mut spi: spi::Spi<'static, Async, spi::mode::Master>) { for n in 0u32.. { let mut write: String<128> = String::new(); let mut read = [0; 128]; diff --git a/examples/stm32l4/src/bin/spe_adin1110_http_server.rs b/examples/stm32l4/src/bin/spe_adin1110_http_server.rs index 8e54938d1..0dbf515cf 100644 --- a/examples/stm32l4/src/bin/spe_adin1110_http_server.rs +++ b/examples/stm32l4/src/bin/spe_adin1110_http_server.rs @@ -28,6 +28,7 @@ use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; use embassy_stm32::i2c::{self, Config as I2C_Config, I2c}; use embassy_stm32::mode::Async; use embassy_stm32::rng::{self, Rng}; +use embassy_stm32::spi::mode::Master; use embassy_stm32::spi::{Config as SPI_Config, Spi}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, exti, pac, peripherals}; @@ -54,7 +55,7 @@ const IP_ADDRESS: Ipv4Cidr = Ipv4Cidr::new(Ipv4Address::new(192, 168, 1, 5), 24) // Listen port for the webserver const HTTP_LISTEN_PORT: u16 = 80; -pub type SpeSpi = Spi<'static, Async>; +pub type SpeSpi = Spi<'static, Async, Master>; pub type SpeSpiCs = ExclusiveDevice, Delay>; pub type SpeInt = exti::ExtiInput<'static>; pub type SpeRst = Output<'static>; -- cgit