From c6d6538df6ac32a17edac8f8a1e817c276f03c4c Mon Sep 17 00:00:00 2001 From: Riccardo Arena Date: Sun, 30 Nov 2025 18:06:41 +0100 Subject: fix: stm32l47*/stm32l48* adc analog pin setup --- embassy-stm32/src/adc/mod.rs | 12 ++++++------ embassy-stm32/src/gpio.rs | 6 +++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs index 6d53d9b91..a55b99e6a 100644 --- a/embassy-stm32/src/adc/mod.rs +++ b/embassy-stm32/src/adc/mod.rs @@ -77,7 +77,7 @@ trait SealedInstance { } pub(crate) trait SealedAdcChannel { - #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] + #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] fn setup(&mut self) {} #[allow(unused)] @@ -185,11 +185,11 @@ pub enum RegularConversionMode { impl<'d, T: AnyInstance> Adc<'d, T> { #[cfg(any( - adc_v2, adc_g4, adc_v3, adc_g0, adc_h5, adc_h7rs, adc_u0, adc_u5, adc_v4, adc_wba, adc_c0 + adc_v2, adc_g4, adc_v3, adc_g0, adc_h5, adc_h7rs, adc_u0, adc_u5, adc_v3, adc_v4, adc_wba, adc_c0 ))] /// Read an ADC pin. pub fn blocking_read(&mut self, channel: &mut impl AdcChannel, sample_time: T::SampleTime) -> u16 { - #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] + #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] channel.setup(); // Ensure no conversions are ongoing @@ -418,7 +418,7 @@ pub trait Instance: SealedInstance + crate::PeripheralType + crate::rcc::RccPeri pub trait AdcChannel: SealedAdcChannel + Sized { #[allow(unused_mut)] fn degrade_adc(mut self) -> AnyAdcChannel { - #[cfg(any(adc_v1, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] + #[cfg(any(adc_v1, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] self.setup(); AnyAdcChannel { @@ -554,7 +554,7 @@ macro_rules! impl_adc_pin { ($inst:ident, $pin:ident, $ch:expr) => { impl crate::adc::AdcChannel for crate::Peri<'_, crate::peripherals::$pin> {} impl crate::adc::SealedAdcChannel for crate::Peri<'_, crate::peripherals::$pin> { - #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] + #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] fn setup(&mut self) { ::set_as_analog(self); } @@ -582,7 +582,7 @@ macro_rules! impl_adc_pair { crate::Peri<'_, crate::peripherals::$npin>, ) { - #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] + #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] fn setup(&mut self) { ::set_as_analog(&mut self.0); ::set_as_analog(&mut self.1); diff --git a/embassy-stm32/src/gpio.rs b/embassy-stm32/src/gpio.rs index e7d4e9ad3..5de8bad2c 100644 --- a/embassy-stm32/src/gpio.rs +++ b/embassy-stm32/src/gpio.rs @@ -684,7 +684,11 @@ fn set_as_analog(pin_port: PinNumber) { }); #[cfg(gpio_v2)] - r.moder().modify(|w| w.set_moder(n, vals::Moder::ANALOG)); + { + #[cfg(any(stm32l47x, stm32l48x))] + r.ascr().modify(|w| w.set_asc(n, true)); + r.moder().modify(|w| w.set_moder(n, vals::Moder::ANALOG)); + } } #[inline(never)] -- cgit