temporizador STM32F4 sin contar con reloj externo

0

Probablemente me esté perdiendo algo obvio, pero simplemente no puedo verlo. El problema: estoy intentando obtener un contador en el STM32F407VG en el tablero de descubrimiento STM32F4 para contar usando un reloj de un pin externo, usando el modo de reloj externo 1 (obteniendo el reloj de la entrada CH1 del temporizador).

He intentado leer el manual de referencia, siguiendo las instrucciones en la nota de aplicaciones del "libro de cocina del temporizador" y usando las rutinas de la biblioteca de la biblioteca stm32f4xx_tim.c, pero hasta ahora todo da el mismo resultado: el contador permanece resueltamente en cero. Puedo ver que viene un reloj en el pin del puerto GPIO ya que en el modo de depuración el registro de datos de entrada del puerto GPIO cambia constantemente. Pero el contador no se mueve.

Este es (una versión de) el código completo que he estado intentando:

// All attempts will require to enable the clocks and set the input bit:
// Enable the clock to GPIOB:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
// Set GPIOB pin to an input, and AF for pin 4 to AF2:
GPIOB->MODER &= ~GPIO_MODER_MODE4_Msk;
GPIOB->AFR[0] &= 0xFFF0FFFF;
GPIOB->AFR[0] |= 2 << 16;
// Enable clock to timer three:
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;

// Another attempt to get timer three clocked by TIM3_CH1 on PB4 (J5 pin 3)
// This one is based on the instructions in the application note "cookbook".
// Set CCxE to '0' to enable access to CCxS, then set CCxS to '01', then re-enable CH1 input:
TIM3->CCER &= ~TIM_CCER_CC1E;
TIM3->CCMR1 &= ~TIM_CCMR1_CC1S_Msk;
TIM3->CCMR1 |= 1 << TIM_CCMR1_CC1S_Pos;
TIM3->CCER |= TIM_CCER_CC1E;
// Configure for detecting rising edges only:
TIM3->CCER &= ~TIM_CCER_CC1P_Msk;
TIM3->CCER &= ~TIM_CCER_CC1NP_Msk;
// Write '101' to TS field in SMCR to select the clock source:
TIM3->SMCR &= ~TIM_SMCR_TS_Msk;
TIM3->SMCR |= 5 << TIM_SMCR_TS_Pos;
// Activate the external clock mode:
TIM3->SMCR &= ~TIM_SMCR_SMS_Msk;
TIM3->SMCR |= 7 << TIM_SMCR_SMS_Pos;
// Enable the counter:
TIM3->CR1 |= TIM_CR1_CEN;

Mi mejor conjetura es que me he perdido alguna etapa de configuración requerida. Si alguien puede hacerme saber lo que he echado de menos, estaría muy agradecido. Gracias de antemano.

(TIM3_CH1 también está disponible en PA6 y PC6. No sé qué significa cuando se asigna una entrada a tres puertos de entrada diferentes, pero los he intentado con el mismo resultado).

    
pregunta dajp

0 respuestas

Lea otras preguntas en las etiquetas