реклама на сайте
подробности

 
 
> 32stmf0 timer interrupts, при инициализации СРАЗУ прерывает
alexf
сообщение Sep 28 2016, 02:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Прошу прощения ели тема поднималась - не нашел.
Проект на STM32F070. Timer3 используется для задержки. Простейший режим: считаем вверх до ARR, прерывание по переполнению. Почему то после инициализации первое прерывание происходит СРАЗУ. Вне зависимости от прескалера и ARR. А дальше все как и положено.

После долгих упражнений решил обмануть - первый раз жду переполнения, благо ждать микросекунды, и сбрасываю. Так работает, но как то коряво. В чем собственно корень зла?
Пробовал инизиализачию и через HAL и напрямую. Без разницы.
Код
void Timer3Init(void){

    int PrescalerValue = (uint32_t)(SystemCoreClock / 100000) - 1;
    TIM3->CR1 = 0;   // disable timer
    TIM3->PSC = PrescalerValue;
    TIM3->ARR = 2;
    TIM3->CR1 = TIM_CR1_CEN;   // Enable timer
    while((TIM3->SR & 1) == 0); // <*************** танец с бубном тут
    TIM3->CR1 = 0;   // disable timer
    NVIC_ClearPendingIRQ(TIM3_IRQn);
    NVIC_EnableIRQ(TIM3_IRQn); // Enable interrupt from TIM3 (NVIC level)
}

void StartTimer3(int timeout){
  Timer3Expired = 0;
  TIM3->CR1 = 0;   // disable timer
  TIM3->ARR = timeout / 10;
  TIM3->CR1 = TIM_CR1_CEN;   // Enable timer
  TIM3->SR = 0; // clear interrupt flag
  TIM3->DIER = TIM_DIER_UIE; // Enable update interrupt (timer level)
}

На разных форумах читал что похожая фигня на других линейках, но ответа нигде не нашел. Вдруг тут повезет?

Сообщение отредактировал IgorKossak - Sep 28 2016, 09:54
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016