diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-07-21 12:59:48 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-21 12:59:48 +0000 |
| commit | d656b174ed8976b9d77ba8098042d75dd76ef733 (patch) | |
| tree | 595cfe9df3fe86c6eb15bffd38f42dbe2951a62d | |
| parent | b9d90d7cbba5c5c108f71d04d4d309db59a12d0b (diff) | |
| parent | 79fbf214ccc7be89d8d656cf0c5b5ffe5425bece (diff) | |
Merge pull request #4425 from clubby789/adc-v3-oversampling
stm32: Enable regular oversampling for ADC v3
| -rw-r--r-- | embassy-stm32/src/adc/v3.rs | 19 |
1 files changed, 19 insertions, 0 deletions
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 @@ | |||
| 1 | use cfg_if::cfg_if; | 1 | use cfg_if::cfg_if; |
| 2 | use pac::adc::vals::Dmacfg; | 2 | use pac::adc::vals::Dmacfg; |
| 3 | #[cfg(adc_v3)] | ||
| 4 | use pac::adc::vals::{OversamplingRatio, OversamplingShift, Rovsm, Trovs}; | ||
| 3 | 5 | ||
| 4 | use super::{ | 6 | use super::{ |
| 5 | blocking_delay_us, Adc, AdcChannel, AnyAdcChannel, Instance, Resolution, RxDma, SampleTime, SealedAdcChannel, | 7 | blocking_delay_us, Adc, AdcChannel, AnyAdcChannel, Instance, Resolution, RxDma, SampleTime, SealedAdcChannel, |
| @@ -470,6 +472,23 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 470 | T::regs().cfgr2().modify(|reg| reg.set_ovse(enable)); | 472 | T::regs().cfgr2().modify(|reg| reg.set_ovse(enable)); |
| 471 | } | 473 | } |
| 472 | 474 | ||
| 475 | #[cfg(adc_v3)] | ||
| 476 | pub fn enable_regular_oversampling_mode(&mut self, mode: Rovsm, trig_mode: Trovs, enable: bool) { | ||
| 477 | T::regs().cfgr2().modify(|reg| reg.set_trovs(trig_mode)); | ||
| 478 | T::regs().cfgr2().modify(|reg| reg.set_rovsm(mode)); | ||
| 479 | T::regs().cfgr2().modify(|reg| reg.set_rovse(enable)); | ||
| 480 | } | ||
| 481 | |||
| 482 | #[cfg(adc_v3)] | ||
| 483 | pub fn set_oversampling_ratio(&mut self, ratio: OversamplingRatio) { | ||
| 484 | T::regs().cfgr2().modify(|reg| reg.set_ovsr(ratio)); | ||
| 485 | } | ||
| 486 | |||
| 487 | #[cfg(adc_v3)] | ||
| 488 | pub fn set_oversampling_shift(&mut self, shift: OversamplingShift) { | ||
| 489 | T::regs().cfgr2().modify(|reg| reg.set_ovss(shift)); | ||
| 490 | } | ||
| 491 | |||
| 473 | fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { | 492 | fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { |
| 474 | cfg_if! { | 493 | cfg_if! { |
| 475 | if #[cfg(any(adc_g0, adc_u0))] { | 494 | if #[cfg(any(adc_g0, adc_u0))] { |
