2013-11-19 04:08 AM
Hello,
I want to initialize a timer which will serve to count the time between two actions. For example, counting the time between two button press. So the timer have to count in a loop. Each time I press a button I have get the value of the counter timer and reset this counter. Very simple operation. I do not find any example to achieve this... I try several modes but I don't know how to configure the timer (like in capture mode). This is my working code:TIM_TimeBaseInitTypeDef TIM_InitStruct;
void
TIM_Config(
void
){
/* The timer for the frequency between two button press calculation */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
TIM_InitStruct.TIM_Prescaler = 84 - 1;
// This will configure the clock to 1 MHz
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
// Count-up timer mode
TIM_InitStruct.TIM_Period = 3000000 - 1;
// This is the value of the loop = 3 seconds
TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
// Divide clock by 1
TIM_InitStruct.TIM_RepetitionCounter = 0;
// Set to 0, not used
TIM_TimeBaseInit(TIM5, &TIM_InitStruct);
/* TIM5 enable counter */
TIM_Cmd(TIM5, ENABLE);
TIM_ITConfig(TIM5, TIM_IT_CC1, ENABLE);
// Interrupt config
}
void
EnableTimerInterrupt(
void
)
{
NVIC_InitTypeDef nvicStructure5;
nvicStructure5.NVIC_IRQChannel = TIM5_IRQn;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
nvicStructure5.NVIC_IRQChannelPreemptionPriority = 5;
nvicStructure5.NVIC_IRQChannelSubPriority = 0x00;
nvicStructure5.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvicStructure5);
}
/* TIM 5 interrupt : activated each time the counter timer go to 3000000 */
void
TIM5_IRQHandler(
void
){
//if interrupt happens the do this
if
(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){
//clear interrupt and start counting again to get precise freq
TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
}
}
What is the best way to know the counter value of TIM5 ? And reset TIM5 ?
Thanks !
2013-11-19 04:18 AM
x =TIM5->CNT;
TIM5->CNT = 0;2013-11-19 06:28 AM
Thanks Clive ! Again you save me...
2013-11-19 06:45 AM
Should be Update, not CC1
TIM_ITConfig(TIM5, TIM_IT_CC1, ENABLE);
// Interrupt config
2013-11-20 02:46 AM
Yes, I had noticed this but I forgot to mention it :)