Ich spiele gerade mit dem ..F411 und habe auf die Schnelle einfach
direkt in die Register geschrieben: Timer2 mit PA0 und PA1 als Eingang.
Vielleicht kannst Du das auf Timer8 umschreiben, den es beim F411 nicht
gibt. Oder Du nimmst T2, um überhaupt eine Funktion zu sehen.
Ohne es zu überprüfen, sollten die Register beim ..F303 doch sehr
ähnlich sein.
void init_t2(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // GPIOA freigeben
GPIOA->MODER |= 0x0a; // AF PA0 und PA1
GPIOA->PUPDR |= 0x05; // pullup PA0 und PA1
GPIOA->AFR[0] |= 0x11; // AF PA0 und PA1 TIM2_CH1/TIM2_CH2
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Timer2 freigeben
TIM2->SMCR |= 0x03; // Encode mode 3
TIM2->CCMR1 |= 0x05; // CH1 + CH2 -> Encoder
TIM2->CR1 |= TIM_CR1_CEN; // T2 starten
}
Das Ergebnis steht in TIM2->CNT.