From de4537d000ffeb8821a58056a99e76bb12c1536e Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Mon, 21 Jul 2025 13:20:35 +0200 Subject: stm32: Fix build for WBA lowpower. --- embassy-stm32/src/low_power.rs | 3 +++ 1 file changed, 3 insertions(+) (limited to 'embassy-stm32/src') diff --git a/embassy-stm32/src/low_power.rs b/embassy-stm32/src/low_power.rs index 4607eb230..d13df5a6b 100644 --- a/embassy-stm32/src/low_power.rs +++ b/embassy-stm32/src/low_power.rs @@ -132,7 +132,10 @@ impl Into for StopMode { fn into(self) -> Lpms { match self { StopMode::Stop1 => Lpms::STOP1, + #[cfg(not(stm32wba))] StopMode::Stop2 => Lpms::STOP2, + #[cfg(stm32wba)] + StopMode::Stop2 => Lpms::STOP1, // TODO: WBA has no STOP2? } } } -- cgit From 79fbf214ccc7be89d8d656cf0c5b5ffe5425bece Mon Sep 17 00:00:00 2001 From: clubby789 Date: Sun, 20 Jul 2025 15:38:42 +0100 Subject: Enable oversampling for ADC v3 --- embassy-stm32/src/adc/v3.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'embassy-stm32/src') diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs index 313244e19..fd74d5318 100644 --- a/embassy-stm32/src/adc/v3.rs +++ b/embassy-stm32/src/adc/v3.rs @@ -1,5 +1,7 @@ use cfg_if::cfg_if; use pac::adc::vals::Dmacfg; +#[cfg(adc_v3)] +use pac::adc::vals::{OversamplingRatio, OversamplingShift, Rovsm, Trovs}; use super::{ blocking_delay_us, Adc, AdcChannel, AnyAdcChannel, Instance, Resolution, RxDma, SampleTime, SealedAdcChannel, @@ -470,6 +472,23 @@ impl<'d, T: Instance> Adc<'d, T> { T::regs().cfgr2().modify(|reg| reg.set_ovse(enable)); } + #[cfg(adc_v3)] + pub fn enable_regular_oversampling_mode(&mut self, mode: Rovsm, trig_mode: Trovs, enable: bool) { + T::regs().cfgr2().modify(|reg| reg.set_trovs(trig_mode)); + T::regs().cfgr2().modify(|reg| reg.set_rovsm(mode)); + T::regs().cfgr2().modify(|reg| reg.set_rovse(enable)); + } + + #[cfg(adc_v3)] + pub fn set_oversampling_ratio(&mut self, ratio: OversamplingRatio) { + T::regs().cfgr2().modify(|reg| reg.set_ovsr(ratio)); + } + + #[cfg(adc_v3)] + pub fn set_oversampling_shift(&mut self, shift: OversamplingShift) { + T::regs().cfgr2().modify(|reg| reg.set_ovss(shift)); + } + fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { cfg_if! { if #[cfg(any(adc_g0, adc_u0))] { -- cgit From 03b86d75b6861ed8151f4f48682e9b4f5b159232 Mon Sep 17 00:00:00 2001 From: dimi Date: Tue, 22 Jul 2025 18:16:11 +0200 Subject: derive Copy, Clone for adc config enums --- embassy-stm32/src/adc/adc4.rs | 4 +++- embassy-stm32/src/adc/c0.rs | 3 ++- embassy-stm32/src/adc/f3_v1_1.rs | 2 ++ embassy-stm32/src/adc/v4.rs | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) (limited to 'embassy-stm32/src') diff --git a/embassy-stm32/src/adc/adc4.rs b/embassy-stm32/src/adc/adc4.rs index 98483489f..31cbdc0d7 100644 --- a/embassy-stm32/src/adc/adc4.rs +++ b/embassy-stm32/src/adc/adc4.rs @@ -76,12 +76,14 @@ impl SealedAdcChannel for Vcore { } } +#[derive(Copy, Clone)] pub enum DacChannel { OUT1, OUT2, } /// Number of samples used for averaging. +#[derive(Copy, Clone)] pub enum Averaging { Disabled, Samples2, @@ -187,7 +189,7 @@ pub struct Adc4<'d, T: Instance> { adc: crate::Peri<'d, T>, } -#[derive(Debug)] +#[derive(Copy, Clone, Debug)] pub enum Adc4Error { InvalidSequence, DMAError, diff --git a/embassy-stm32/src/adc/c0.rs b/embassy-stm32/src/adc/c0.rs index 936ad7413..f5870801e 100644 --- a/embassy-stm32/src/adc/c0.rs +++ b/embassy-stm32/src/adc/c0.rs @@ -48,7 +48,7 @@ impl SealedAdcChannel for Temperature { } } -#[derive(Debug)] +#[derive(Copy, Clone, Debug)] pub enum Prescaler { NotDivided, DividedBy2, @@ -138,6 +138,7 @@ impl<'a> defmt::Format for Prescaler { /// Number of samples used for averaging. /// TODO: Implement hardware averaging setting. #[allow(unused)] +#[derive(Copy, Clone)] pub enum Averaging { Disabled, Samples2, diff --git a/embassy-stm32/src/adc/f3_v1_1.rs b/embassy-stm32/src/adc/f3_v1_1.rs index 944e971bb..84613078c 100644 --- a/embassy-stm32/src/adc/f3_v1_1.rs +++ b/embassy-stm32/src/adc/f3_v1_1.rs @@ -17,6 +17,7 @@ pub const VDDA_CALIB_MV: u32 = 3300; pub const ADC_MAX: u32 = (1 << 12) - 1; pub const VREF_INT: u32 = 1230; +#[derive(Copy, Clone)] pub enum AdcPowerMode { AlwaysOn, DelayOff, @@ -24,6 +25,7 @@ pub enum AdcPowerMode { DelayIdleOff, } +#[derive(Copy, Clone)] pub enum Prescaler { Div1, Div2, diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs index 39e0d51b9..b0871019a 100644 --- a/embassy-stm32/src/adc/v4.rs +++ b/embassy-stm32/src/adc/v4.rs @@ -142,6 +142,7 @@ impl Prescaler { } /// Number of samples used for averaging. +#[derive(Copy, Clone)] pub enum Averaging { Disabled, Samples2, -- cgit