Пробую сделать обычный таймер, вроде работает, но вот первое прерывание вызывается сразу же после старта.
Т.е. настраиваю таймер на 5 секунд, делаю TIM_Cmd(TIM7, ENABLE), запускаю, микропроцессор стартует и сразу же срабатывает прерывание, затем все как надо, каждые пять секунд или сколько задам.
Как сделать, чтобы не было первого "ложного" срабатывания? Запустил проц и только через N сек сработало.
Вот код:
CODE
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM7, ENABLE );
NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseStructure.TIM_Period = ms * 2;
TIM_TimeBaseStructure.TIM_Prescaler = ( uint16_t ) ( SystemCoreClock / APB1_PRESCALER * 2 / 2000 ) - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit ( TIM7, &TIM_TimeBaseStructure );
TIM_ITConfig ( TIM7, TIM_IT_Update, ENABLE );
TIM_Cmd ( TIM7, ENABLE );
и обработчик прерывания:
CODE
void TIM7_IRQHandler ( void )
{
if ( TIM_GetITStatus ( TIM7, TIM_IT_Update ) != RESET )
{
TIM_ClearITPendingBit ( TIM7, TIM_IT_Update );
}
...
}
Микропроцессор stm32f417
Сообщение отредактировал xheli - Jan 24 2012, 15:26