AnsweredAssumed Answered

TIMER WITH EXTERNAL CLOCK PIN STM32F429

Question asked by gerson74 on Aug 20, 2014
Latest reply on Aug 20, 2014 by Clive One
Hi!!!
I would like to connect the GPIO A6 to the timer 13 as input capture and also to the timer 3 as external clock. 


I've tried to use the input connected only to timer 13 and it runs ( it reaches the interrupt routine each rising edge of  PA6). 
I've tried to use the input connected only to timer 3 and it runs ( it reaches the interrupt routine every 50 rising edge of  PA6). 
Then I've tried to use the input connected to both timers and it DOESN'T run as I wanted: timer 3 seems to work correctly but timer 13 does not work ( it doesn't reach the interrupt routine ).


Is it possible to connect 2 timers to the same pin? Am I doing something wrong?


Below the code.


Initialization routine timer:


//----------------------------------------------------------
int init_TIM3   ( void )
{
    
    NVIC_InitTypeDef NVIC_InitStructure;


    TIM_DeInit( TIM3 ); // disabilito il ripetitore a timer


    // Enable the TIM3 global Interrupt
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);


    GPIO_InitTypeDef GPIO_InitStructure;


    // GPIOA clock enable
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);


    //  pin configuration
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_PinAFConfig(GPIOA, GPIO_PinSource6,  GPIO_AF_TIM3); // PA6 TIM3_CH1


    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
     int i;


     // Enable TIM3 Peripheral clock
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);


     TIM_TimeBaseStructure.TIM_Prescaler = 0;
     TIM_TimeBaseStructure.TIM_Period = 50;
     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


     TIM_TIxExternalClockConfig(TIM3, TIM_TIxExternalCLK1Source_TI1, TIM_ICPolarity_Rising, 0);


     TIM_Cmd(TIM3, ENABLE);


     // Likely will interrupt initially unless we clear it


     for(i=0; i<3; i++)
       if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
         TIM_ClearITPendingBit(TIM3, TIM_IT_Update);


     TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);


}




//----------------------------------------------------------


void init_TIM13( void )


//----------------------------------------------------------


{


    GPIO_InitTypeDef              GPIO_InitStructure;


    NVIC_InitTypeDef              NVIC_InitStructure;


    TIM_ICInitTypeDef             TIM_ICInitStructure;


    TIM_TimeBaseInitTypeDef       TIM_TimeBaseStructure;


    TIM_DeInit( TIM13 );




    /* TIM13 clock enable */


    RCC_APB1PeriphClockCmd  ( RCC_APB1Periph_TIM13 , ENABLE );


    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);


    //  pin configuration


    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;


    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;


    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;


    GPIO_Init(GPIOA, &GPIO_InitStructure);




    GPIO_PinAFConfig(GPIOA, GPIO_PinSource6,  GPIO_AF_TIM13); // PA6 TIM13_CH1






    /* Enable the TIM13 global Interrupt */


    NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_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(TIM13, &TIM_ICInitStructure);




    /* Enable the CC1 Interrupt Request */


    TIM_ITConfig(TIM13, TIM_IT_CC1, ENABLE);


    /* TIM enable counter */


    TIM_Cmd(TIM13, ENABLE);
 


}




Thank's!!!

Outcomes