Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.

We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.

Thank you for your understanding.


This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

pwm input mode low frequncy

hi

i work with stm32f107

pleas answer me

how i can measure frequency in 50 hz with input pwm

i read about it and find out i can measure frequency with input pwm up to 1100
but input pwm have TIM_ICPrescaler that i think devide pwm frequncy

it is true ?

if no , please say me how i can measure 50 hz?

Parents
  • thanks for your answer

    i get pwm with micero controller and i wanted measure frequncy and duty cycle and i can measure 1100 hz

    i have some problem please answer me :

    this is my code :

      NVIC_InitStructure.NVIC_IRQChannel                   = TIM2_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority        =1;
      NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    
            TIM_ICInitStructure.TIM_Channel       = TIM_Channel_1;
      TIM_ICInitStructure.TIM_ICPolarity    = TIM_ICPolarity_Rising;
      TIM_ICInitStructure.TIM_ICSelection   = TIM_ICSelection_DirectTI;
      TIM_ICInitStructure.TIM_ICPrescaler   = TIM_ICPSC_DIV1;
      TIM_ICInitStructure.TIM_ICFilter      = 0x0;
      TIM_ICInit(TIM3, &TIM_ICInitStructure);
      TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
      TIM_SelectInputTrigger(TIM2,TIM_TS_TI1FP1);
    
      TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);
    
      TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable);
    
      TIM_Cmd(TIM2, ENABLE);
      TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
    
    
    

    and this is my handler :

    {
    
            GPIO_SetBits(GPIOC,GPIO_Pin_2);
    
      TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
    
            IC2Value = TIM_GetCapture1(TIM2);
    //      IC1=TIM_GetCapture1(TIM2);
    //      IC2=TIM_GetCapture2(TIM2);
             if (IC2Value != 0)
      {
        /* Duty cycle computation */
        DutyCycle = (TIM_GetCapture2(TIM2) * 100) / IC2Value;
        /* Frequency computation */
        Frequency = SystemCoreClock / IC2Value;
                    IC2Value=0;
      }
      else
      {
        DutyCycle = 0;
        Frequency = 0;
      }
    }
    
    

    please say when during the current code i go to this handler

Reply
  • thanks for your answer

    i get pwm with micero controller and i wanted measure frequncy and duty cycle and i can measure 1100 hz

    i have some problem please answer me :

    this is my code :

      NVIC_InitStructure.NVIC_IRQChannel                   = TIM2_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority        =1;
      NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    
            TIM_ICInitStructure.TIM_Channel       = TIM_Channel_1;
      TIM_ICInitStructure.TIM_ICPolarity    = TIM_ICPolarity_Rising;
      TIM_ICInitStructure.TIM_ICSelection   = TIM_ICSelection_DirectTI;
      TIM_ICInitStructure.TIM_ICPrescaler   = TIM_ICPSC_DIV1;
      TIM_ICInitStructure.TIM_ICFilter      = 0x0;
      TIM_ICInit(TIM3, &TIM_ICInitStructure);
      TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
      TIM_SelectInputTrigger(TIM2,TIM_TS_TI1FP1);
    
      TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);
    
      TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable);
    
      TIM_Cmd(TIM2, ENABLE);
      TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
    
    
    

    and this is my handler :

    {
    
            GPIO_SetBits(GPIOC,GPIO_Pin_2);
    
      TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
    
            IC2Value = TIM_GetCapture1(TIM2);
    //      IC1=TIM_GetCapture1(TIM2);
    //      IC2=TIM_GetCapture2(TIM2);
             if (IC2Value != 0)
      {
        /* Duty cycle computation */
        DutyCycle = (TIM_GetCapture2(TIM2) * 100) / IC2Value;
        /* Frequency computation */
        Frequency = SystemCoreClock / IC2Value;
                    IC2Value=0;
      }
      else
      {
        DutyCycle = 0;
        Frequency = 0;
      }
    }
    
    

    please say when during the current code i go to this handler

Children