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

 
 
> 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 24 2012, 07:58
Сообщение #2


Знающий
****

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



да, NVIC не настроил. Но тем не менее, прежде чем активировать прерывания, я решил подправить немного код, и посмотреть работает ли захват вообще, подправил только PSC = 840, чтобы получить 1 счет в 10мкс. Затем тот код что в прерывании запихнул в непрерывный цикл, и вижу в дебаггере:

ширина пульса = 149
период = 1498

ну а т.к. шаг = 10мкс, то 149*10мкс ~ 1.5мс, и 1298*10мкс ~ 15мс, т.е. измерил правильно.


Ну а вот теперь убедившись что захват уже работает, решил проверить прерывание, вписываю одну строку только:
Код
// enable TIM2 interrupt
NVIC->ISER[0] |= 1 << TIM2_IRQn;


и возобновляю предыдущий код в обработчике прерывания, в дебаггере вижу что прерывание действительно происходит, однако значения ширины пульса и периода абсолютно неверные, слишком большие, вот они:
ir_pulse = 4294967295
ir_period = 4294967295


не могу понять почему так? пробовал объявлять эти переменные в других местах кода итд, тоже самое почти что.
почему в обработчике прерывания не могу считать верные значения, как я это делал в беспрерывном цикле без прерываний?


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
adnega
сообщение Aug 24 2012, 11:51
Сообщение #3


Гуру
******

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



Цитата(BlackOps @ Aug 24 2012, 11:58) *
не могу понять почему так? пробовал объявлять эти переменные в других местах кода итд, тоже самое почти что.
почему в обработчике прерывания не могу считать верные значения, как я это делал в беспрерывном цикле без прерываний?

Может, "volatile" добавить?
Go to the top of the page
 
+Quote Post



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

 


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


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