Допустим, делаю генератор с частотой 5кГц, а получаю 454 Гц и фаза пляшет как хочет (смотрю осциллом).
Других прерываний нет, таймеры остановлены. Библиотеки инициализации все раскопал, частоты тактирования AHB, APB1,2 правильные (72, 36 и 72 МГц соотв.).
Из странно, TIM4_Struct.TIM_ClockDivision пробовал 1,2,4. Те же 454 Гц все равно.
Подскажите плс., что за грабли.
вот инициализация:
Код
TIM_TimeBaseInitTypeDef TIM4_Struct;
TIM4_Struct.TIM_Prescaler = (7200)-1; //72M / 7200 => 100KHZ freq ...._rcc.c без прескалера, скорость двойная! (шина 36, но тактовая x2)
TIM4_Struct.TIM_CounterMode = TIM_CounterMode_Up;
TIM4_Struct.TIM_Period = (10); //
TIM4_Struct.TIM_ClockDivision = TIM_CKD_DIV1; //
TIM4_Struct.TIM_RepetitionCounter = 0; // играет роль только в таймерах 1 и 8
TIM_TimeBaseInit( TIM4 , &TIM4_Struct );
TIM_ITConfig( TIM4 , TIM_IT_Update , ENABLE ); // EI
TIM_Cmd( TIM4 , ENABLE ); //Запуск таймера
// прерывания TIM4
NVIC_InitTypeDef NVIC_tim4;
NVIC_tim4.NVIC_IRQChannel = TIM4_IRQn;
NVIC_tim4.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_tim4.NVIC_IRQChannelSubPriority = 1;
NVIC_tim4.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_tim4);
Обработчик:
Код
void TIM4_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
GPIOB->ODR ^= GPIO_Pin_8; //переворачиваю лапу
}
Больше никаких прерываний не включал
Сообщение отредактировал gena_p1 - Sep 3 2014, 07:12