Skip to content

Commit 6c659b6

Browse files
authored
Merge pull request #4887 from xoviat/adc-g4
adc: fix g4 injected sequence
2 parents 709b157 + a2c5a0d commit 6c659b6

File tree

1 file changed

+15
-8
lines changed
  • embassy-stm32/src/adc

1 file changed

+15
-8
lines changed

embassy-stm32/src/adc/g4.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#[cfg(stm32g4)]
2+
use pac::adc::regs::Difsel as DifselReg;
13
#[allow(unused)]
24
#[cfg(stm32h7)]
35
use pac::adc::vals::{Adcaldif, Difsel, Exten};
@@ -179,6 +181,9 @@ impl<T: Instance> super::SealedAnyInstance for T {
179181
w.set_l(sequence.len() as u8 - 1);
180182
});
181183

184+
#[cfg(stm32g4)]
185+
let mut difsel = DifselReg::default();
186+
182187
// Configure channels and ranks
183188
for (_i, ((ch, is_differential), sample_time)) in sequence.enumerate() {
184189
let sample_time = sample_time.into();
@@ -214,22 +219,25 @@ impl<T: Instance> super::SealedAnyInstance for T {
214219

215220
#[cfg(stm32g4)]
216221
{
217-
T::regs().cr().modify(|w| w.set_aden(false)); // disable adc
218-
219-
T::regs().difsel().modify(|w| {
220-
w.set_difsel(
222+
if ch < 18 {
223+
difsel.set_difsel(
221224
ch.into(),
222225
if is_differential {
223226
Difsel::DIFFERENTIAL
224227
} else {
225228
Difsel::SINGLE_ENDED
226229
},
227230
);
228-
});
229-
230-
T::regs().cr().modify(|w| w.set_aden(true)); // enable adc
231+
}
231232
}
232233
}
234+
235+
#[cfg(stm32g4)]
236+
{
237+
T::regs().cr().modify(|w| w.set_aden(false));
238+
T::regs().difsel().write_value(difsel);
239+
T::enable();
240+
}
233241
}
234242
}
235243

@@ -412,7 +420,6 @@ impl<'d, T: Instance + AnyInstance> Adc<'d, T> {
412420
NR_INJECTED_RANKS
413421
);
414422

415-
T::stop();
416423
T::enable();
417424

418425
T::regs().jsqr().modify(|w| w.set_jl(N as u8 - 1));

0 commit comments

Comments
 (0)