2015-07-24 05:13 PM
I used TIMER 2. It's interrupt time is 1us.
I made one long pulse and short pulse using GPIO output pin and TIMER 2.but sometimes, interrupts occurred two times.First figure is the result I want to get.Second figure is the result I can get now.At second figure the red circle is an error I think.It's shivering in trigger mode.Here is my codevoid TIM2_IRQHandler(void){ //TIM_ClearITPendingBit(TIM2, TIM_IT_Update); assert_param(IS_TIM_ALL_PERIPH(TIM2)); TIM2->SR = (uint16_t)~0x0001; //////Enable pin wait.(1us) for(a=0;a<33;a++){ GPIOB->BSRRL = GPIO_Pin_0; } //wait(300ns) for(a=0;a<10;a++){ GPIOB->BSRRH = GPIO_Pin_0;} //one more short pulse(20ns) GPIOB->BSRRL = GPIO_Pin_0; GPIOB->BSRRH = GPIO_Pin_0;}2015-07-24 06:13 PM
Suggest you qualify the source of the interrupt, and consider if the problem is elsewhere in your code.
2015-07-24 09:07 PM
This is my Timer setting
void TIMER2_Init(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 9; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_PrescalerConfig(TIM2, 83, TIM_PSCReloadMode_Immediate); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2, ENABLE);}