Alex-lab 6 8 сентября, 2022 Опубликовано 8 сентября, 2022 · Жалоба Добрый день. Контроллер STM32F303CBT6. В устройстве необходимо иногда включать таймер, генерировать комплиментарный сигнал, а потом выключить преобразователь и уйти в режим ожидания. Выключение преобразователя произвожу путем установки BDTR MOE = 0, при этом биты определяющие полярности и уровни создают нулевые значения на пинах. Далее я выключаю счетчик через CR1 CEN=0 и тут происходит странное. Во всех трех основных каналах, например в первом, CH1 = inv(CN1N) вместо обоих нулей. То, где будет 0 или 1 зависит от значения регистра CCR1, то есть получается что при выключенном CEN=0 идет трансляция OCxREF на выходы игнорируя бит MOE=0. Если CEN оставить 1, то все работает нормально, но вызываются прерывания от таймера и их нужно купировать дополнительно, что выглядит не очень правильным. Проштудировал весь рефман и апноуты, нигде ничего не сказано про влияние CEN на выходы. Может глаз уже замылился. Всегда думал, что CEN просто блокирует счет не влияя на состояние выходов, я не прав? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sverchok 1 8 сентября, 2022 Опубликовано 8 сентября, 2022 · Жалоба Добрый день. Можете написать, как у вас сконфигурированы регистры TIMx_CCER, TIMx_CR2, TIMx_CCMRx для нужного канала и TIMx_BDTR? В разделе описания регистров есть таблица "Output control bits for complementary OCx and OCxN channels with break feature" вы смотрели как настройки влияют на ваш выход? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex-lab 6 8 сентября, 2022 Опубликовано 8 сентября, 2022 · Жалоба @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 знаю, там все стоит по нижнему варианту. Работаю через регистры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex-lab 6 8 сентября, 2022 Опубликовано 8 сентября, 2022 · Жалоба В общем как обычно, сам виноват. Дело было в том, что происходило срабатывание еще одного прерывания уже при выключении и там все менялось. Если перед выключением таймера запретить прерывания, то все работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 9 сентября, 2022 Опубликовано 9 сентября, 2022 · Жалоба Выходами таймера можно управлять принудительно, вручную выставив те значения, что требуются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться