Предлагаю ближе к делу:
Таймер конфигурируется так (конкретные значения периода, прескалеров привести не могу т.к. проект не под рукой):
Код
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_Cmd(TIM3, ENABLE);
Захват вот так:
Код
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
Далее в момент времени таймера = 800 (таймер считает до 1000 и перезагружается, начинает считать с 0) надо отмерить 400мс и делаю
Код
TIM_SetCompare1(TIM3,400-(1000-800));
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE)
и сразу вылетаю в обработчик прерывания. Почему это происходит понятно, т.к. 800>(400-(1000-800))
Так вот надо чтобы таймер обнулился, начал считать заново и сделал событие в момент времени (400-(1000-800)).
Потом попробую отработать событие TIM_EventSource_COM
Может это то что надо.
Сообщение отредактировал Halfback - Jun 14 2010, 15:07