2009-12-15 11:15 PM
Using Tim1 ETR to count up (Update Event not generated)
2011-05-17 04:34 AM
Hello,
I'm searching for an example code using Tim1 ETR to count up or down (ETR Clock mode 2). My STM32F103RBT6 (Tim1_ETR Pin PA12) is connected to an Atmel 125 kHz RFID Frontend-IC (U3280M), which extracts the field clock of 125 KHz (period 8 µS). Every 32 periods I'll have to check another pin state, so I want use this clock signal for the Tim1 timer to count 32 periods (32 * 8 µS = 256 µS) and then generate an Update Interrupt. But TIM1_UP_IRQHandler() isn't called after 32 periods in my code. The scope shows the signal, I think something is wrong with my timer init. Timer start (TIM_Cmd(TIM1, ENABLE);) is generated by calling an external interrupt (I don't post this code section, because it is executed). The relevant sections:Code:
Timer Init:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_DeInit(TIM1); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 32*8; TIM_TimeBaseStructure.TIM_Prescaler = 0; /* no prescaler */ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /* no clock division */ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM1, TIM_FLAG_Update); /* Clear the interrput flag */ /* External Clock Mode 2, count at each rising, no filter */ TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x00); TIM_SelectInputTrigger(TIM1, TIM_TS_ETRF); /* Select the TIM1 Input Trigger: */ TIM_UpdateDisableConfig(TIM1, DISABLE); /* enable Update Event */ TIM_UpdateRequestConfig(TIM1, TIM_UpdateSource_Regular); /* Only counter overflow should generate an update */ TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); /* enable update interrupt */ NVIC Init: NVIC_InitStruct.NVIC_IRQChannel = TIM1_UP_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = TIM1_UP_IRQnChannelPreemptionPriority; NVIC_InitStruct.NVIC_IRQChannelSubPriority = TIM1_UP_IRQnChannelSubPriority; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); GPIO Init: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* RM-> normal pushpull config, page 145, table 19 */ GPIO_Init(GPIOA, &GPIO_InitStruct); So what's wrong with my code (probably, something with the timer initialisation) or does someone have an example code using ETR clock mode 2? Thank you Dominik