Contando pulsos usando SMT32f407VG

0

Quiero contar los pulsos generados por Picoscope, mi frecuencia de señal es (20Hz)

Usé el timer2, el problema es que el contador se incrementa a 1 y vuelve a 0, no entiendo por qué. ya que debe incrementarse cada 50ms.

Desarrolléelcódigoquesemuestraacontinuación:

#include"stm32f4xx.h"
 #include "stm32f4xx_rcc.h"
 #include "stm32f4xx_gpio.h"
 #include "stm32f4xx_tim.h"

 void GPIO_Init_TM(void);

 int variable = 0;

 int main(void)
 {
  GPIO_Init_TM();
  while(1)
  {
    variable = TIM_GetCounter(TIM2);
  }
 }

 void GPIO_Init_TM(void)

 {

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

GPIO_InitTypeDef gpioStructure;
//TIM_TimeBaseInitTypeDef timerInitStructure;

gpioStructure.GPIO_Pin = GPIO_Pin_15 ;
gpioStructure.GPIO_Mode = GPIO_Mode_AF;
gpioStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(GPIOA, &gpioStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_TIM2);

TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising );
TIM_SetAutoreload (TIM2, 0xffff);

TIM_Cmd(TIM2, ENABLE);

}

y este es el resultado que obtengo:

    
pregunta Walid Amehri

1 respuesta

2

Su problema es que configuró su TIM en modo de codificador. Un codificador de cuadratura utiliza dos entradas con señales de pulso de cambio de fase de 90 ° para detectar el conteo ascendente o descendente. Vea la ruta roja en la imagen de abajo.

Entonces borra:

TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising );

Si solo desea un único contador de pulsos de entrada, debe usar el disparador externo (TIMx_ETR) como disparador del temporizador. (camino verde en la foto)

Agrega una inicialización completa del temporizador y algo como:

TIM_SelectInputTrigger(TIM2, TIM_TS_ETRF);
    
respondido por el Batuu

Lea otras preguntas en las etiquetas