diff options
| -rw-r--r-- | embassy-stm32/src/dac/mod.rs | 146 | ||||
| -rw-r--r-- | embassy-stm32/src/dac/tsel.rs | 282 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/dac_dma.rs | 4 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/dac_dma.rs | 4 |
4 files changed, 313 insertions, 123 deletions
diff --git a/embassy-stm32/src/dac/mod.rs b/embassy-stm32/src/dac/mod.rs index b87d6e490..6d51c1e90 100644 --- a/embassy-stm32/src/dac/mod.rs +++ b/embassy-stm32/src/dac/mod.rs | |||
| @@ -10,6 +10,9 @@ use crate::pac::dac; | |||
| 10 | use crate::rcc::RccPeripheral; | 10 | use crate::rcc::RccPeripheral; |
| 11 | use crate::{peripherals, Peripheral}; | 11 | use crate::{peripherals, Peripheral}; |
| 12 | 12 | ||
| 13 | mod tsel; | ||
| 14 | pub use tsel::TriggerSel; | ||
| 15 | |||
| 13 | #[cfg(any(dac_v3, dac_v4, dac_v5, dac_v6, dac_v7))] | 16 | #[cfg(any(dac_v3, dac_v4, dac_v5, dac_v6, dac_v7))] |
| 14 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | 17 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] |
| 15 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | 18 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] |
| @@ -51,7 +54,6 @@ impl Mode { | |||
| 51 | } | 54 | } |
| 52 | } | 55 | } |
| 53 | 56 | ||
| 54 | |||
| 55 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | 57 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] |
| 56 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | 58 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] |
| 57 | /// Custom Errors | 59 | /// Custom Errors |
| @@ -79,100 +81,6 @@ impl Channel { | |||
| 79 | 81 | ||
| 80 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | 82 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] |
| 81 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | 83 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] |
| 82 | /// Trigger sources for CH1 | ||
| 83 | pub enum Ch1Trigger { | ||
| 84 | #[cfg(dac_v3)] | ||
| 85 | Tim1, | ||
| 86 | Tim2, | ||
| 87 | #[cfg(not(dac_v3))] | ||
| 88 | Tim3, | ||
| 89 | #[cfg(dac_v3)] | ||
| 90 | Tim4, | ||
| 91 | #[cfg(dac_v3)] | ||
| 92 | Tim5, | ||
| 93 | Tim6, | ||
| 94 | Tim7, | ||
| 95 | #[cfg(dac_v3)] | ||
| 96 | Tim8, | ||
| 97 | Tim15, | ||
| 98 | #[cfg(dac_v3)] | ||
| 99 | Hrtim1Dactrg1, | ||
| 100 | #[cfg(dac_v3)] | ||
| 101 | Hrtim1Dactrg2, | ||
| 102 | #[cfg(dac_v3)] | ||
| 103 | Lptim1, | ||
| 104 | #[cfg(dac_v3)] | ||
| 105 | Lptim2, | ||
| 106 | #[cfg(dac_v3)] | ||
| 107 | Lptim3, | ||
| 108 | Exti9, | ||
| 109 | Software, | ||
| 110 | } | ||
| 111 | |||
| 112 | impl Ch1Trigger { | ||
| 113 | fn tsel(&self) -> dac::vals::Tsel1 { | ||
| 114 | match self { | ||
| 115 | #[cfg(dac_v3)] | ||
| 116 | Ch1Trigger::Tim1 => dac::vals::Tsel1::TIM1_TRGO, | ||
| 117 | Ch1Trigger::Tim2 => dac::vals::Tsel1::TIM2_TRGO, | ||
| 118 | #[cfg(not(dac_v3))] | ||
| 119 | Ch1Trigger::Tim3 => dac::vals::Tsel1::TIM3_TRGO, | ||
| 120 | #[cfg(dac_v3)] | ||
| 121 | Ch1Trigger::Tim4 => dac::vals::Tsel1::TIM4_TRGO, | ||
| 122 | #[cfg(dac_v3)] | ||
| 123 | Ch1Trigger::Tim5 => dac::vals::Tsel1::TIM5_TRGO, | ||
| 124 | Ch1Trigger::Tim6 => dac::vals::Tsel1::TIM6_TRGO, | ||
| 125 | Ch1Trigger::Tim7 => dac::vals::Tsel1::TIM7_TRGO, | ||
| 126 | #[cfg(dac_v3)] | ||
| 127 | Ch1Trigger::Tim8 => dac::vals::Tsel1::TIM8_TRGO, | ||
| 128 | Ch1Trigger::Tim15 => dac::vals::Tsel1::TIM15_TRGO, | ||
| 129 | #[cfg(dac_v3)] | ||
| 130 | Ch1Trigger::Hrtim1Dactrg1 => dac::vals::Tsel1::HRTIM1_DACTRG1, | ||
| 131 | #[cfg(dac_v3)] | ||
| 132 | Ch1Trigger::Hrtim1Dactrg2 => dac::vals::Tsel1::HRTIM1_DACTRG2, | ||
| 133 | #[cfg(dac_v3)] | ||
| 134 | Ch1Trigger::Lptim1 => dac::vals::Tsel1::LPTIM1_OUT, | ||
| 135 | #[cfg(dac_v3)] | ||
| 136 | Ch1Trigger::Lptim2 => dac::vals::Tsel1::LPTIM2_OUT, | ||
| 137 | #[cfg(dac_v3)] | ||
| 138 | Ch1Trigger::Lptim3 => dac::vals::Tsel1::LPTIM3_OUT, | ||
| 139 | Ch1Trigger::Exti9 => dac::vals::Tsel1::EXTI9, | ||
| 140 | Ch1Trigger::Software => dac::vals::Tsel1::SOFTWARE, | ||
| 141 | } | ||
| 142 | } | ||
| 143 | } | ||
| 144 | |||
| 145 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 146 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 147 | /// Trigger sources for CH2 | ||
| 148 | pub enum Ch2Trigger { | ||
| 149 | Tim6, | ||
| 150 | Tim8, | ||
| 151 | Tim7, | ||
| 152 | Tim5, | ||
| 153 | Tim2, | ||
| 154 | Tim4, | ||
| 155 | Exti9, | ||
| 156 | Software, | ||
| 157 | } | ||
| 158 | |||
| 159 | impl Ch2Trigger { | ||
| 160 | fn tsel(&self) -> dac::vals::Tsel2 { | ||
| 161 | match self { | ||
| 162 | Ch2Trigger::Tim6 => dac::vals::Tsel2::TIM6_TRGO, | ||
| 163 | Ch2Trigger::Tim8 => dac::vals::Tsel2::TIM8_TRGO, | ||
| 164 | Ch2Trigger::Tim7 => dac::vals::Tsel2::TIM7_TRGO, | ||
| 165 | Ch2Trigger::Tim5 => dac::vals::Tsel2::TIM5_TRGO, | ||
| 166 | Ch2Trigger::Tim2 => dac::vals::Tsel2::TIM2_TRGO, | ||
| 167 | Ch2Trigger::Tim4 => dac::vals::Tsel2::TIM4_TRGO, | ||
| 168 | Ch2Trigger::Exti9 => dac::vals::Tsel2::EXTI9, | ||
| 169 | Ch2Trigger::Software => dac::vals::Tsel2::SOFTWARE, | ||
| 170 | } | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 174 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 175 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 176 | /// Single 8 or 12 bit value that can be output by the DAC | 84 | /// Single 8 or 12 bit value that can be output by the DAC |
| 177 | pub enum Value { | 85 | pub enum Value { |
| 178 | // 8 bit value | 86 | // 8 bit value |
| @@ -315,10 +223,10 @@ impl<'d, T: Instance, Tx> DacCh1<'d, T, Tx> { | |||
| 315 | /// Select a new trigger for this channel | 223 | /// Select a new trigger for this channel |
| 316 | /// | 224 | /// |
| 317 | /// **Important**: This disables the channel! | 225 | /// **Important**: This disables the channel! |
| 318 | pub fn select_trigger(&mut self, trigger: Ch1Trigger) -> Result<(), Error> { | 226 | pub fn select_trigger(&mut self, trigger: TriggerSel) -> Result<(), Error> { |
| 319 | unwrap!(self.disable_channel()); | 227 | unwrap!(self.disable_channel()); |
| 320 | T::regs().cr().modify(|reg| { | 228 | T::regs().cr().modify(|reg| { |
| 321 | reg.set_tsel1(trigger.tsel()); | 229 | reg.set_tsel(0, trigger.tsel()); |
| 322 | }); | 230 | }); |
| 323 | Ok(()) | 231 | Ok(()) |
| 324 | } | 232 | } |
| @@ -426,10 +334,10 @@ impl<'d, T: Instance, Tx> DacCh2<'d, T, Tx> { | |||
| 426 | } | 334 | } |
| 427 | 335 | ||
| 428 | /// Select a new trigger for this channel | 336 | /// Select a new trigger for this channel |
| 429 | pub fn select_trigger(&mut self, trigger: Ch2Trigger) -> Result<(), Error> { | 337 | pub fn select_trigger(&mut self, trigger: TriggerSel) -> Result<(), Error> { |
| 430 | unwrap!(self.disable_channel()); | 338 | unwrap!(self.disable_channel()); |
| 431 | T::regs().cr().modify(|reg| { | 339 | T::regs().cr().modify(|reg| { |
| 432 | reg.set_tsel2(trigger.tsel()); | 340 | reg.set_tsel(1, trigger.tsel()); |
| 433 | }); | 341 | }); |
| 434 | Ok(()) | 342 | Ok(()) |
| 435 | } | 343 | } |
| @@ -603,26 +511,26 @@ pub trait DacPin<T: Instance, const C: u8>: crate::gpio::Pin + 'static {} | |||
| 603 | 511 | ||
| 604 | foreach_peripheral!( | 512 | foreach_peripheral!( |
| 605 | (dac, $inst:ident) => { | 513 | (dac, $inst:ident) => { |
| 606 | // H7 uses single bit for both DAC1 and DAC2, this is a hack until a proper fix is implemented | 514 | // H7 uses single bit for both DAC1 and DAC2, this is a hack until a proper fix is implemented |
| 607 | #[cfg(any(rcc_h7, rcc_h7rm0433))] | 515 | #[cfg(any(rcc_h7, rcc_h7rm0433))] |
| 608 | impl crate::rcc::sealed::RccPeripheral for peripherals::$inst { | 516 | impl crate::rcc::sealed::RccPeripheral for peripherals::$inst { |
| 609 | fn frequency() -> crate::time::Hertz { | 517 | fn frequency() -> crate::time::Hertz { |
| 610 | critical_section::with(|_| unsafe { crate::rcc::get_freqs().pclk1 }) | 518 | critical_section::with(|_| unsafe { crate::rcc::get_freqs().pclk1 }) |
| 611 | } | 519 | } |
| 612 | 520 | ||
| 613 | fn enable_and_reset_with_cs(_cs: critical_section::CriticalSection) { | 521 | fn enable_and_reset_with_cs(_cs: critical_section::CriticalSection) { |
| 614 | crate::pac::RCC.apb1lrstr().modify(|w| w.set_dac12rst(true)); | 522 | crate::pac::RCC.apb1lrstr().modify(|w| w.set_dac12rst(true)); |
| 615 | crate::pac::RCC.apb1lrstr().modify(|w| w.set_dac12rst(false)); | 523 | crate::pac::RCC.apb1lrstr().modify(|w| w.set_dac12rst(false)); |
| 616 | crate::pac::RCC.apb1lenr().modify(|w| w.set_dac12en(true)); | 524 | crate::pac::RCC.apb1lenr().modify(|w| w.set_dac12en(true)); |
| 617 | } | 525 | } |
| 618 | 526 | ||
| 619 | fn disable_with_cs(_cs: critical_section::CriticalSection) { | 527 | fn disable_with_cs(_cs: critical_section::CriticalSection) { |
| 620 | crate::pac::RCC.apb1lenr().modify(|w| w.set_dac12en(false)) | 528 | crate::pac::RCC.apb1lenr().modify(|w| w.set_dac12en(false)) |
| 621 | } | 529 | } |
| 622 | } | 530 | } |
| 623 | 531 | ||
| 624 | #[cfg(any(rcc_h7, rcc_h7rm0433))] | 532 | #[cfg(any(rcc_h7, rcc_h7rm0433))] |
| 625 | impl crate::rcc::RccPeripheral for peripherals::$inst {} | 533 | impl crate::rcc::RccPeripheral for peripherals::$inst {} |
| 626 | 534 | ||
| 627 | impl crate::dac::sealed::Instance for peripherals::$inst { | 535 | impl crate::dac::sealed::Instance for peripherals::$inst { |
| 628 | fn regs() -> &'static crate::pac::dac::Dac { | 536 | fn regs() -> &'static crate::pac::dac::Dac { |
diff --git a/embassy-stm32/src/dac/tsel.rs b/embassy-stm32/src/dac/tsel.rs new file mode 100644 index 000000000..f38dd8fd7 --- /dev/null +++ b/embassy-stm32/src/dac/tsel.rs | |||
| @@ -0,0 +1,282 @@ | |||
| 1 | /// Trigger selection for STM32F0. | ||
| 2 | #[cfg(stm32f0)] | ||
| 3 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 4 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 5 | pub enum TriggerSel { | ||
| 6 | Tim6 = 0, | ||
| 7 | Tim3 = 1, | ||
| 8 | Tim7 = 2, | ||
| 9 | Tim15 = 3, | ||
| 10 | Tim2 = 4, | ||
| 11 | Exti9 = 6, | ||
| 12 | Software = 7, | ||
| 13 | } | ||
| 14 | |||
| 15 | /// Trigger selection for STM32F1. | ||
| 16 | #[cfg(stm32f1)] | ||
| 17 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 18 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 19 | pub enum TriggerSel { | ||
| 20 | Tim6 = 0, | ||
| 21 | #[cfg(any(stm32f100, stm32f105, stm32f107))] | ||
| 22 | Tim3 = 1, | ||
| 23 | #[cfg(any(stm32f101, stm32f103))] | ||
| 24 | Tim8 = 1, | ||
| 25 | Tim7 = 2, | ||
| 26 | #[cfg(any(stm32f101, stm32f103, stm32f105, stm32f107))] | ||
| 27 | Tim5 = 3, | ||
| 28 | #[cfg(all(stm32f100, any(flashsize_4, flashsize_6, flashsize_8, flashsize_b)))] | ||
| 29 | Tim15 = 3, | ||
| 30 | #[cfg(all(stm32f100, any(flashsize_c, flashsize_d, flashsize_e)))] | ||
| 31 | /// Can be remapped to TIM15 with MISC_REMAP in AFIO_MAPR2. | ||
| 32 | Tim5Or15 = 3, | ||
| 33 | Tim2 = 4, | ||
| 34 | Tim4 = 5, | ||
| 35 | Exti9 = 6, | ||
| 36 | Software = 7, | ||
| 37 | } | ||
| 38 | |||
| 39 | /// Trigger selection for STM32F2/F4/F7/L4, except F410 or L4+. | ||
| 40 | #[cfg(all(any(stm32f2, stm32f4, stm32f7, stm32l4_nonplus), not(stm32f410)))] | ||
| 41 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 42 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 43 | pub enum TriggerSel { | ||
| 44 | Tim6 = 0, | ||
| 45 | Tim8 = 1, | ||
| 46 | #[cfg(not(any(stm32l45x, stm32l46x)))] | ||
| 47 | Tim7 = 2, | ||
| 48 | Tim5 = 3, | ||
| 49 | Tim2 = 4, | ||
| 50 | Tim4 = 5, | ||
| 51 | Exti9 = 6, | ||
| 52 | Software = 7, | ||
| 53 | } | ||
| 54 | |||
| 55 | /// Trigger selection for STM32F410. | ||
| 56 | #[cfg(stm32f410)] | ||
| 57 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 58 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 59 | pub enum TriggerSel { | ||
| 60 | Tim5 = 3, | ||
| 61 | Exti9 = 6, | ||
| 62 | Software = 7, | ||
| 63 | } | ||
| 64 | |||
| 65 | /// Trigger selection for STM32F301/2 and 318. | ||
| 66 | #[cfg(any(stm32f301, stm32f302, stm32f318))] | ||
| 67 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 68 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 69 | pub enum TriggerSel { | ||
| 70 | Tim6 = 0, | ||
| 71 | #[cfg(stm32f302)] | ||
| 72 | /// Requires DAC_TRIG_RMP set in SYSCFG_CFGR1. | ||
| 73 | Tim3 = 1, | ||
| 74 | Tim15 = 3, | ||
| 75 | Tim2 = 4, | ||
| 76 | #[cfg(all(stm32f302, any(flashsize_6, flashsize_8)))] | ||
| 77 | Tim4 = 5, | ||
| 78 | Exti9 = 6, | ||
| 79 | Software = 7, | ||
| 80 | } | ||
| 81 | |||
| 82 | /// Trigger selection for STM32F303/3x8 (excluding 318 which is like 301, and 378 which is 37x). | ||
| 83 | #[cfg(any(stm32f303, stm32f328, stm32f358, stm32f398))] | ||
| 84 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 85 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 86 | pub enum TriggerSel { | ||
| 87 | Tim6 = 0, | ||
| 88 | /// * DAC1: defaults to TIM8 but can be remapped to TIM3 with DAC_TRIG_RMP in SYSCFG_CFGR1 | ||
| 89 | /// * DAC2: always TIM3 | ||
| 90 | Tim8Or3 = 1, | ||
| 91 | Tim7 = 2, | ||
| 92 | Tim15 = 3, | ||
| 93 | Tim2 = 4, | ||
| 94 | Tim4 = 5, | ||
| 95 | Exti9 = 6, | ||
| 96 | Software = 7, | ||
| 97 | } | ||
| 98 | |||
| 99 | /// Trigger selection for STM32F37x. | ||
| 100 | #[cfg(any(stm32f373, stm32f378))] | ||
| 101 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 102 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 103 | pub enum TriggerSel { | ||
| 104 | Tim6 = 0, | ||
| 105 | Tim3 = 1, | ||
| 106 | Tim7 = 2, | ||
| 107 | /// TIM5 on DAC1, TIM18 on DAC2 | ||
| 108 | Dac1Tim5Dac2Tim18 = 3, | ||
| 109 | Tim2 = 4, | ||
| 110 | Tim4 = 5, | ||
| 111 | Exti9 = 6, | ||
| 112 | Software = 7, | ||
| 113 | } | ||
| 114 | |||
| 115 | /// Trigger selection for STM32F334. | ||
| 116 | #[cfg(stm32f334)] | ||
| 117 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 118 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 119 | pub enum TriggerSel { | ||
| 120 | Tim6 = 0, | ||
| 121 | /// Requires DAC_TRIG_RMP set in SYSCFG_CFGR1. | ||
| 122 | Tim3 = 1, | ||
| 123 | Tim7 = 2, | ||
| 124 | /// Can be remapped to HRTIM_DACTRG1 using DAC1_TRIG3_RMP in SYSCFG_CFGR3. | ||
| 125 | Tim15OrHrtimDacTrg1 = 3, | ||
| 126 | Tim2 = 4, | ||
| 127 | /// Requires DAC_TRIG5_RMP set in SYSCFG_CFGR3. | ||
| 128 | HrtimDacTrg2 = 5, | ||
| 129 | } | ||
| 130 | |||
| 131 | /// Trigger selection for STM32L0. | ||
| 132 | #[cfg(stm32l0)] | ||
| 133 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 134 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 135 | pub enum TriggerSel { | ||
| 136 | Tim6 = 0, | ||
| 137 | Tim3 = 1, | ||
| 138 | Tim3Ch3 = 2, | ||
| 139 | Tim21 = 3, | ||
| 140 | Tim2 = 4, | ||
| 141 | Tim7 = 5, | ||
| 142 | Exti9 = 6, | ||
| 143 | Software = 7, | ||
| 144 | } | ||
| 145 | |||
| 146 | /// Trigger selection for STM32L1. | ||
| 147 | #[cfg(stm32l1)] | ||
| 148 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 149 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 150 | pub enum TriggerSel { | ||
| 151 | Tim6 = 0, | ||
| 152 | Tim7 = 2, | ||
| 153 | Tim9 = 3, | ||
| 154 | Tim2 = 4, | ||
| 155 | Tim4 = 5, | ||
| 156 | Exti9 = 6, | ||
| 157 | Software = 7, | ||
| 158 | } | ||
| 159 | |||
| 160 | /// Trigger selection for L4+, L5, U5, H7. | ||
| 161 | #[cfg(any(stm32l4_plus, stm32l5, stm32u5, stm32h7))] | ||
| 162 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 163 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 164 | pub enum TriggerSel { | ||
| 165 | Software = 0, | ||
| 166 | Tim1 = 1, | ||
| 167 | Tim2 = 2, | ||
| 168 | Tim4 = 3, | ||
| 169 | Tim5 = 4, | ||
| 170 | Tim6 = 5, | ||
| 171 | Tim7 = 6, | ||
| 172 | Tim8 = 7, | ||
| 173 | Tim15 = 8, | ||
| 174 | #[cfg(all(stm32h7, hrtim))] | ||
| 175 | Hrtim1DacTrg1 = 9, | ||
| 176 | #[cfg(all(stm32h7, hrtim))] | ||
| 177 | Hrtim1DacTrg2 = 10, | ||
| 178 | Lptim1 = 11, | ||
| 179 | #[cfg(not(stm32u5))] | ||
| 180 | Lptim2 = 12, | ||
| 181 | #[cfg(stm32u5)] | ||
| 182 | Lptim3 = 12, | ||
| 183 | Exti9 = 13, | ||
| 184 | #[cfg(any(stm32h7ax, stm32h7bx))] | ||
| 185 | /// RM0455 suggests this might be LPTIM2 on DAC1 and LPTIM3 on DAC2, | ||
| 186 | /// but it's probably wrong. Please let us know if you find out. | ||
| 187 | Lptim3 = 14, | ||
| 188 | #[cfg(any(stm32h72x, stm32h73x))] | ||
| 189 | Tim23 = 14, | ||
| 190 | #[cfg(any(stm32h72x, stm32h73x))] | ||
| 191 | Tim24 = 15, | ||
| 192 | } | ||
| 193 | |||
| 194 | /// Trigger selection for H5. | ||
| 195 | #[cfg(stm32h5)] | ||
| 196 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 197 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 198 | pub enum TriggerSel { | ||
| 199 | Software = 0, | ||
| 200 | Tim1 = 1, | ||
| 201 | Tim2 = 2, | ||
| 202 | #[cfg(any(stm32h56x, stm32h57x))] | ||
| 203 | Tim4 = 3, | ||
| 204 | #[cfg(stm32h503)] | ||
| 205 | Tim3 = 3, | ||
| 206 | #[cfg(any(stm32h56x, stm32h57x))] | ||
| 207 | Tim5 = 4, | ||
| 208 | Tim6 = 5, | ||
| 209 | Tim7 = 6, | ||
| 210 | #[cfg(any(stm32h56x, stm32h57x))] | ||
| 211 | Tim8 = 7, | ||
| 212 | #[cfg(any(stm32h56x, stm32h57x))] | ||
| 213 | Tim15 = 8, | ||
| 214 | Lptim1 = 11, | ||
| 215 | Lptim2 = 12, | ||
| 216 | Exti9 = 13, | ||
| 217 | } | ||
| 218 | |||
| 219 | /// Trigger selection for G0. | ||
| 220 | #[cfg(stm32g0)] | ||
| 221 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 222 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 223 | pub enum TriggerSel { | ||
| 224 | Software = 0, | ||
| 225 | Tim1 = 1, | ||
| 226 | Tim2 = 2, | ||
| 227 | Tim3 = 3, | ||
| 228 | Tim6 = 5, | ||
| 229 | Tim7 = 6, | ||
| 230 | Tim15 = 8, | ||
| 231 | Lptim1 = 11, | ||
| 232 | Lptim2 = 12, | ||
| 233 | Exti9 = 13, | ||
| 234 | } | ||
| 235 | |||
| 236 | /// Trigger selection for G4. | ||
| 237 | #[cfg(stm32g4)] | ||
| 238 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 239 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 240 | pub enum TriggerSel { | ||
| 241 | Software = 0, | ||
| 242 | /// * DAC1, DAC2, DAC4: TIM8 | ||
| 243 | /// * DAC3: TIM1 | ||
| 244 | Dac124Tim8Dac3Tim1 = 1, | ||
| 245 | Tim7 = 2, | ||
| 246 | Tim15 = 3, | ||
| 247 | Tim2 = 4, | ||
| 248 | Tim4 = 5, | ||
| 249 | Exti9 = 6, | ||
| 250 | Tim6 = 7, | ||
| 251 | Tim3 = 8, | ||
| 252 | HrtimDacRstTrg1 = 9, | ||
| 253 | HrtimDacRstTrg2 = 10, | ||
| 254 | HrtimDacRstTrg3 = 11, | ||
| 255 | HrtimDacRstTrg4 = 12, | ||
| 256 | HrtimDacRstTrg5 = 13, | ||
| 257 | HrtimDacRstTrg6 = 14, | ||
| 258 | /// * DAC1, DAC4: HRTIM_DAC_TRG1 | ||
| 259 | /// * DAC2: HRTIM_DAC_TRG2 | ||
| 260 | /// * DAC3: HRTIM_DAC_TRG3 | ||
| 261 | HrtimDacTrg123 = 15, | ||
| 262 | } | ||
| 263 | |||
| 264 | /// Trigger selection for WL. | ||
| 265 | #[cfg(stm32wl)] | ||
| 266 | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||
| 267 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | ||
| 268 | pub enum TriggerSel { | ||
| 269 | Software = 0, | ||
| 270 | Tim1 = 1, | ||
| 271 | Tim2 = 2, | ||
| 272 | Lptim1 = 11, | ||
| 273 | Lptim2 = 12, | ||
| 274 | Lptim3 = 13, | ||
| 275 | Exti9 = 14, | ||
| 276 | } | ||
| 277 | |||
| 278 | impl TriggerSel { | ||
| 279 | pub fn tsel(&self) -> u8 { | ||
| 280 | *self as u8 | ||
| 281 | } | ||
| 282 | } | ||
diff --git a/examples/stm32h7/src/bin/dac_dma.rs b/examples/stm32h7/src/bin/dac_dma.rs index e141fc484..12783464a 100644 --- a/examples/stm32h7/src/bin/dac_dma.rs +++ b/examples/stm32h7/src/bin/dac_dma.rs | |||
| @@ -77,7 +77,7 @@ async fn dac_task1(mut dac: Dac1Type) { | |||
| 77 | error!("Reload value {} below threshold!", reload); | 77 | error!("Reload value {} below threshold!", reload); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | dac.select_trigger(embassy_stm32::dac::Ch1Trigger::Tim6).unwrap(); | 80 | dac.select_trigger(embassy_stm32::dac::TriggerSel::Tim6).unwrap(); |
| 81 | dac.enable_channel().unwrap(); | 81 | dac.enable_channel().unwrap(); |
| 82 | 82 | ||
| 83 | TIM6::enable_and_reset(); | 83 | TIM6::enable_and_reset(); |
| @@ -127,7 +127,7 @@ async fn dac_task2(mut dac: Dac2Type) { | |||
| 127 | w.set_cen(true); | 127 | w.set_cen(true); |
| 128 | }); | 128 | }); |
| 129 | 129 | ||
| 130 | dac.select_trigger(embassy_stm32::dac::Ch2Trigger::Tim7).unwrap(); | 130 | dac.select_trigger(embassy_stm32::dac::TriggerSel::Tim7).unwrap(); |
| 131 | 131 | ||
| 132 | debug!( | 132 | debug!( |
| 133 | "TIM7 Frequency {}, Target Frequency {}, Reload {}, Reload as u16 {}, Samples {}", | 133 | "TIM7 Frequency {}, Target Frequency {}, Reload {}, Reload as u16 {}, Samples {}", |
diff --git a/examples/stm32l4/src/bin/dac_dma.rs b/examples/stm32l4/src/bin/dac_dma.rs index 98f37f906..c9f0a4cfe 100644 --- a/examples/stm32l4/src/bin/dac_dma.rs +++ b/examples/stm32l4/src/bin/dac_dma.rs | |||
| @@ -48,7 +48,7 @@ async fn dac_task1(mut dac: Dac1Type) { | |||
| 48 | error!("Reload value {} below threshold!", reload); | 48 | error!("Reload value {} below threshold!", reload); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | dac.select_trigger(embassy_stm32::dac::Ch1Trigger::Tim6).unwrap(); | 51 | dac.select_trigger(embassy_stm32::dac::TriggerSel::Tim6).unwrap(); |
| 52 | dac.enable_channel().unwrap(); | 52 | dac.enable_channel().unwrap(); |
| 53 | 53 | ||
| 54 | TIM6::enable_and_reset(); | 54 | TIM6::enable_and_reset(); |
| @@ -98,7 +98,7 @@ async fn dac_task2(mut dac: Dac2Type) { | |||
| 98 | w.set_cen(true); | 98 | w.set_cen(true); |
| 99 | }); | 99 | }); |
| 100 | 100 | ||
| 101 | dac.select_trigger(embassy_stm32::dac::Ch2Trigger::Tim7).unwrap(); | 101 | dac.select_trigger(embassy_stm32::dac::TriggerSel::Tim7).unwrap(); |
| 102 | 102 | ||
| 103 | debug!( | 103 | debug!( |
| 104 | "TIM7 Frequency {}, Target Frequency {}, Reload {}, Reload as u16 {}, Samples {}", | 104 | "TIM7 Frequency {}, Target Frequency {}, Reload {}, Reload as u16 {}, Samples {}", |
