diff options
| author | xoviat <[email protected]> | 2023-09-11 17:12:54 -0500 |
|---|---|---|
| committer | xoviat <[email protected]> | 2023-09-11 17:12:54 -0500 |
| commit | b9889ad3b568b54b029422a039b7e9bf73b60a39 (patch) | |
| tree | 5a015c169aab447e80d852edf1087b2f239bc980 | |
| parent | 1133cbf90e469109e8b53daf7284742784e8fb33 (diff) | |
stm32: add g4 adc345 and misc.
| -rw-r--r-- | embassy-stm32/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/mod.rs | 38 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v2.rs | 2 |
3 files changed, 37 insertions, 7 deletions
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index 4ba47764d..948ed3ca4 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml | |||
| @@ -58,7 +58,7 @@ sdio-host = "0.5.0" | |||
| 58 | embedded-sdmmc = { git = "https://github.com/embassy-rs/embedded-sdmmc-rs", rev = "a4f293d3a6f72158385f79c98634cb8a14d0d2fc", optional = true } | 58 | embedded-sdmmc = { git = "https://github.com/embassy-rs/embedded-sdmmc-rs", rev = "a4f293d3a6f72158385f79c98634cb8a14d0d2fc", optional = true } |
| 59 | critical-section = "1.1" | 59 | critical-section = "1.1" |
| 60 | atomic-polyfill = "1.0.1" | 60 | atomic-polyfill = "1.0.1" |
| 61 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-e667107cf81934383ec5744f49b2cda0599ec749" } | 61 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-4e6a74f69c4bc5d2d4872ba50d805e75bfe55cad" } |
| 62 | vcell = "0.1.3" | 62 | vcell = "0.1.3" |
| 63 | bxcan = "0.7.0" | 63 | bxcan = "0.7.0" |
| 64 | nb = "1.0.0" | 64 | nb = "1.0.0" |
| @@ -77,7 +77,7 @@ critical-section = { version = "1.1", features = ["std"] } | |||
| 77 | [build-dependencies] | 77 | [build-dependencies] |
| 78 | proc-macro2 = "1.0.36" | 78 | proc-macro2 = "1.0.36" |
| 79 | quote = "1.0.15" | 79 | quote = "1.0.15" |
| 80 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-e667107cf81934383ec5744f49b2cda0599ec749", default-features = false, features = ["metadata"]} | 80 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-4e6a74f69c4bc5d2d4872ba50d805e75bfe55cad", default-features = false, features = ["metadata"]} |
| 81 | 81 | ||
| 82 | [features] | 82 | [features] |
| 83 | default = ["rt"] | 83 | default = ["rt"] |
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs index 013debca8..d1cfd8fbd 100644 --- a/embassy-stm32/src/adc/mod.rs +++ b/embassy-stm32/src/adc/mod.rs | |||
| @@ -80,17 +80,21 @@ foreach_peripheral!( | |||
| 80 | #[cfg(any(stm32h7, adc_f3, adc_v4))] | 80 | #[cfg(any(stm32h7, adc_f3, adc_v4))] |
| 81 | foreach_peripheral!( | 81 | foreach_peripheral!( |
| 82 | (adc, ADC3) => { | 82 | (adc, ADC3) => { |
| 83 | #[cfg(not(any(stm32g4x1, stm32g4x2, stm32g4x3, stm32g4x4)))] | ||
| 84 | impl crate::adc::sealed::Instance for peripherals::ADC3 { | 83 | impl crate::adc::sealed::Instance for peripherals::ADC3 { |
| 85 | fn regs() -> crate::pac::adc::Adc { | 84 | fn regs() -> crate::pac::adc::Adc { |
| 86 | crate::pac::ADC3 | 85 | crate::pac::ADC3 |
| 87 | } | 86 | } |
| 88 | #[cfg(all(not(adc_f1), not(adc_v1)))] | 87 | #[cfg(all(not(adc_f1), not(adc_v1)))] |
| 88 | #[allow(unreachable_code)] | ||
| 89 | fn common_regs() -> crate::pac::adccommon::AdcCommon { | 89 | fn common_regs() -> crate::pac::adccommon::AdcCommon { |
| 90 | foreach_peripheral!{ | 90 | foreach_peripheral!{ |
| 91 | (adccommon, ADC3_COMMON) => { | 91 | (adccommon, ADC3_COMMON) => { |
| 92 | return crate::pac::ADC3_COMMON | 92 | return crate::pac::ADC3_COMMON |
| 93 | }; | 93 | }; |
| 94 | // Fall back to ADC_COMMON if ADC3_COMMON does not exist | ||
| 95 | (adccommon, ADC_COMMON) => { | ||
| 96 | return crate::pac::ADC_COMMON | ||
| 97 | }; | ||
| 94 | } | 98 | } |
| 95 | } | 99 | } |
| 96 | 100 | ||
| @@ -100,21 +104,24 @@ foreach_peripheral!( | |||
| 100 | } | 104 | } |
| 101 | } | 105 | } |
| 102 | 106 | ||
| 103 | #[cfg(not(any(stm32g4x1, stm32g4x2, stm32g4x3, stm32g4x4)))] | ||
| 104 | impl crate::adc::Instance for peripherals::ADC3 {} | 107 | impl crate::adc::Instance for peripherals::ADC3 {} |
| 105 | }; | 108 | }; |
| 106 | (adc, ADC4) => { | 109 | (adc, ADC4) => { |
| 107 | #[cfg(not(any(stm32g4x1, stm32g4x2, stm32g4x3, stm32g4x4)))] | ||
| 108 | impl crate::adc::sealed::Instance for peripherals::ADC4 { | 110 | impl crate::adc::sealed::Instance for peripherals::ADC4 { |
| 109 | fn regs() -> crate::pac::adc::Adc { | 111 | fn regs() -> crate::pac::adc::Adc { |
| 110 | crate::pac::ADC4 | 112 | crate::pac::ADC4 |
| 111 | } | 113 | } |
| 112 | #[cfg(not(any(adc_f1, adc_v1)))] | 114 | #[cfg(not(any(adc_f1, adc_v1)))] |
| 115 | #[allow(unreachable_code)] | ||
| 113 | fn common_regs() -> crate::pac::adccommon::AdcCommon { | 116 | fn common_regs() -> crate::pac::adccommon::AdcCommon { |
| 114 | foreach_peripheral!{ | 117 | foreach_peripheral!{ |
| 115 | (adccommon, ADC3_COMMON) => { | 118 | (adccommon, ADC3_COMMON) => { |
| 116 | return crate::pac::ADC3_COMMON | 119 | return crate::pac::ADC3_COMMON |
| 117 | }; | 120 | }; |
| 121 | // Fall back to ADC_COMMON if ADC3_COMMON does not exist | ||
| 122 | (adccommon, ADC_COMMON) => { | ||
| 123 | return crate::pac::ADC_COMMON | ||
| 124 | }; | ||
| 118 | } | 125 | } |
| 119 | } | 126 | } |
| 120 | 127 | ||
| @@ -124,11 +131,34 @@ foreach_peripheral!( | |||
| 124 | } | 131 | } |
| 125 | } | 132 | } |
| 126 | 133 | ||
| 127 | #[cfg(not(any(stm32g4x1, stm32g4x2, stm32g4x3, stm32g4x4)))] | ||
| 128 | impl crate::adc::Instance for peripherals::ADC4 {} | 134 | impl crate::adc::Instance for peripherals::ADC4 {} |
| 129 | }; | 135 | }; |
| 130 | (adc, ADC5) => { | 136 | (adc, ADC5) => { |
| 137 | impl crate::adc::sealed::Instance for peripherals::ADC5 { | ||
| 138 | fn regs() -> crate::pac::adc::Adc { | ||
| 139 | crate::pac::ADC5 | ||
| 140 | } | ||
| 141 | #[cfg(not(any(adc_f1, adc_v1)))] | ||
| 142 | #[allow(unreachable_code)] | ||
| 143 | fn common_regs() -> crate::pac::adccommon::AdcCommon { | ||
| 144 | foreach_peripheral!{ | ||
| 145 | (adccommon, ADC3_COMMON) => { | ||
| 146 | return crate::pac::ADC3_COMMON | ||
| 147 | }; | ||
| 148 | // Fall back to ADC_COMMON if ADC3_COMMON does not exist | ||
| 149 | (adccommon, ADC_COMMON) => { | ||
| 150 | return crate::pac::ADC_COMMON | ||
| 151 | }; | ||
| 152 | } | ||
| 153 | } | ||
| 154 | |||
| 155 | #[cfg(adc_f3)] | ||
| 156 | fn frequency() -> crate::time::Hertz { | ||
| 157 | unsafe { crate::rcc::get_freqs() }.adc34.unwrap() | ||
| 158 | } | ||
| 159 | } | ||
| 131 | 160 | ||
| 161 | impl crate::adc::Instance for peripherals::ADC5 {} | ||
| 132 | }; | 162 | }; |
| 133 | (adc, $inst:ident) => { | 163 | (adc, $inst:ident) => { |
| 134 | impl crate::adc::sealed::Instance for peripherals::$inst { | 164 | impl crate::adc::sealed::Instance for peripherals::$inst { |
diff --git a/embassy-stm32/src/adc/v2.rs b/embassy-stm32/src/adc/v2.rs index 9a7acea53..4fbd1cfa2 100644 --- a/embassy-stm32/src/adc/v2.rs +++ b/embassy-stm32/src/adc/v2.rs | |||
| @@ -102,7 +102,7 @@ where | |||
| 102 | let presc = Prescaler::from_pclk2(T::frequency()); | 102 | let presc = Prescaler::from_pclk2(T::frequency()); |
| 103 | T::common_regs().ccr().modify(|w| w.set_adcpre(presc.adcpre())); | 103 | T::common_regs().ccr().modify(|w| w.set_adcpre(presc.adcpre())); |
| 104 | T::regs().cr2().modify(|reg| { | 104 | T::regs().cr2().modify(|reg| { |
| 105 | reg.set_adon(crate::pac::adc::vals::Adon::ENABLED); | 105 | reg.set_adon(true); |
| 106 | }); | 106 | }); |
| 107 | 107 | ||
| 108 | delay.delay_us(ADC_POWERUP_TIME_US); | 108 | delay.delay_us(ADC_POWERUP_TIME_US); |
