Skocz do zawartości

[C] [STM32F303] TIM1 zliczanie impulsów


Pomocna odpowiedź

Napisano

Witam

Chcę zliczać impulsy z zewnątrz (zasymulować zliczanie z zewnątrz). Licz do 10 zmień stan na wejściu diody itd. Wejście licznikowe ma zmieniać stan przerwaniu systick (zmieniam podciągniecie w PUPR i próbowałem tez przez ODR). Niestety TIM1_CNT nie zmienia wartości. W czym może być problem?

/* Includes */
#include "stm32f3xx.h"
#include "core_cm4.h"

/* Private macro */
/* Private variables */
/* Private function prototypes */
/* Private functions */


int main(void)
{


RCC->AHBENR = RCC_AHBENR_GPIOEEN | RCC_AHBENR_GPIOAEN; //Włączenie portu A i E

RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // Włączenie TIM1

GPIOE->MODER = GPIO_MODER_MODER12_0;  // PE12 wyjście
GPIOE->ODR |= GPIO_ODR_12; // włącz diodę

GPIOA->AFR[1] = 6; // ustawienie funkcji alternatywnej dla PA8 (AF6, TIM1_CH1)
GPIOA->PUPDR = GPIO_PUPDR_PUPDR8_1; 
GPIOA->MODER |= GPIO_MODER_MODER8_1;  // Ustaienie PA8 na ALTERNATIVE + PP + PD

TIM1->CCMR1 = TIM_CCMR1_CC1S_0; // wejście podłączone do synału TI1
TIM1->SMCR = TIM_SMCR_SMS_2 |TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0 | TIM_SMCR_TS_2 | TIM_SMCR_TS_0; // Wybór Clock sorce mode 1, wybór synału TI1FP1


TIM1->ARR = 10; //licz do 10
TIM1->DIER = TIM_DIER_UIE;
TIM1->CR1 = TIM_CR1_CEN;


NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn); // włączenie przerwań od TIM1

SysTick_Config(8000000 * 0.5); // generuj przerwanie co 0,5s
while (1)
 {

 }

 return 0;
}

void TIM1_UP_TIM16_IRQHandler(void) {
TIM1->SR =~TIM_SR_UIF; // kasuj flagę przerwania
GPIOE->ODR ^= GPIO_ODR_12; //  wł/wył diodę
}

void SysTick_Handler(void) {
//GPIOE->ODR ^= GPIO_ODR_12; //test
GPIOA->PUPDR ^= (GPIO_PUPDR_PUPDR8_1 | GPIO_PUPDR_PUPDR8_1); // zmiana podciągnięć
}

------------------------

Zamiast zmieniać programowo stany na PA8 podłączyłem 1 kanał enkodera i wszystko działa.

PS.

Czy jeżeli mam ustawione PA8 jako alternatywne wejście PP to mogę zmieniać jego stan PU/PD aby symulować zliczanie impulsów zewnętrznych?

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...