Думаю, проблема уже давно решена, да и не проблема это вовсе, но никак не хочет работать у меня.
Задача - сделать фиксированную задержку на таймере.
STM32F407, TIM4.
Инициализация (расчетное время 7мкс)
Код:
|
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM4, 0, TIM_PSCReloadMode_Immediate);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
TIM_OCInitStructure.TIM_Pulse = (SystemCoreClock/1000000)*7)+1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Disable);
TIM_ITConfig(TIM4, TIM_IT_CC1, ENABLE); |
Собственно использование
Код:
|
void Delay_Us1 (void)
{
TIM_SetCounter(TIM4,0);
TIM_Cmd(TIM4, ENABLE);
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
while (TIM_GetITStatus(TIM4, TIM_IT_CC1) == RESET);
TIM_Cmd(TIM4, DISABLE);
} |
И проблема - таймер не генерирует расчетного времени и еще работает нестабильно +/- 1мкс, что на 7мкс периода многовато.
То ли я неправильно считаю, то ли инициализирую неверно, не пойму....