Прерывания таймера - Форум
Понедельник, 15.12.2014, 20:38 Вы вошли как Гость | Группа "Гости"
Eugene's MCU
Главная | | Мой профиль | Выход | RSS

[ Личные сообщения() · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Страница 1 из 11
Форум » Основной раздел » STM32 » Прерывания таймера (Не работает по переполнению)
Прерывания таймера
ELEKTROS

Дата: Среда, 29.06.2011, 11:03 | Сообщение # 1

Группа: Пользователи
Сообщений: 2
Статус: Offline
Добрый день. Проблема следующая: прерывания работают но не все, в частности использую TIM1, TIM2, TIM3, прерывания от TIM1 c фиксированной частотой по переполнению, TIM2 - захват 1 и переполнение, TIM3 - сравнение 1 и переполнение. не работают переполнения во всех. Весь код не вставляется поэтому только по TIM3. Вот так настраиваю:
Code

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
   TIM_OCInitTypeDef TIM_OCInitStruct;
   NVIC_InitTypeDef NVIC_InitStructure;
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE);   
   TIM_TimeBaseInitStruct.TIM_Prescaler=3664; //
   TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //  
   TIM_TimeBaseInitStruct.TIM_Period=0xFFFF;
   TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; //
   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);   
   TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_Timing;
   TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;   
   TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Disable;
   TIM_OCInitStruct.TIM_Pulse=0x00FF; //  
   TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;  
   TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Reset;
   TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCNIdleState_Reset;  
   TIM_OC1Init(TIM3, &TIM_OCInitStruct);
   TIM_UpdateDisableConfig(TIM3,ENABLE);
   TIM_Cmd(TIM3,ENABLE);  
   TIM_ITConfig(TIM3, TIM_IT_Update | TIM_IT_CC1,ENABLE); //
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //     
     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);         


Вот так обработчик прерываний по TIM3:
Code

void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_CC1)!=RESET)
   {
   TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);  
   /*какой то код*/
   }
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
   {
   TIM_ClearITPendingBit(TIM3, TIM_IT_Update);      
   /*какой то код*/
   }
TIM3->SR=0;




[ (RU) ]

eugenemcu

Дата: Пятница, 15.07.2011, 09:15 | Сообщение # 2

Группа: Администраторы
Сообщений: 115
Статус: Offline
В таймеры пока особо не углублялся. Сейчас вообще возникла длинная пауза в играх с STM32 ))


[ (RU) ]

Форум » Основной раздел » STM32 » Прерывания таймера (Не работает по переполнению)
Страница 1 из 11
Поиск: