Zadałem pytanie na SO, Githubie oraz forum Rust, ale póki co nie dostałem pełnej odpowiedzi.
W każdym razie mój problem polega na tym, że mam Nucleo z STM32G071 i używam przerwania TIM3. W momencie wywołania wygląda jakby flaga przerwania nie było kasowana po wykonaniu przerwania i przerwanie non-stop się wywoływało ponownie.
Próbowałem także kasować za pomocą:
NVIC::unpend(Interrupt::TIM2);
Załączam link do wątku na Githubie oraz moją aktualną obsługę przerwania.
#[interrupt]
fn TIM2() {
free(|cs| {
if let Some(ref mut tim2) = G_TIM.borrow(cs).borrow_mut().deref_mut() {
tim2.sr.write(|w| w.uif().clear_bit());
}
});
}
}
EDIT:
Zmieniłem na TIM2. Nie jestem w stanie złapać debuggerem tim2.sr.write(|w| w.uif().clear_bit());
Zastanawiam się czy ten Mutex poprawnie jest obsłużony...
Rust taki fajny... :|