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

 
 
> Прерывания и таймеры в STM32
alex_avr2
сообщение Feb 14 2013, 23:50
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 24-11-12
Пользователь №: 74 538



Здравствуйте коллеги.
Мучаюсь уже который день с таймером в стм32 (контроллер стм32ф303, таймеры аналогичны тем что в ф4).

Используется таймер общего назначения 4.
Задача - вызывать прерывание по переполнению и по совпадению, в прерывании определять какое из событий произошло и принимать соответствующие действия.
Вот код настройки таймера:

Код
void pwm_init(void){
  
  RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
  
  TIM4->PSC = 0;
  TIM4->ARR = 1000;
  
  TIM4->CCR3 = 800;
  
//  TIM4->DIER = TIM_DIER_CC3IE;
  TIM4->DIER = TIM_DIER_UIE;  

  NVIC_EnableIRQ(TIM4_IRQn);
  NVIC_SetPriority (TIM4_IRQn, 5);

  TIM4->CR1 |= TIM_CR1_CEN;

}

Таймер считает до 1000. В третьем канале записано 800.

Включено тольеко прерывание по переполнению.

Вот обработчик:
Код
void TIM4_IRQHandler(void){

  if(TIM4->SR & TIM_SR_UIF){
    TIM4->SR = ~TIM_SR_UIF;  
    GPIOE->ODR |= GPIO_ODR_12;
    GPIOE->ODR &= ~GPIO_ODR_12;
  }  

  if(TIM4->SR & TIM_SR_CC3IF){
    TIM4->SR = ~TIM_SR_CC3IF;  
    GPIOE->ODR |= GPIO_ODR_10;
    GPIOE->ODR &= ~GPIO_ODR_10;
  }  
  
  GPIOE->ODR |=  GPIO_ODR_15;
  GPIOE->ODR &= ~GPIO_ODR_15;
  
}


Проверяем флаг прерывания, сбрасываем этот флаг путем записи в него нуля, и мигаем светодиодиком. Так для прерывания по переполнению и по совпадению третьего канала. В конце мигаем еще одинм светодиодиком, чтобы видет что обработчик вообще вызвался.

Но в итоге, несмотря на то что разрешено только прерывание по переполнению - выполняются оба обработчика, все светодиоды мигают.
Если разрешить только прерывание по совпадению, то ничего не меняется. Если оба одновременно - то опять ничего не меняются. Оба if выполняются друг за другом через одинаковые промежутки времени. Дебаг показывает постоянно единички во флагах CC4IF, CC3IF, CC2IF, CC1IF, UIF.

Что я делаю не так?
Хочу чтобы при переполнении мигал один светодиодик, а при совпадении - другой.

Go to the top of the page
 
+Quote Post



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

 


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


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