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

 
 
> STM32F407, TIM2, TIM4, PWM Input, Прерывание работает на ТИМ2 но не на ТИМ4
BlackOps
сообщение Oct 26 2012, 04:22
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121





Вот кусов кода работающего прерывания на ТИМ2:
Код
// enable TIM2 interrupt
NVIC->ISER[0] |= 1 << TIM2_IRQn;

// configure TIM2_CH1 for input capture //////////////////////////////////

// enable TIM2 clock
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

TIM2->CR1 = 0; // turn off TIM2

// set prescaler, 1 count = 840/84MHz = 10us resolution
TIM2->PSC = 840;

TIM2->CCMR1 |=
TIM_CCMR1_CC1S_1 |  // CC1 input, IC1 to TI2
TIM_CCMR1_CC2S_0;   // CC2 input, IC2 to TI2


TIM2->CCER |=
TIM_CCER_CC1E | // enable capture
TIM_CCER_CC1P | // inverted/falling edge for CC1
TIM_CCER_CC2E;  // enable capture [noninverted/rising edge for CC2]


TIM2->SMCR |=
TIM_SMCR_TS_2 | // TI1 Edge Detector, TI1F_ED
TIM_SMCR_TS_1 | // Internal Trigger 2, ITR2
TIM_SMCR_SMS_2; // reset mode

TIM2->DIER |=
//TIM_DIER_CC1IE | // CC1 interrupt enable
TIM_DIER_CC2IE;  // CC2 interrupt enable


TIM2->CR1 |=
TIM_CR1_CEN;     // enable TIM2


там я вход беру с канала1, и кладу пульс и период в регистр СС1 и СС2 соответственно.


А вот код идентичный для ТИМ4, только в данном случае беру вход с канала2, и кладу пульс и период в регистры СС3 и СС4 соответственно, но прерывание не происходит,
Код
// enable TIM4 interrupt
NVIC->ISER[0] |= 1 << TIM4_IRQn;
// configure TIM4_CH1 for input capture //////////////////////////////////

// enable TIM4 clock
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;

TIM4->CR1 = 0; // turn off TIM1

// set prescaler, 1 count = 840/84MHz = 10us resolution
TIM4->PSC = 840;

TIM4->CCMR2 |=
TIM_CCMR2_CC3S_1 |  // CC3 input, IC1 to TI2
TIM_CCMR2_CC4S_0;   // CC4 input, IC2 to TI2


TIM4->CCER |=
TIM_CCER_CC3E | // enable capture
TIM_CCER_CC3P | // inverted/falling edge for CC3
TIM_CCER_CC4E;  // enable capture [noninverted/rising edge for CC4]


TIM4->SMCR |=
TIM_SMCR_TS_2 | // TI1 Edge Detector, TI1F_ED
TIM_SMCR_TS_1 | // Internal Trigger 2, ITR2
TIM_SMCR_SMS_2; // reset mode

TIM4->DIER =
TIM_DIER_CC3IE | // CC3 interrupt enable
TIM_DIER_CC4IE;  // CC4 interrupt enable


TIM4->CR1 |=
TIM_CR1_CEN;     // enable TIM4


обработчик идентичный:
Код
void TIM4_IRQHandler()
{

    static    volatile  ch1_pw=0, ch1_period=0;


if (TIM4->SR&2)
    {
       // ch1_pw=TIM1->CCR1;
       // TIM3->CCR1 = (ir_pulse) * 20;

        ch1_pw = TIM4->CCR3;
        TIM3->CCR1 = (ch1_pw) * 20;

    }


    if(TIM4->SR&4)
    {
        ch1_period=TIM2->CCR4;

    }

    TIM4->SR=0;
}


только для ТИм2 вместо ТИм4 стоит ТИМ2.

не понимаю почему не происходит прерывание, вроде же все идентично?


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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