Skip to content

Commit 0e763b9

Browse files
committed
HRTIM: Refactor adc trigger - example hrtim-adc-trigger
1 parent b7bacde commit 0e763b9

File tree

1 file changed

+29
-32
lines changed

1 file changed

+29
-32
lines changed

examples/hrtim/adc-trigger.rs

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ fn main() -> ! {
1616
#[cfg(any(feature = "stm32g474", feature = "stm32g484"))]
1717
#[entry]
1818
fn main() -> ! {
19-
use hal::adc::{self, config::ExternalTrigger12};
19+
use hal::adc;
2020
use stm32g4xx_hal as hal;
2121

2222
use defmt::info;
@@ -74,32 +74,6 @@ fn main() -> ! {
7474
let gpioa = dp.GPIOA.split(&mut rcc);
7575
let pa0 = gpioa.pa0.into_analog();
7676

77-
info!("Setup Adc1");
78-
let mut adc = dp
79-
.ADC1
80-
.claim(ClockSource::SystemClock, &rcc, &mut delay, true);
81-
82-
adc.set_external_trigger((
83-
adc::config::TriggerMode::RisingEdge,
84-
ExternalTrigger12::Hrtim_adc_trg_1,
85-
));
86-
adc.enable_temperature(&dp.ADC12_COMMON);
87-
adc.set_continuous(Continuous::Discontinuous);
88-
adc.reset_sequence();
89-
adc.configure_channel(&pa0, Sequence::One, SampleTime::Cycles_640_5);
90-
adc.configure_channel(&Temperature, Sequence::Two, SampleTime::Cycles_640_5);
91-
92-
info!("Setup DMA");
93-
let first_buffer = cortex_m::singleton!(: [u16; 10] = [0; 10]).unwrap();
94-
95-
let mut transfer = dma1ch1.into_circ_peripheral_to_memory_transfer(
96-
adc.enable_dma(AdcDma::Continuous),
97-
&mut first_buffer[..],
98-
config,
99-
);
100-
101-
transfer.start(|adc| adc.start_conversion());
102-
10377
let pin_a: PA8<Alternate<AF13>> = gpioa.pa8.into_alternate();
10478
let pin_b: PA9<Alternate<AF13>> = gpioa.pa9.into_alternate();
10579

@@ -121,23 +95,46 @@ fn main() -> ! {
12195
.pwm_advanced((pin_a, pin_b), &mut rcc)
12296
.prescaler(prescaler)
12397
.period(period)
124-
// alternated every period with one being
125-
// inactive and the other getting to output its wave form
126-
// as normal
12798
.finalize(&mut hr_control);
12899

129100
cr3.set_duty(period / 3);
130101
cr4.set_duty((2 * u32::from(period) / 3) as u16);
131102

132-
hr_control.enable_adc_trigger1_source(&cr3);
133-
hr_control.enable_adc_trigger1_source(&cr4);
103+
hr_control.adc_trigger1.enable_source(&cr3);
104+
hr_control.adc_trigger1.enable_source(&cr4);
134105

135106
out1.enable_rst_event(&cr1); // Set low on compare match with cr1
136107
out2.enable_rst_event(&cr1);
137108

138109
out1.enable_set_event(&timer); // Set high at new period
139110
out2.enable_set_event(&timer);
140111

112+
info!("Setup Adc1");
113+
let mut adc = dp
114+
.ADC1
115+
.claim(ClockSource::SystemClock, &rcc, &mut delay, true);
116+
117+
adc.set_external_trigger((
118+
adc::config::TriggerMode::RisingEdge,
119+
hr_control.adc_trigger1.as_adc12_trigger(),
120+
));
121+
adc.enable_temperature(&dp.ADC12_COMMON);
122+
adc.set_continuous(Continuous::Discontinuous);
123+
adc.reset_sequence();
124+
adc.configure_channel(&pa0, Sequence::One, SampleTime::Cycles_640_5);
125+
adc.configure_channel(&Temperature, Sequence::Two, SampleTime::Cycles_640_5);
126+
127+
info!("Setup DMA");
128+
let first_buffer = cortex_m::singleton!(: [u16; 10] = [0; 10]).unwrap();
129+
130+
let mut transfer = dma1ch1.into_circ_peripheral_to_memory_transfer(
131+
adc.enable_dma(AdcDma::Continuous),
132+
&mut first_buffer[..],
133+
config,
134+
);
135+
136+
transfer.start(|adc| adc.start_conversion());
137+
141138
out1.enable();
142139
out2.enable();
143140

0 commit comments

Comments
 (0)