Перейти к содержанию
    

Вопрос по захвату таймера stm32f030

49 minutes ago, _Sergey_ said:

нужно альтернативную функцию вывода задействовать?

 

Да, подключаются через альтернативные функции порта и регистры захвата/сравнения. Вы на верном пути, просто спешите. (=

Кстати, в референсе есть аппендикс с примерами кода. Часто экономит время.

Изменено пользователем ozforester

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

День добрый. Продолжаю изучать режим захвата. Вынужден внести поправку в предыдущие достижения. В реальном окружении (spi, i2c, другие прерывания) скорость захвата получается раз в 30-40 меньше тактовой. Алгоритм такой: Таймер вызывает пдп при захвате. Пдп забирает и после двух переносов вызывает прерывание. В прерывании сбрасываются флаги и устанавливается переменная готовности буфера. Подвисания случаются. Пока не разобрался почему. Временно "вылечил" с помощью iwdg-таймера, так как причина может быть не связанной ни с захватом, ни с пдп. Казалось бы очевидно, что это таймер после сброса флагов сразу же устанавливает флаги заново, но попробовал в начале прерывания пдп останавливать захват таймера и без эффекта. Чешу затылок, читаю рефренс.. Может быть кому-то эта ситуация кажется знакомой, и у неё есть простое объяснение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разумеется она будет сильно меньше тактовой, если DMA срабатывает каждый второй захват. Сделайте захват сотни фронтов, чтобы прерывания от DMA не так часто возникали.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда не получится измерить период, когда всего два импульса, что несколько ограничивает применение. С размером буфера экспериментировал, делал прерывание после тысячи захватов, не помогает. Полагал,  что между прерываниями буду успевать обарботать первые два значения. Чисто экспериментировал, так как планировал останавливать захват после двух импульсов и запускать уже после обработки предыдущей серии. Но при высокой частоте код подвисает, как будто до отключения захвата в прерывании пдп дело не доходит. С отладчиком не прбовал, так как пока не умею на мегагенцах вылавливать события. Просто предварительно погашенный отладочный светодиод включал в самом прерывании пдп, и убеждался, что при подвисании он не включается.

Изменено пользователем ozforester

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно понимать, что между событием и DMA-транзакцией для этого события проходит время. Насколько я помню, порядка 12 тактов (для Cortex-M3).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...