не понимаю, о чем вы говорите . Вся прелесть режима захвата заключается в том, что получаются максимально точные значения времени именно тогда, когда таймер не "дергают" - как он себе тикал, так и тикает. Любые манипуляции с счетным регистром - обнулить его, установить значение - сразу ставит крест на точности.
Код:
TIM_ICInitTypeDef timer_ic;
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Prescaler configuration */
/* Настраиваем захват сигнала:
- канал: 1
- направление: по нарастанию
- источник: напрямую со входа
- делитель: отключен
- фильтр: отключен */
timer_ic.TIM_Channel = TIM_Channel_1;
timer_ic.TIM_ICPolarity = TIM_ICPolarity_Rising;
timer_ic.TIM_ICSelection = TIM_ICSelection_DirectTI;
timer_ic.TIM_ICPrescaler = TIM_ICPSC_DIV1;
timer_ic.TIM_ICFilter = 0;
TIM_ICInit(TIM2, &timer_ic);
/* Разрешаем таймеру генерировать прерывание по захвату */
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);