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

 
 
> 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
Ответов
adnega
сообщение Aug 23 2012, 08:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(BlackOps @ Aug 23 2012, 12:01) *
с TIM2_CCR1, но почемуто читается только 0.

Дык таймер-то никто не запустил.
Вообще в STM32F очень навороченные таймеры: легко делается анти-ШИМ (на двух каналах, которые подключаются к одному пину) - в одном из каналов будет период, а в другом - длительность импульса.
Суть такова:
- по фронту импульса таймер сбрасывается и генерится прерывание, но предварительно сохраняется текущее значение таймера в первый (не путать с CCR1) регистр захвата;
- по спаду импульса копируется текущее значение таймера во второй регистр захвата;
- в прерывании имеем период и длительность импульса;
- можно настроить прерывание по переполнению и иметь информацию об отсутствии импульсов.

Например, так:
Код
//-------------------------------------------------------------
// init_TIMER2(void)
//-------------------------------------------------------------
// Инициализация таймера 2 захват параметров ШИМ-сигнала на
// линии 2
//-------------------------------------------------------------
void __inline init_TIMER2(void)
{
    TIM2->CR1=0;                // счетчик выключен
    TIM2->PSC=720;            // максимальное разрешение

    TIM2->CCMR1=
        (2<<TIM_CCMR1_CC1S)
        |(1<<TIM_CCMR1_CC2S);

    TIM2->CCER=
        (1<<TIM_CCER_CC1E)
        |(1<<TIM_CCER_CC1P)
        |(1<<TIM_CCER_CC2E)
        |(0<<TIM_CCER_CC2P);

    TIM2->SMCR=
        (4<<TIM_SMCR_SMS)
        |(6<<TIM_SMCR_TS);

    TIM2->DIER=6;

    TIM2->CR1=1;

}
//-------------------------------------------------------------
// void TIM2_IRQHandler(void)
//-------------------------------------------------------------
// Прерывание от T2
//-------------------------------------------------------------
void TIM2_IRQHandler()
{
    if(TIM2->SR&2)
    {
        ir_pulse=TIM2->CCR1;

    }
    if(TIM2->SR&4)
    {
        ir_period=TIM2->CCR2;
        ir_get(ir_pulse,ir_period);
    }
    TIM2->SR=0;
}
Go to the top of the page
 
+Quote Post



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

 


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


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