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

Поведение выхода TIM1 при отключении счетчика CEN=0

Добрый день.

Контроллер STM32F303CBT6.

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

Выключение преобразователя произвожу путем установки BDTR MOE = 0, при этом биты определяющие полярности и уровни создают нулевые значения на пинах.

Далее я выключаю счетчик через CR1 CEN=0 и тут происходит странное.

Во всех трех основных каналах, например в первом, CH1 = inv(CN1N) вместо обоих нулей.

То, где будет 0 или 1 зависит от значения регистра CCR1, то есть получается что при выключенном CEN=0 идет трансляция OCxREF на выходы игнорируя бит MOE=0.

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

Проштудировал весь рефман и апноуты, нигде ничего не сказано про влияние CEN на выходы. Может глаз уже замылился.

Всегда думал, что CEN просто блокирует счет не влияя на состояние выходов, я не прав?

Спасибо.

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


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

Добрый день.

Можете написать, как у вас сконфигурированы регистры TIMx_CCER, TIMx_CR2, TIMx_CCMRx для нужного канала и TIMx_BDTR?

В разделе описания регистров есть таблица "Output control bits for complementary OCx and OCxN channels with break feature" вы смотрели как настройки влияют на ваш выход?

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


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

@Sverchok, Все три канала настроенны одинаково, например для CH1:

CCER: CC1E=CC1NE = 1 (вкл оба выхода), CC1P=CC1NP = 0 (активный высокий). код h5=0b0101 для всех каналов.

CR2: все нули кроме MMS2 для запуска АЦП - работает. OIS1 = OIS1N = 0 - в режиме ожидания, когда MOE =0, то выход =0. - Это работает если CR1_CEN = 1 и не работает если 0.

CCMR: Toggle, Preload, Output. - код h38=0b00111000 для всех каналов. Работает верно.

Таблицу 122 знаю, там все стоит по нижнему варианту.

Работаю через регистры.

 

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


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

В общем как обычно, сам виноват.

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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