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

Квадрат не вдоль, а поперек :)))

Они не плоские, как резисторы, а высокие. Параллелепипед BLM21 выглядит на плате слегка монстрообразно. Паять эти BLM18 очень просто, потому как есть за что пинцетом ухватиться и не надо переворачивать, чтобы надпись сверху была. Но это все ИМХО, конечно. Некоторым и BLM21 мало, им больше подавай.

А, понятно :)

 

Ну, если принести удобство в жертву ради красивостей... ладно, закажу на всякий случай и 18-тый, хотя он будет на плате как белая ворона среди кучи 0805 корпусов :)

Имхо, некоторым и 0402 много, им меньше подавай ;)

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


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

Начал работать с STM32 и столкнулся с невозможностью запустить 1-й таймер в режиме ШИМ. Остальные таймеры работают, первый ни в какую.

 

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

 

Где копать? может, я что-то не допонял?

 

Компилятор- Кейл uVision3.

 

Пытался разрешить прерывания по 1-му таймеру - Сapture/Сompare прерывания ни по одному из каналов не вызываются, только по update (зажигаю в прерывании светодиод)

C остальными таймерами- прерывания работают (правда, там они глобальные для всего таймера целиком, а дальше сам разбирайся., что не очень удобно).

 

Если смотреть на блок-схему первого таймера, то создается впечатление, что сигнал OC1_REF просто не вырабатывается :(

 

Кто-нибудь работал с первым таймером? есть какие-нибудь особенности?

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


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

ШИМ по первому таймеру. Вывод двухполярного сигнала с частотой 44100Гц

Делаю так.

 

#define    FPLL            72000000            // частота при работе от PLL, Гц
#define    PWM_N        (12)                // разрядность ЦАП, бит
#define    PWM_F        (44100)            // частота оцифровки, Гц
#define    PWM_P        ((FPLL/PWM_F)-1)    // предделитель


//-------------------------------------------------------------
// init_TIMER1()
//-------------------------------------------------------------
void __inline init_TIMER1()
{
    TIM1->ARR=PWM_P;        // запись периода
    TIM1->PSC=0;            // запись базы

    TIM1->CR1=(1<<2)
        |(1<<TIM_CR1_ARPE)
        |(1<<TIM_CR1_CEN);
    TIM1->CR2=
        (0<<TIM_CR2_OIS2)
        |(0<<TIM_CR2_OIS2N)
        |(0<<TIM_CR2_OIS3)
        |(0<<TIM_CR2_OIS3N);
    TIM1->CCMR1=
        (1<<TIM_CCMR1_OC2PE)
        |(OC_MODE_PWM1<<TIM_CCMR1_OC2M);
    TIM1->CCMR2=
        (1<<TIM_CCMR2_OC3PE)
        |(OC_MODE_PWM1<<TIM_CCMR2_OC3M);
    TIM1->CCER=
        (1<<TIM_CCER_CC2NE)
        |(1<<TIM_CCER_CC3NE);

    TIM1->BDTR=
        (1<<TIM_BDTR_MOE)
        |(0<<TIM_BDTR_DTG);

    TIM1->DIER=
        (1<<TIM_DIER_UIE);

}

//-------------------------------------------------------------
// void TIM1_UP_IRQHandler(void)
//-------------------------------------------------------------
void TIM1_UP_IRQHandler(void)
{
    TIM1->CCR2=x;
    TIM1->CCR3=y;
    TIM1->SR=0;
}

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


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

Спасибо за код!

Все это я уже делал, значит, логически я на правильном пути :)

 

Я пользуюсь фирменным файлом stm32_init.c от отладочной платы кейла , с встроенным "мета языком" - configuration wizard.

 

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

 

Буду пробовать последовательно изменять каждый регистр, чтобы найти где косячит визард. пока я только после визарда DIER менял и регистр блокировки и dead time (где бит MOE) . это не помогло.

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


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

Ну что же, всех с наступившим Новым Годом! :cheers:

 

Однако, жизнь продолжается и надо заниматься делом дальше :)

 

Кто нибудь юзал механический энкодер в связке с STM32 и его аппаратным интерфейсом?

В смысле таймером в режиме энкодера?

 

Как обстоят дела с подавлением дребезга?

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


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

Какой-то бред с первым таймером получается.

