Skocz do zawartości

[STM32] Timer w trybie Capture


Pomocna odpowiedź

Napisano

Witam

Chcę wykorzystać timer2 do zliczania czasu. W momencie pojawienia się impulsu na wejściu TIM1_CH1 (PA0) wartość TIM2->CNT ma być zatrzaśnięta w w rejestrze CCR1

int main(void)
{

RCC->APB1ENR1 |= RCC_APB1ENR1_TIM2EN; //włączenie zegara dla tim2
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; //włączenie zegara dla GPIOA
GPIOA->AFR[0] |= GPIO_AFRL_AFSEL0_0; // wybór funkcji alternatywnej 1 dla pa0
GPIOA->MODER |= GPIO_MODER_MODE0_1; // pa0 funkcja alternatywna PP
GPIOA->PUPDR |= GPIO_PUPDR_PUPD0_0; // ustawienie PU

TIM2->CCMR1 = TIM_CCMR1_CC1S_0; // podpięcie TI1
TIM2->CCER = TIM_CCER_CC1E; // włączenie przechwytywania
TIM2->DIER |= TIM_DIER_CC1IE; // włączenie przerwania od przechwycenia
TIM2->ARR = UINT16_MAX; // zliczaj do ilu się da :)
TIM2->CR1 = TIM_CR1_CEN; // włączenie timera
NVIC_EnableIRQ(TIM2_IRQn); // włączenie przerwań dla timera
for(;;);
}

void TIM2_IRQHandler(void) { //przerwanie od tim2
if(TIM2->SR & TIM_SR_CC1IF) { // jeżeli zostało przechwycone zbocze
	i = TIM2->CCR1; // zapisz wartość do zatrzaśniętą do i
}
}

Licznik liczy, ale nic nie przechwytuje. Próbowałem też z opcją zliczania impulsów z zewnątrz i też nie zlicza.

Wejście PA0 jest podłączone do transoptora szczelinowego. Gdy PA0 skonfiguruje jako wejście z PU mogę zliczać impulsy programowo.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...