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

 
 
> STM32F4, Input capture, нет захвата сигнала
BlackOps
сообщение Aug 23 2012, 08:01
Сообщение #1


Знающий
****

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



допустим на вход PA0 подается пульс шириной 1.5мс, и повторяется каждые 15мс.
но ширина пульса конечно может менятся, и ее я хочу измерять.


я сконфигурировал порт PA0 как входной захват, а на него подаю пульс который генерируется пином PB4, с PB4 поступает пульс описанный выше, это я проверил.

но на входе па0 почемуто не могу захватить сигнал, т.е. не считает счетчик.
полярность входного сигнала высокая стоит, как и по умолчанию, по идее настроив его на вход, проставив значение фильтра, и включив он уже должен работать, и я должен суметь считать значение счетчика равное времени входного пульса с TIM2_CCR1, но почемуто читается только 0.

вот код настройки:
Код
// configure TIM2_CH1 for input capture //////////////////////////////////


TIM2->CCMR1 |=
        TIM_CCMR1_CC1S_0 | // set TIM2_CH1 for input mode
        TIM_CCMR1_IC1F_1; // set the input filter to 4 samples


// select edge of the active transition


//enable input capture
TIM2->CCER |= TIM_CCER_CC1E;


while (1)
{
    //cnt = TIM3->CNT;
    capture = TIM2->CCR1;

}


что еще я мог упустить?


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BlackOps
сообщение Aug 23 2012, 10:22
Сообщение #2


Знающий
****

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



для начала тогда решил сделать как Вашем примере, вот такой же код:
Код
// enable TIM3 clock
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

TIM2->CR1 = 0;
TIM2->PSC = 720;

TIM2->CCMR1 |= TIM_CCMR1_CC1S_1 |
        TIM_CCMR1_CC2S_0;


TIM2->CCER |= TIM_CCER_CC1E |
              TIM_CCER_CC1P |
              TIM_CCER_CC2E;


TIM2->SMCR |= TIM_SMCR_TS_2 |
              TIM_SMCR_TS_1 |
              TIM_SMCR_SMS_2;

TIM2->DIER |= TIM_DIER_CC1IE |
              TIM_DIER_CC2IE;


TIM2->CR1 |= TIM_CR1_CEN;


while (1)
{

}


вот функция прерывания:
Код
void TIM2_IRQHandler()
{
    uint32_t ir_pulse = 0, ir_period = 0;

    if(TIM2->SR&2)  // breakpoint here *
    {
        ir_pulse=TIM2->CCR1;

    }
    if(TIM2->SR&4)
    {
        ir_period=TIM2->CCR2;
       // ir_get(ir_pulse,ir_period);
    }
    TIM2->SR=0;
}


а вот настройка порта:
Код
//=============================================================================
// GPIOA configuration
//=============================================================================

// enable GPIOA clock
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

// Alternate Function
GPIOA->MODER |=
(GPIO_MODER_MODER0_1 | // AF, TIM2_CH1
GPIO_MODER_MODER1_1   // AF, TIM2_CH2
);

// Output type
GPIOA->OTYPER |=  0; // push-pull if 0


// Speed type
GPIOA->OSPEEDR |=
(GPIO_OSPEEDER_OSPEEDR0_1 | // TIM2_CH1, 50MHz
GPIO_OSPEEDER_OSPEEDR1_1   // TIM2_CH2, 50MHz
);

// Push/Pull
GPIOA->PUPDR |=
(
GPIO_PUPDR_PUPDR0_0 |  // Pull-Up, TIM2_CH1,
GPIO_PUPDR_PUPDR1_0    // Pull-Up, TIM2_CH2,
);


// Alternate Function pins
GPIOA->AFR[0] |=
((1 << ((0 - 0) << 2)) |  // TIM2_CH1, AF1
(1 << ((1 - 0) << 2))   // TIM2_CH2, AF1
);



подключил к ножке PA1 пульс (1.5мс ширина, период 15мс), поставил брейкпоинт внутри функции прерывания, и оно не происходит.


что там еще может быть?

и еще вопрос, как именно понимать это максимальное разрешение? т.е. это количество клоков которое учавствует в сэмплингер входного сигнала? на Рис. 133, стр. 373 Мануала, устанавливая PSC=720 мы контролируем CK_INT который на входе мультиплексора? или как?


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



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:48
Рейтинг@Mail.ru


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