diff options
| -rw-r--r-- | embassy-stm32/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/f1.rs | 18 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/f3.rs | 16 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/f3_v1_1.rs | 51 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/mod.rs | 35 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/resolution.rs | 72 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/sample_time.rs | 148 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v1.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v2.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v3.rs | 6 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v4.rs | 2 | ||||
| -rw-r--r-- | examples/stm32f0/src/bin/adc.rs | 2 | ||||
| -rw-r--r-- | examples/stm32f334/src/bin/adc.rs | 2 | ||||
| -rw-r--r-- | examples/stm32f334/src/bin/opamp.rs | 2 | ||||
| -rw-r--r-- | examples/stm32g4/src/bin/adc.rs | 2 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/adc.rs | 2 | ||||
| -rw-r--r-- | examples/stm32l0/src/bin/adc.rs | 2 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/adc.rs | 2 |
18 files changed, 82 insertions, 288 deletions
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index e0bee6a92..7d21383c3 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml | |||
| @@ -70,7 +70,7 @@ rand_core = "0.6.3" | |||
| 70 | sdio-host = "0.5.0" | 70 | sdio-host = "0.5.0" |
| 71 | critical-section = "1.1" | 71 | critical-section = "1.1" |
| 72 | #stm32-metapac = { version = "15" } | 72 | #stm32-metapac = { version = "15" } |
| 73 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-88f71cbcd2f048c40bad162c7e7864cc3897eba4" } | 73 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-7c8b53413499acc3273b706318777a60f932d77a" } |
| 74 | vcell = "0.1.3" | 74 | vcell = "0.1.3" |
| 75 | bxcan = "0.7.0" | 75 | bxcan = "0.7.0" |
| 76 | nb = "1.0.0" | 76 | nb = "1.0.0" |
| @@ -94,7 +94,7 @@ critical-section = { version = "1.1", features = ["std"] } | |||
| 94 | proc-macro2 = "1.0.36" | 94 | proc-macro2 = "1.0.36" |
| 95 | quote = "1.0.15" | 95 | quote = "1.0.15" |
| 96 | #stm32-metapac = { version = "15", default-features = false, features = ["metadata"]} | 96 | #stm32-metapac = { version = "15", default-features = false, features = ["metadata"]} |
| 97 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-88f71cbcd2f048c40bad162c7e7864cc3897eba4", default-features = false, features = ["metadata"]} | 97 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-7c8b53413499acc3273b706318777a60f932d77a", default-features = false, features = ["metadata"]} |
| 98 | 98 | ||
| 99 | 99 | ||
| 100 | [features] | 100 | [features] |
diff --git a/embassy-stm32/src/adc/f1.rs b/embassy-stm32/src/adc/f1.rs index c896d8e3a..b27b99827 100644 --- a/embassy-stm32/src/adc/f1.rs +++ b/embassy-stm32/src/adc/f1.rs | |||
| @@ -74,7 +74,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 74 | 74 | ||
| 75 | Self { | 75 | Self { |
| 76 | adc, | 76 | adc, |
| 77 | sample_time: Default::default(), | 77 | sample_time: SampleTime::from_bits(0), |
| 78 | } | 78 | } |
| 79 | } | 79 | } |
| 80 | 80 | ||
| @@ -84,14 +84,14 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 84 | 84 | ||
| 85 | pub fn sample_time_for_us(&self, us: u32) -> SampleTime { | 85 | pub fn sample_time_for_us(&self, us: u32) -> SampleTime { |
| 86 | match us * Self::freq().0 / 1_000_000 { | 86 | match us * Self::freq().0 / 1_000_000 { |
| 87 | 0..=1 => SampleTime::Cycles1_5, | 87 | 0..=1 => SampleTime::CYCLES1_5, |
| 88 | 2..=7 => SampleTime::Cycles7_5, | 88 | 2..=7 => SampleTime::CYCLES7_5, |
| 89 | 8..=13 => SampleTime::Cycles13_5, | 89 | 8..=13 => SampleTime::CYCLES13_5, |
| 90 | 14..=28 => SampleTime::Cycles28_5, | 90 | 14..=28 => SampleTime::CYCLES28_5, |
| 91 | 29..=41 => SampleTime::Cycles41_5, | 91 | 29..=41 => SampleTime::CYCLES41_5, |
| 92 | 42..=55 => SampleTime::Cycles55_5, | 92 | 42..=55 => SampleTime::CYCLES55_5, |
| 93 | 56..=71 => SampleTime::Cycles71_5, | 93 | 56..=71 => SampleTime::CYCLES71_5, |
| 94 | _ => SampleTime::Cycles239_5, | 94 | _ => SampleTime::CYCLES239_5, |
| 95 | } | 95 | } |
| 96 | } | 96 | } |
| 97 | 97 | ||
diff --git a/embassy-stm32/src/adc/f3.rs b/embassy-stm32/src/adc/f3.rs index 6606a2b9c..efade1f64 100644 --- a/embassy-stm32/src/adc/f3.rs +++ b/embassy-stm32/src/adc/f3.rs | |||
| @@ -97,7 +97,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 97 | 97 | ||
| 98 | Self { | 98 | Self { |
| 99 | adc, | 99 | adc, |
| 100 | sample_time: Default::default(), | 100 | sample_time: SampleTime::from_bits(0), |
| 101 | } | 101 | } |
| 102 | } | 102 | } |
| 103 | 103 | ||
| @@ -107,13 +107,13 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 107 | 107 | ||
| 108 | pub fn sample_time_for_us(&self, us: u32) -> SampleTime { | 108 | pub fn sample_time_for_us(&self, us: u32) -> SampleTime { |
| 109 | match us * Self::freq().0 / 1_000_000 { | 109 | match us * Self::freq().0 / 1_000_000 { |
| 110 | 0..=1 => SampleTime::Cycles1_5, | 110 | 0..=1 => SampleTime::CYCLES1_5, |
| 111 | 2..=4 => SampleTime::Cycles4_5, | 111 | 2..=4 => SampleTime::CYCLES4_5, |
| 112 | 5..=7 => SampleTime::Cycles7_5, | 112 | 5..=7 => SampleTime::CYCLES7_5, |
| 113 | 8..=19 => SampleTime::Cycles19_5, | 113 | 8..=19 => SampleTime::CYCLES19_5, |
| 114 | 20..=61 => SampleTime::Cycles61_5, | 114 | 20..=61 => SampleTime::CYCLES61_5, |
| 115 | 62..=181 => SampleTime::Cycles181_5, | 115 | 62..=181 => SampleTime::CYCLES181_5, |
| 116 | _ => SampleTime::Cycles601_5, | 116 | _ => SampleTime::CYCLES601_5, |
| 117 | } | 117 | } |
| 118 | } | 118 | } |
| 119 | 119 | ||
diff --git a/embassy-stm32/src/adc/f3_v1_1.rs b/embassy-stm32/src/adc/f3_v1_1.rs index 6915a8f1c..f842893fa 100644 --- a/embassy-stm32/src/adc/f3_v1_1.rs +++ b/embassy-stm32/src/adc/f3_v1_1.rs | |||
| @@ -107,12 +107,12 @@ impl Calibration { | |||
| 107 | 107 | ||
| 108 | /// Returns a calibrated voltage value as in microvolts (uV) | 108 | /// Returns a calibrated voltage value as in microvolts (uV) |
| 109 | pub fn cal_uv(&self, raw: u16, resolution: super::Resolution) -> u32 { | 109 | pub fn cal_uv(&self, raw: u16, resolution: super::Resolution) -> u32 { |
| 110 | (self.vdda_uv() / resolution.to_max_count()) * raw as u32 | 110 | (self.vdda_uv() / super::resolution_to_max_count(resolution)) * raw as u32 |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | /// Returns a calibrated voltage value as an f32 | 113 | /// Returns a calibrated voltage value as an f32 |
| 114 | pub fn cal_f32(&self, raw: u16, resolution: super::Resolution) -> f32 { | 114 | pub fn cal_f32(&self, raw: u16, resolution: super::Resolution) -> f32 { |
| 115 | raw as f32 * self.vdda_f32() / resolution.to_max_count() as f32 | 115 | raw as f32 * self.vdda_f32() / super::resolution_to_max_count(resolution) as f32 |
| 116 | } | 116 | } |
| 117 | } | 117 | } |
| 118 | 118 | ||
| @@ -175,12 +175,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | pub fn resolution(&self) -> Resolution { | 177 | pub fn resolution(&self) -> Resolution { |
| 178 | match T::regs().cr1().read().res() { | 178 | T::regs().cr1().read().res() |
| 179 | crate::pac::adc::vals::Res::TWELVEBIT => Resolution::TwelveBit, | ||
| 180 | crate::pac::adc::vals::Res::TENBIT => Resolution::TenBit, | ||
| 181 | crate::pac::adc::vals::Res::EIGHTBIT => Resolution::EightBit, | ||
| 182 | crate::pac::adc::vals::Res::SIXBIT => Resolution::SixBit, | ||
| 183 | } | ||
| 184 | } | 179 | } |
| 185 | 180 | ||
| 186 | pub fn enable_vref(&self) -> Vref<T> { | 181 | pub fn enable_vref(&self) -> Vref<T> { |
| @@ -359,23 +354,23 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 359 | 354 | ||
| 360 | fn get_res_clks(res: Resolution) -> u32 { | 355 | fn get_res_clks(res: Resolution) -> u32 { |
| 361 | match res { | 356 | match res { |
| 362 | Resolution::TwelveBit => 12, | 357 | Resolution::BITS12 => 12, |
| 363 | Resolution::TenBit => 11, | 358 | Resolution::BITS10 => 11, |
| 364 | Resolution::EightBit => 9, | 359 | Resolution::BITS8 => 9, |
| 365 | Resolution::SixBit => 7, | 360 | Resolution::BITS6 => 7, |
| 366 | } | 361 | } |
| 367 | } | 362 | } |
| 368 | 363 | ||
| 369 | fn get_sample_time_clks(sample_time: SampleTime) -> u32 { | 364 | fn get_sample_time_clks(sample_time: SampleTime) -> u32 { |
| 370 | match sample_time { | 365 | match sample_time { |
| 371 | SampleTime::Cycles4 => 4, | 366 | SampleTime::CYCLES4 => 4, |
| 372 | SampleTime::Cycles9 => 9, | 367 | SampleTime::CYCLES9 => 9, |
| 373 | SampleTime::Cycles16 => 16, | 368 | SampleTime::CYCLES16 => 16, |
| 374 | SampleTime::Cycles24 => 24, | 369 | SampleTime::CYCLES24 => 24, |
| 375 | SampleTime::Cycles48 => 48, | 370 | SampleTime::CYCLES48 => 48, |
| 376 | SampleTime::Cycles96 => 96, | 371 | SampleTime::CYCLES96 => 96, |
| 377 | SampleTime::Cycles192 => 192, | 372 | SampleTime::CYCLES192 => 192, |
| 378 | SampleTime::Cycles384 => 384, | 373 | SampleTime::CYCLES384 => 384, |
| 379 | } | 374 | } |
| 380 | } | 375 | } |
| 381 | 376 | ||
| @@ -384,14 +379,14 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 384 | let us_clks = us * Self::freq().0 / 1_000_000; | 379 | let us_clks = us * Self::freq().0 / 1_000_000; |
| 385 | let clks = us_clks.saturating_sub(res_clks); | 380 | let clks = us_clks.saturating_sub(res_clks); |
| 386 | match clks { | 381 | match clks { |
| 387 | 0..=4 => SampleTime::Cycles4, | 382 | 0..=4 => SampleTime::CYCLES4, |
| 388 | 5..=9 => SampleTime::Cycles9, | 383 | 5..=9 => SampleTime::CYCLES9, |
| 389 | 10..=16 => SampleTime::Cycles16, | 384 | 10..=16 => SampleTime::CYCLES16, |
| 390 | 17..=24 => SampleTime::Cycles24, | 385 | 17..=24 => SampleTime::CYCLES24, |
| 391 | 25..=48 => SampleTime::Cycles48, | 386 | 25..=48 => SampleTime::CYCLES48, |
| 392 | 49..=96 => SampleTime::Cycles96, | 387 | 49..=96 => SampleTime::CYCLES96, |
| 393 | 97..=192 => SampleTime::Cycles192, | 388 | 97..=192 => SampleTime::CYCLES192, |
| 394 | 193.. => SampleTime::Cycles384, | 389 | 193.. => SampleTime::CYCLES384, |
| 395 | } | 390 | } |
| 396 | } | 391 | } |
| 397 | 392 | ||
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs index b273c6394..0d0d40549 100644 --- a/embassy-stm32/src/adc/mod.rs +++ b/embassy-stm32/src/adc/mod.rs | |||
| @@ -14,18 +14,13 @@ | |||
| 14 | #[cfg_attr(adc_v4, path = "v4.rs")] | 14 | #[cfg_attr(adc_v4, path = "v4.rs")] |
| 15 | mod _version; | 15 | mod _version; |
| 16 | 16 | ||
| 17 | #[cfg(not(any(adc_f1, adc_f3_v2)))] | ||
| 18 | mod resolution; | ||
| 19 | mod sample_time; | ||
| 20 | |||
| 21 | #[allow(unused)] | 17 | #[allow(unused)] |
| 22 | #[cfg(not(adc_f3_v2))] | 18 | #[cfg(not(adc_f3_v2))] |
| 23 | pub use _version::*; | 19 | pub use _version::*; |
| 24 | #[cfg(not(any(adc_f1, adc_f3, adc_f3_v2)))] | ||
| 25 | pub use resolution::Resolution; | ||
| 26 | #[cfg(not(adc_f3_v2))] | ||
| 27 | pub use sample_time::SampleTime; | ||
| 28 | 20 | ||
| 21 | #[cfg(not(any(adc_f1, adc_f3_v2)))] | ||
| 22 | pub use crate::pac::adc::vals::Res as Resolution; | ||
| 23 | pub use crate::pac::adc::vals::SampleTime; | ||
| 29 | use crate::peripherals; | 24 | use crate::peripherals; |
| 30 | 25 | ||
| 31 | /// Analog to Digital driver. | 26 | /// Analog to Digital driver. |
| @@ -137,3 +132,27 @@ macro_rules! impl_adc_pin { | |||
| 137 | } | 132 | } |
| 138 | }; | 133 | }; |
| 139 | } | 134 | } |
| 135 | |||
| 136 | /// Get the maximum reading value for this resolution. | ||
| 137 | /// | ||
| 138 | /// This is `2**n - 1`. | ||
| 139 | #[cfg(not(any(adc_f1, adc_f3_v2)))] | ||
| 140 | pub const fn resolution_to_max_count(res: Resolution) -> u32 { | ||
| 141 | match res { | ||
| 142 | #[cfg(adc_v4)] | ||
| 143 | Resolution::BITS16 => (1 << 16) - 1, | ||
| 144 | #[cfg(adc_v4)] | ||
| 145 | Resolution::BITS14 => (1 << 14) - 1, | ||
| 146 | #[cfg(adc_v4)] | ||
| 147 | Resolution::BITS14V => (1 << 14) - 1, | ||
| 148 | #[cfg(adc_v4)] | ||
| 149 | Resolution::BITS12V => (1 << 12) - 1, | ||
| 150 | Resolution::BITS12 => (1 << 12) - 1, | ||
| 151 | Resolution::BITS10 => (1 << 10) - 1, | ||
| 152 | Resolution::BITS8 => (1 << 8) - 1, | ||
| 153 | #[cfg(any(adc_v1, adc_v2, adc_v3, adc_l0, adc_g0, adc_f3, adc_f3_v1_1, adc_h5))] | ||
| 154 | Resolution::BITS6 => (1 << 6) - 1, | ||
| 155 | #[allow(unreachable_patterns)] | ||
| 156 | _ => core::unreachable!(), | ||
| 157 | } | ||
| 158 | } | ||
diff --git a/embassy-stm32/src/adc/resolution.rs b/embassy-stm32/src/adc/resolution.rs deleted file mode 100644 index 37788cd77..000000000 --- a/embassy-stm32/src/adc/resolution.rs +++ /dev/null | |||
| @@ -1,72 +0,0 @@ | |||
| 1 | /// ADC resolution | ||
| 2 | #[allow(missing_docs)] | ||
| 3 | #[cfg(any(adc_v1, adc_v2, adc_v3, adc_l0, adc_g0, adc_f3, adc_f3_v1_1, adc_h5))] | ||
| 4 | #[derive(Clone, Copy, Debug, Eq, PartialEq)] | ||
| 5 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 6 | pub enum Resolution { | ||
| 7 | TwelveBit, | ||
| 8 | TenBit, | ||
| 9 | EightBit, | ||
| 10 | SixBit, | ||
| 11 | } | ||
| 12 | |||
| 13 | /// ADC resolution | ||
| 14 | #[allow(missing_docs)] | ||
| 15 | #[cfg(adc_v4)] | ||
| 16 | #[derive(Clone, Copy, Debug, Eq, PartialEq)] | ||
| 17 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 18 | pub enum Resolution { | ||
| 19 | SixteenBit, | ||
| 20 | FourteenBit, | ||
| 21 | TwelveBit, | ||
| 22 | TenBit, | ||
| 23 | EightBit, | ||
| 24 | } | ||
| 25 | |||
| 26 | impl Default for Resolution { | ||
| 27 | fn default() -> Self { | ||
| 28 | #[cfg(any(adc_v1, adc_v2, adc_v3, adc_l0, adc_g0, adc_f3, adc_f3_v1_1, adc_h5))] | ||
| 29 | { | ||
| 30 | Self::TwelveBit | ||
| 31 | } | ||
| 32 | #[cfg(adc_v4)] | ||
| 33 | { | ||
| 34 | Self::SixteenBit | ||
| 35 | } | ||
| 36 | } | ||
| 37 | } | ||
| 38 | |||
| 39 | impl From<Resolution> for crate::pac::adc::vals::Res { | ||
| 40 | fn from(res: Resolution) -> crate::pac::adc::vals::Res { | ||
| 41 | match res { | ||
| 42 | #[cfg(adc_v4)] | ||
| 43 | Resolution::SixteenBit => crate::pac::adc::vals::Res::SIXTEENBIT, | ||
| 44 | #[cfg(adc_v4)] | ||
| 45 | Resolution::FourteenBit => crate::pac::adc::vals::Res::FOURTEENBITV, | ||
| 46 | Resolution::TwelveBit => crate::pac::adc::vals::Res::TWELVEBIT, | ||
| 47 | Resolution::TenBit => crate::pac::adc::vals::Res::TENBIT, | ||
| 48 | Resolution::EightBit => crate::pac::adc::vals::Res::EIGHTBIT, | ||
| 49 | #[cfg(any(adc_v1, adc_v2, adc_v3, adc_l0, adc_g0, adc_f3, adc_f3_v1_1, adc_h5))] | ||
| 50 | Resolution::SixBit => crate::pac::adc::vals::Res::SIXBIT, | ||
| 51 | } | ||
| 52 | } | ||
| 53 | } | ||
| 54 | |||
| 55 | impl Resolution { | ||
| 56 | /// Get the maximum reading value for this resolution. | ||
| 57 | /// | ||
| 58 | /// This is `2**n - 1`. | ||
| 59 | pub const fn to_max_count(&self) -> u32 { | ||
| 60 | match self { | ||
| 61 | #[cfg(adc_v4)] | ||
| 62 | Resolution::SixteenBit => (1 << 16) - 1, | ||
| 63 | #[cfg(adc_v4)] | ||
| 64 | Resolution::FourteenBit => (1 << 14) - 1, | ||
| 65 | Resolution::TwelveBit => (1 << 12) - 1, | ||
| 66 | Resolution::TenBit => (1 << 10) - 1, | ||
| 67 | Resolution::EightBit => (1 << 8) - 1, | ||
| 68 | #[cfg(any(adc_v1, adc_v2, adc_v3, adc_l0, adc_g0, adc_f3, adc_f3_v1_1, adc_h5))] | ||
| 69 | Resolution::SixBit => (1 << 6) - 1, | ||
| 70 | } | ||
| 71 | } | ||
| 72 | } | ||
diff --git a/embassy-stm32/src/adc/sample_time.rs b/embassy-stm32/src/adc/sample_time.rs deleted file mode 100644 index 19bc22938..000000000 --- a/embassy-stm32/src/adc/sample_time.rs +++ /dev/null | |||
| @@ -1,148 +0,0 @@ | |||
| 1 | #[cfg(not(adc_f3_v2))] | ||
| 2 | macro_rules! impl_sample_time { | ||
| 3 | ($default_doc:expr, $default:ident, ($(($doc:expr, $variant:ident, $pac_variant:ident)),*)) => { | ||
| 4 | #[doc = concat!("ADC sample time\n\nThe default setting is ", $default_doc, " ADC clock cycles.")] | ||
| 5 | #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)] | ||
| 6 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 7 | pub enum SampleTime { | ||
| 8 | $( | ||
| 9 | #[doc = concat!($doc, " ADC clock cycles.")] | ||
| 10 | $variant, | ||
| 11 | )* | ||
| 12 | } | ||
| 13 | |||
| 14 | impl From<SampleTime> for crate::pac::adc::vals::SampleTime { | ||
| 15 | fn from(sample_time: SampleTime) -> crate::pac::adc::vals::SampleTime { | ||
| 16 | match sample_time { | ||
| 17 | $(SampleTime::$variant => crate::pac::adc::vals::SampleTime::$pac_variant),* | ||
| 18 | } | ||
| 19 | } | ||
| 20 | } | ||
| 21 | |||
| 22 | impl From<crate::pac::adc::vals::SampleTime> for SampleTime { | ||
| 23 | fn from(sample_time: crate::pac::adc::vals::SampleTime) -> SampleTime { | ||
| 24 | match sample_time { | ||
| 25 | $(crate::pac::adc::vals::SampleTime::$pac_variant => SampleTime::$variant),* | ||
| 26 | } | ||
| 27 | } | ||
| 28 | } | ||
| 29 | |||
| 30 | impl Default for SampleTime { | ||
| 31 | fn default() -> Self { | ||
| 32 | Self::$default | ||
| 33 | } | ||
| 34 | } | ||
| 35 | }; | ||
| 36 | } | ||
| 37 | |||
| 38 | #[cfg(any(adc_f1, adc_v1))] | ||
| 39 | impl_sample_time!( | ||
| 40 | "1.5", | ||
| 41 | Cycles1_5, | ||
| 42 | ( | ||
| 43 | ("1.5", Cycles1_5, CYCLES1_5), | ||
| 44 | ("7.5", Cycles7_5, CYCLES7_5), | ||
| 45 | ("13.5", Cycles13_5, CYCLES13_5), | ||
| 46 | ("28.5", Cycles28_5, CYCLES28_5), | ||
| 47 | ("41.5", Cycles41_5, CYCLES41_5), | ||
| 48 | ("55.5", Cycles55_5, CYCLES55_5), | ||
| 49 | ("71.5", Cycles71_5, CYCLES71_5), | ||
| 50 | ("239.5", Cycles239_5, CYCLES239_5) | ||
| 51 | ) | ||
| 52 | ); | ||
| 53 | |||
| 54 | #[cfg(adc_v2)] | ||
| 55 | impl_sample_time!( | ||
| 56 | "3", | ||
| 57 | Cycles3, | ||
| 58 | ( | ||
| 59 | ("3", Cycles3, CYCLES3), | ||
| 60 | ("15", Cycles15, CYCLES15), | ||
| 61 | ("28", Cycles28, CYCLES28), | ||
| 62 | ("56", Cycles56, CYCLES56), | ||
| 63 | ("84", Cycles84, CYCLES84), | ||
| 64 | ("112", Cycles112, CYCLES112), | ||
| 65 | ("144", Cycles144, CYCLES144), | ||
| 66 | ("480", Cycles480, CYCLES480) | ||
| 67 | ) | ||
| 68 | ); | ||
| 69 | |||
| 70 | #[cfg(any(adc_v3, adc_h5))] | ||
| 71 | impl_sample_time!( | ||
| 72 | "2.5", | ||
| 73 | Cycles2_5, | ||
| 74 | ( | ||
| 75 | ("2.5", Cycles2_5, CYCLES2_5), | ||
| 76 | ("6.5", Cycles6_5, CYCLES6_5), | ||
| 77 | ("12.5", Cycles12_5, CYCLES12_5), | ||
| 78 | ("24.5", Cycles24_5, CYCLES24_5), | ||
| 79 | ("47.5", Cycles47_5, CYCLES47_5), | ||
| 80 | ("92.5", Cycles92_5, CYCLES92_5), | ||
| 81 | ("247.5", Cycles247_5, CYCLES247_5), | ||
| 82 | ("640.5", Cycles640_5, CYCLES640_5) | ||
| 83 | ) | ||
| 84 | ); | ||
| 85 | |||
| 86 | #[cfg(any(adc_l0, adc_g0))] | ||
| 87 | impl_sample_time!( | ||
| 88 | "1.5", | ||
| 89 | Cycles1_5, | ||
| 90 | ( | ||
| 91 | ("1.5", Cycles1_5, CYCLES1_5), | ||
| 92 | ("3.5", Cycles3_5, CYCLES3_5), | ||
| 93 | ("7.5", Cycles7_5, CYCLES7_5), | ||
| 94 | ("12.5", Cycles12_5, CYCLES12_5), | ||
| 95 | ("19.5", Cycles19_5, CYCLES19_5), | ||
| 96 | ("39.5", Cycles39_5, CYCLES39_5), | ||
| 97 | ("79.5", Cycles79_5, CYCLES79_5), | ||
| 98 | ("160.5", Cycles160_5, CYCLES160_5) | ||
| 99 | ) | ||
| 100 | ); | ||
| 101 | |||
| 102 | #[cfg(adc_v4)] | ||
| 103 | impl_sample_time!( | ||
| 104 | "1.5", | ||
| 105 | Cycles1_5, | ||
| 106 | ( | ||
| 107 | ("1.5", Cycles1_5, CYCLES1_5), | ||
| 108 | ("2.5", Cycles2_5, CYCLES2_5), | ||
| 109 | ("8.5", Cycles8_5, CYCLES8_5), | ||
| 110 | ("16.5", Cycles16_5, CYCLES16_5), | ||
| 111 | ("32.5", Cycles32_5, CYCLES32_5), | ||
| 112 | ("64.5", Cycles64_5, CYCLES64_5), | ||
| 113 | ("387.5", Cycles387_5, CYCLES387_5), | ||
| 114 | ("810.5", Cycles810_5, CYCLES810_5) | ||
| 115 | ) | ||
| 116 | ); | ||
| 117 | |||
| 118 | #[cfg(adc_f3)] | ||
| 119 | impl_sample_time!( | ||
| 120 | "1.5", | ||
| 121 | Cycles1_5, | ||
| 122 | ( | ||
| 123 | ("1.5", Cycles1_5, CYCLES1_5), | ||
| 124 | ("2.5", Cycles2_5, CYCLES2_5), | ||
| 125 | ("4.5", Cycles4_5, CYCLES4_5), | ||
| 126 | ("7.5", Cycles7_5, CYCLES7_5), | ||
| 127 | ("19.5", Cycles19_5, CYCLES19_5), | ||
| 128 | ("61.5", Cycles61_5, CYCLES61_5), | ||
| 129 | ("181.5", Cycles181_5, CYCLES181_5), | ||
| 130 | ("601.5", Cycles601_5, CYCLES601_5) | ||
| 131 | ) | ||
| 132 | ); | ||
| 133 | |||
| 134 | #[cfg(any(adc_f3_v1_1))] | ||
| 135 | impl_sample_time!( | ||
| 136 | "4", | ||
| 137 | Cycles4, | ||
| 138 | ( | ||
| 139 | ("4", Cycles4, CYCLES4), | ||
| 140 | ("9", Cycles9, CYCLES9), | ||
| 141 | ("16", Cycles16, CYCLES16), | ||
| 142 | ("24", Cycles24, CYCLES24), | ||
| 143 | ("48", Cycles48, CYCLES48), | ||
| 144 | ("96", Cycles96, CYCLES96), | ||
| 145 | ("192", Cycles192, CYCLES192), | ||
| 146 | ("384", Cycles384, CYCLES384) | ||
| 147 | ) | ||
| 148 | ); | ||
diff --git a/embassy-stm32/src/adc/v1.rs b/embassy-stm32/src/adc/v1.rs index 37115dfab..a8dc6ce98 100644 --- a/embassy-stm32/src/adc/v1.rs +++ b/embassy-stm32/src/adc/v1.rs | |||
| @@ -109,7 +109,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 109 | 109 | ||
| 110 | Self { | 110 | Self { |
| 111 | adc, | 111 | adc, |
| 112 | sample_time: Default::default(), | 112 | sample_time: SampleTime::from_bits(0), |
| 113 | } | 113 | } |
| 114 | } | 114 | } |
| 115 | 115 | ||
diff --git a/embassy-stm32/src/adc/v2.rs b/embassy-stm32/src/adc/v2.rs index b37ac5a5d..f6f7dbfcc 100644 --- a/embassy-stm32/src/adc/v2.rs +++ b/embassy-stm32/src/adc/v2.rs | |||
| @@ -111,7 +111,7 @@ where | |||
| 111 | 111 | ||
| 112 | Self { | 112 | Self { |
| 113 | adc, | 113 | adc, |
| 114 | sample_time: Default::default(), | 114 | sample_time: SampleTime::from_bits(0), |
| 115 | } | 115 | } |
| 116 | } | 116 | } |
| 117 | 117 | ||
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs index 0c44e4400..5f3512cad 100644 --- a/embassy-stm32/src/adc/v3.rs +++ b/embassy-stm32/src/adc/v3.rs | |||
| @@ -102,7 +102,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 102 | 102 | ||
| 103 | Self { | 103 | Self { |
| 104 | adc, | 104 | adc, |
| 105 | sample_time: Default::default(), | 105 | sample_time: SampleTime::from_bits(0), |
| 106 | } | 106 | } |
| 107 | } | 107 | } |
| 108 | 108 | ||
| @@ -259,8 +259,8 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 259 | } else { | 259 | } else { |
| 260 | let sample_time = sample_time.into(); | 260 | let sample_time = sample_time.into(); |
| 261 | T::regs() | 261 | T::regs() |
| 262 | .smpr(ch as usize / 10) | 262 | .smpr(_ch as usize / 10) |
| 263 | .modify(|reg| reg.set_smp(ch as usize % 10, sample_time)); | 263 | .modify(|reg| reg.set_smp(_ch as usize % 10, sample_time)); |
| 264 | } | 264 | } |
| 265 | } | 265 | } |
| 266 | } | 266 | } |
diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs index 048e73184..3fd047375 100644 --- a/embassy-stm32/src/adc/v4.rs +++ b/embassy-stm32/src/adc/v4.rs | |||
| @@ -159,7 +159,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 159 | } | 159 | } |
| 160 | let mut s = Self { | 160 | let mut s = Self { |
| 161 | adc, | 161 | adc, |
| 162 | sample_time: Default::default(), | 162 | sample_time: SampleTime::from_bits(0), |
| 163 | }; | 163 | }; |
| 164 | s.power_up(delay); | 164 | s.power_up(delay); |
| 165 | s.configure_differential_inputs(); | 165 | s.configure_differential_inputs(); |
diff --git a/examples/stm32f0/src/bin/adc.rs b/examples/stm32f0/src/bin/adc.rs index 8fef062b3..c2fb143cd 100644 --- a/examples/stm32f0/src/bin/adc.rs +++ b/examples/stm32f0/src/bin/adc.rs | |||
| @@ -19,7 +19,7 @@ async fn main(_spawner: Spawner) { | |||
| 19 | info!("Hello World!"); | 19 | info!("Hello World!"); |
| 20 | 20 | ||
| 21 | let mut adc = Adc::new(p.ADC, Irqs, &mut Delay); | 21 | let mut adc = Adc::new(p.ADC, Irqs, &mut Delay); |
| 22 | adc.set_sample_time(SampleTime::Cycles71_5); | 22 | adc.set_sample_time(SampleTime::CYCLES71_5); |
| 23 | let mut pin = p.PA1; | 23 | let mut pin = p.PA1; |
| 24 | 24 | ||
| 25 | let mut vrefint = adc.enable_vref(&mut Delay); | 25 | let mut vrefint = adc.enable_vref(&mut Delay); |
diff --git a/examples/stm32f334/src/bin/adc.rs b/examples/stm32f334/src/bin/adc.rs index a9fb7f1a6..bd126ce68 100644 --- a/examples/stm32f334/src/bin/adc.rs +++ b/examples/stm32f334/src/bin/adc.rs | |||
| @@ -40,7 +40,7 @@ async fn main(_spawner: Spawner) -> ! { | |||
| 40 | 40 | ||
| 41 | let mut adc = Adc::new(p.ADC1, Irqs, &mut Delay); | 41 | let mut adc = Adc::new(p.ADC1, Irqs, &mut Delay); |
| 42 | 42 | ||
| 43 | adc.set_sample_time(SampleTime::Cycles601_5); | 43 | adc.set_sample_time(SampleTime::CYCLES601_5); |
| 44 | 44 | ||
| 45 | info!("enable vrefint..."); | 45 | info!("enable vrefint..."); |
| 46 | 46 | ||
diff --git a/examples/stm32f334/src/bin/opamp.rs b/examples/stm32f334/src/bin/opamp.rs index 6f25191be..a5c710aa2 100644 --- a/examples/stm32f334/src/bin/opamp.rs +++ b/examples/stm32f334/src/bin/opamp.rs | |||
| @@ -42,7 +42,7 @@ async fn main(_spawner: Spawner) -> ! { | |||
| 42 | let mut adc = Adc::new(p.ADC2, Irqs, &mut Delay); | 42 | let mut adc = Adc::new(p.ADC2, Irqs, &mut Delay); |
| 43 | let mut opamp = OpAmp::new(p.OPAMP2); | 43 | let mut opamp = OpAmp::new(p.OPAMP2); |
| 44 | 44 | ||
| 45 | adc.set_sample_time(SampleTime::Cycles601_5); | 45 | adc.set_sample_time(SampleTime::CYCLES601_5); |
| 46 | 46 | ||
| 47 | info!("enable vrefint..."); | 47 | info!("enable vrefint..."); |
| 48 | 48 | ||
diff --git a/examples/stm32g4/src/bin/adc.rs b/examples/stm32g4/src/bin/adc.rs index 99e3ef63b..6c6de1ffe 100644 --- a/examples/stm32g4/src/bin/adc.rs +++ b/examples/stm32g4/src/bin/adc.rs | |||
| @@ -30,7 +30,7 @@ async fn main(_spawner: Spawner) { | |||
| 30 | info!("Hello World!"); | 30 | info!("Hello World!"); |
| 31 | 31 | ||
| 32 | let mut adc = Adc::new(p.ADC2, &mut Delay); | 32 | let mut adc = Adc::new(p.ADC2, &mut Delay); |
| 33 | adc.set_sample_time(SampleTime::Cycles32_5); | 33 | adc.set_sample_time(SampleTime::CYCLES32_5); |
| 34 | 34 | ||
| 35 | loop { | 35 | loop { |
| 36 | let measured = adc.read(&mut p.PA7); | 36 | let measured = adc.read(&mut p.PA7); |
diff --git a/examples/stm32h7/src/bin/adc.rs b/examples/stm32h7/src/bin/adc.rs index fe6fe69a1..f0278239f 100644 --- a/examples/stm32h7/src/bin/adc.rs +++ b/examples/stm32h7/src/bin/adc.rs | |||
| @@ -46,7 +46,7 @@ async fn main(_spawner: Spawner) { | |||
| 46 | 46 | ||
| 47 | let mut adc = Adc::new(p.ADC3, &mut Delay); | 47 | let mut adc = Adc::new(p.ADC3, &mut Delay); |
| 48 | 48 | ||
| 49 | adc.set_sample_time(SampleTime::Cycles32_5); | 49 | adc.set_sample_time(SampleTime::CYCLES32_5); |
| 50 | 50 | ||
| 51 | let mut vrefint_channel = adc.enable_vrefint(); | 51 | let mut vrefint_channel = adc.enable_vrefint(); |
| 52 | 52 | ||
diff --git a/examples/stm32l0/src/bin/adc.rs b/examples/stm32l0/src/bin/adc.rs index adeaa208a..97d41ca4b 100644 --- a/examples/stm32l0/src/bin/adc.rs +++ b/examples/stm32l0/src/bin/adc.rs | |||
| @@ -19,7 +19,7 @@ async fn main(_spawner: Spawner) { | |||
| 19 | info!("Hello World!"); | 19 | info!("Hello World!"); |
| 20 | 20 | ||
| 21 | let mut adc = Adc::new(p.ADC, Irqs, &mut Delay); | 21 | let mut adc = Adc::new(p.ADC, Irqs, &mut Delay); |
| 22 | adc.set_sample_time(SampleTime::Cycles79_5); | 22 | adc.set_sample_time(SampleTime::CYCLES79_5); |
| 23 | let mut pin = p.PA1; | 23 | let mut pin = p.PA1; |
| 24 | 24 | ||
| 25 | let mut vrefint = adc.enable_vref(&mut Delay); | 25 | let mut vrefint = adc.enable_vref(&mut Delay); |
diff --git a/examples/stm32l4/src/bin/adc.rs b/examples/stm32l4/src/bin/adc.rs index d01e9f1b3..910944673 100644 --- a/examples/stm32l4/src/bin/adc.rs +++ b/examples/stm32l4/src/bin/adc.rs | |||
| @@ -20,7 +20,7 @@ fn main() -> ! { | |||
| 20 | 20 | ||
| 21 | let mut adc = Adc::new(p.ADC1, &mut Delay); | 21 | let mut adc = Adc::new(p.ADC1, &mut Delay); |
| 22 | //adc.enable_vref(); | 22 | //adc.enable_vref(); |
| 23 | adc.set_resolution(Resolution::EightBit); | 23 | adc.set_resolution(Resolution::BITS8); |
| 24 | let mut channel = p.PC0; | 24 | let mut channel = p.PC0; |
| 25 | 25 | ||
| 26 | loop { | 26 | loop { |
