| /* TIM3 clock enable */ rcu_periph_clock_enable(RCU_TIMER3);
 
 /**TIM3 GPIO Configuration
 PD12     ------> TIM3_CH1
 PD13     ------> TIM3_CH2
 */
 gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12|GPIO_PIN_13);
 gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12|GPIO_PIN_13);
 
 gpio_af_set(GPIOD, GPIO_AF_2, GPIO_PIN_12|GPIO_PIN_13);
 
 timer_deinit(TIMER3);
 
 timer_initpara.period = 2000;
 timer_initpara.prescaler = 0;
 timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
 timer_initpara.counterdirection  = TIMER_COUNTER_UP;
 timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
 timer_initpara.repetitioncounter = 0;
 
 GD_TIM_Encoder_MspInit(TIMER3);
 timer_init(TIMER3, &timer_initpara);
 
 /* TIMER3 CH0 input capture configuration */
 timer_icinitpara.icpolarity  = TIMER_IC_POLARITY_RISING;
 timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
 timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
 timer_icinitpara.icfilter    = 0x05;
 timer_input_capture_config(TIMER3,TIMER_CH_0,&timer_icinitpara);
 timer_input_capture_config(TIMER3,TIMER_CH_1,&timer_icinitpara);
 
 timer_quadrature_decoder_mode_config(TIMER3,TIMER_ENCODER_MODE1,TIMER_IC_POLARITY_RISING,TIMER_IC_POLARITY_RISING);
 
 timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_CH0);
 timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_CH1);
 timer_interrupt_enable(TIMER3, TIMER_INT_UP);
 timer_interrupt_enable(TIMER3, TIMER_INT_CH0 |TIMER_INT_CH1);
 
 /* auto-reload preload enable */
 //                timer_auto_reload_shadow_enable(TIMER3);
 timer_enable(TIMER3);
 
 
 |