diff options
| author | xoviat <[email protected]> | 2025-12-01 14:15:25 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-01 14:15:25 +0000 |
| commit | cf6a27da33479d2ba11ac73066a4bb31746c5e04 (patch) | |
| tree | ffb72f7ccadb19596b12382fc810186538a4cb05 | |
| parent | fcd5383f475f7bd413541123d941d3d7e1cd326b (diff) | |
| parent | 20a0f1b7dccd75908bf5f4eb6d1a6f2340926215 (diff) | |
Merge pull request #4967 from hjeldin/main
fix: stm32l47*/stm32l48* adc analog pin setup
| -rw-r--r-- | embassy-stm32/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/mod.rs | 12 | ||||
| -rw-r--r-- | embassy-stm32/src/gpio.rs | 6 |
3 files changed, 12 insertions, 7 deletions
diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 2a99d0a96..867f83065 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md | |||
| @@ -86,6 +86,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 86 | - feat: stm32/lcd: added implementation | 86 | - feat: stm32/lcd: added implementation |
| 87 | - change: add error messages to can timing calculations ([#4961](https://github.com/embassy-rs/embassy/pull/4961)) | 87 | - change: add error messages to can timing calculations ([#4961](https://github.com/embassy-rs/embassy/pull/4961)) |
| 88 | - fix: stm32/i2c v2: add stop flag on stop received | 88 | - fix: stm32/i2c v2: add stop flag on stop received |
| 89 | - fix: stm32l47*/stm32l48* adc analog pin setup | ||
| 89 | 90 | ||
| 90 | ## 0.4.0 - 2025-08-26 | 91 | ## 0.4.0 - 2025-08-26 |
| 91 | 92 | ||
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 { | |||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | pub(crate) trait SealedAdcChannel<T> { | 79 | pub(crate) trait SealedAdcChannel<T> { |
| 80 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] | 80 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] |
| 81 | fn setup(&mut self) {} | 81 | fn setup(&mut self) {} |
| 82 | 82 | ||
| 83 | #[allow(unused)] | 83 | #[allow(unused)] |
| @@ -185,11 +185,11 @@ pub enum RegularConversionMode { | |||
| 185 | 185 | ||
| 186 | impl<'d, T: AnyInstance> Adc<'d, T> { | 186 | impl<'d, T: AnyInstance> Adc<'d, T> { |
| 187 | #[cfg(any( | 187 | #[cfg(any( |
| 188 | adc_v2, adc_g4, adc_v3, adc_g0, adc_h5, adc_h7rs, adc_u0, adc_u5, adc_v4, adc_wba, adc_c0 | 188 | adc_v2, adc_g4, adc_v3, adc_g0, adc_h5, adc_h7rs, adc_u0, adc_u5, adc_v3, adc_v4, adc_wba, adc_c0 |
| 189 | ))] | 189 | ))] |
| 190 | /// Read an ADC pin. | 190 | /// Read an ADC pin. |
| 191 | pub fn blocking_read(&mut self, channel: &mut impl AdcChannel<T>, sample_time: T::SampleTime) -> u16 { | 191 | pub fn blocking_read(&mut self, channel: &mut impl AdcChannel<T>, sample_time: T::SampleTime) -> u16 { |
| 192 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] | 192 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] |
| 193 | channel.setup(); | 193 | channel.setup(); |
| 194 | 194 | ||
| 195 | // Ensure no conversions are ongoing | 195 | // Ensure no conversions are ongoing |
| @@ -418,7 +418,7 @@ pub trait Instance: SealedInstance + crate::PeripheralType + crate::rcc::RccPeri | |||
| 418 | pub trait AdcChannel<T>: SealedAdcChannel<T> + Sized { | 418 | pub trait AdcChannel<T>: SealedAdcChannel<T> + Sized { |
| 419 | #[allow(unused_mut)] | 419 | #[allow(unused_mut)] |
| 420 | fn degrade_adc(mut self) -> AnyAdcChannel<T> { | 420 | fn degrade_adc(mut self) -> AnyAdcChannel<T> { |
| 421 | #[cfg(any(adc_v1, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] | 421 | #[cfg(any(adc_v1, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] |
| 422 | self.setup(); | 422 | self.setup(); |
| 423 | 423 | ||
| 424 | AnyAdcChannel { | 424 | AnyAdcChannel { |
| @@ -554,7 +554,7 @@ macro_rules! impl_adc_pin { | |||
| 554 | ($inst:ident, $pin:ident, $ch:expr) => { | 554 | ($inst:ident, $pin:ident, $ch:expr) => { |
| 555 | impl crate::adc::AdcChannel<peripherals::$inst> for crate::Peri<'_, crate::peripherals::$pin> {} | 555 | impl crate::adc::AdcChannel<peripherals::$inst> for crate::Peri<'_, crate::peripherals::$pin> {} |
| 556 | impl crate::adc::SealedAdcChannel<peripherals::$inst> for crate::Peri<'_, crate::peripherals::$pin> { | 556 | impl crate::adc::SealedAdcChannel<peripherals::$inst> for crate::Peri<'_, crate::peripherals::$pin> { |
| 557 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] | 557 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] |
| 558 | fn setup(&mut self) { | 558 | fn setup(&mut self) { |
| 559 | <crate::peripherals::$pin as crate::gpio::SealedPin>::set_as_analog(self); | 559 | <crate::peripherals::$pin as crate::gpio::SealedPin>::set_as_analog(self); |
| 560 | } | 560 | } |
| @@ -582,7 +582,7 @@ macro_rules! impl_adc_pair { | |||
| 582 | crate::Peri<'_, crate::peripherals::$npin>, | 582 | crate::Peri<'_, crate::peripherals::$npin>, |
| 583 | ) | 583 | ) |
| 584 | { | 584 | { |
| 585 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v4, adc_u5, adc_wba))] | 585 | #[cfg(any(adc_v1, adc_c0, adc_l0, adc_v2, adc_g4, adc_v3, adc_v4, adc_u5, adc_wba))] |
| 586 | fn setup(&mut self) { | 586 | fn setup(&mut self) { |
| 587 | <crate::peripherals::$pin as crate::gpio::SealedPin>::set_as_analog(&mut self.0); | 587 | <crate::peripherals::$pin as crate::gpio::SealedPin>::set_as_analog(&mut self.0); |
| 588 | <crate::peripherals::$npin as crate::gpio::SealedPin>::set_as_analog(&mut self.1); | 588 | <crate::peripherals::$npin as crate::gpio::SealedPin>::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) { | |||
| 684 | }); | 684 | }); |
| 685 | 685 | ||
| 686 | #[cfg(gpio_v2)] | 686 | #[cfg(gpio_v2)] |
| 687 | r.moder().modify(|w| w.set_moder(n, vals::Moder::ANALOG)); | 687 | { |
| 688 | #[cfg(any(stm32l47x, stm32l48x))] | ||
| 689 | r.ascr().modify(|w| w.set_asc(n, true)); | ||
| 690 | r.moder().modify(|w| w.set_moder(n, vals::Moder::ANALOG)); | ||
| 691 | } | ||
| 688 | } | 692 | } |
| 689 | 693 | ||
| 690 | #[inline(never)] | 694 | #[inline(never)] |