вручную проинициальзировал все регистры (просто повторил ваш код, прописав соответствующие имена битов #define,

 

блин, как и было все равно не работают выходы. сам таймер считает.

 

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

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


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

блин, как и было все равно не работают выходы. сам таймер считает.

А какие именно выходы вы хотите активировать? Они правильно сконфигурированы?

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


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

Вот простейший проект для Keil uVision 4.

Активация TIMER1 в режиме PWM, первый и второй каналы:

Timer.rar

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


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

Вот простейший проект для Keil uVision 4.

Активация TIMER1 в режиме PWM, первый и второй каналы:

Timer.rar

 

Спасибо! завтра попробую. Хочу активировать выходы OC2N и OC3N (они доступны на отладочной плате, B15, B14,B13)? или вообще на первый раз любой пин аппаратно связаный с СС регистром.

 

Ноги конечно же сконфгурированы как выводы альтернативной функции на 50 Мгц.

 

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

Причем прерывания update почему-то вызываются 2 раза подряд:

В прерывании по update стоит команда поднять-опустить одну ножку и сброс статус регистра, так вот на осциллографе я вижу 2 импульса с подряд на расстоянии 400нс, длительность импульса 128нс, и эти пары идут с периодом счета таймера.

 

Вообще хочу 12 ШИМ выходов сделать, а для этого 3 таймеров общего назначения не достаточно, ибо uart-s тоже нужны, а ноги по назначению пересекаются...

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


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

Спасибо! завтра попробую. Хочу активировать выходы OC2N и OC3N (они доступны на отладочной плате, B15, B14,B13)? или вообще на первый раз любой пин аппаратно связаный с СС регистром.

Пожалуйста :)

В этом примере два пина - PA8 и PA9 выводят ШИМ сигнал с частотой 100 Гц и заполнением 25 и 75 процентов соответственно.

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


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

Пришло в голову только что: все те ноги, которые я пытался использовать, имеют ТРИ альтернативные функции: Выход таймера, SPI и UART/

 

Может, в этом собака зарыта? В референс мануале не нашел отдельных указаний о принудительном ремаппинге неиспользуемой на одном выводе периферии.

 

А как вообще поведет себя вывод, если активировать два периферийных блока к нему подключенные? Сигналы сложатся?

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


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

Пришло в голову только что: все те ноги, которые я пытался использовать, имеют ТРИ альтернативные функции: Выход таймера, SPI и UART/

 

Может, в этом собака зарыта? В референс мануале не нашел отдельных указаний о принудительном ремаппинге неиспользуемой на одном выводе периферии.

 

А как вообще поведет себя вывод, если активировать два периферийных блока к нему подключенные? Сигналы сложатся?

Ну вы же не пользуетесь всеми тремя функциями сразу?

 

Производитель рекомендует неиспользуемую периферию не тактировать вообще - просто не включайте её через регистры APBxENR\AHBENR.

 

Хотя, к примеру, в STM32F103RBT6 можно юзать пин PA4 одновременно с SPI1 и USART2 в синхронном режиме - он будет работать как USART2_CK.

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


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

Спасибо, ваш проект заработал.

 

Нашел ошибку в кейловском визарде , он никак не выставляет BTDR регистр- он всегда 0. руками он выставляется.

 

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

 

сейчас пробую повторить ситуацию и найти ошибку..

 

также не смог разобраться где прописаны определения типа TIM_CCER_CC1E , или TIM_CCER_CC2E, в явном виде дефайнов нет..

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


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

Нашел ошибку в кейловском визарде , он никак не выставляет BTDR регистр- он всегда 0. руками он выставляется.

Вот поэтому я не люблю пользоваться всякими "визардами" или "фёрмварами".

также не смог разобраться где прописаны определения типа TIM_CCER_CC1E , или TIM_CCER_CC2E, в явном виде дефайнов нет..

Ну как же, а самая первая строка - #include "stm32f10x_map.h"?

В этом файле всё и прописано.

 

Отпишитесь, в чём была проблема. Интересно. :)

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


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

Вот поэтому я не люблю пользоваться всякими "визардами" или "фёрмварами".

 

Ну как же, а самая первая строка - #include "stm32f10x_map.h"?

В этом файле всё и прописано.

 

Отпишитесь, в чём была проблема. Интересно. :)

 

 

почему-то у меня кейл не возпринимает этои инклюд.. пробовал и

#include <stm32f10x_map.h>

и #include "stm32f10x_map.h"

 

кстати, чем кавычки отличаются от < > ?

 

почему-то внутри моего конфигуратора стоит ссылка на этот stm32f10x_map.h, и оттуда она работает..

на имена регистров он не ругается, а вот имена битов почему-то ему не известны..

 

ага, нашел. версии файла разные. у меня май 2008, у вас сентябрь. у меня имен битов нет.

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


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

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

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

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

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

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

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

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

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

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