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

stm32f4 как настроить шим


Ivan Rusev

Рекомендуемые сообщения

 

с
Скрытый текст

void timer_2_init(void)
{


    GPIOA->MODER&=~GPIO_MODER_MODER3_0;
    GPIOA->MODER|=GPIO_MODER_MODER3_1;//ch1

    GPIOA->MODER&=~GPIO_MODER_MODER5_0;
    GPIOA->MODER|=GPIO_MODER_MODER5_1;//ch4

    GPIOB->MODER&=~GPIO_MODER_MODER3_0;
    GPIOB->MODER|=GPIO_MODER_MODER3_1;//ch2

    GPIOB->MODER&=~GPIO_MODER_MODER10_0;
    GPIOB->MODER|=GPIO_MODER_MODER10_1;//ch3

    RCC->APB1ENR |=RCC_APB1ENR_TIM2EN;
    GPIOA->AFR[1]=GPIO_AFRL_AFRL1_0;
        GPIOA->AFR[1]&=~GPIO_AFRL_AFRL1_1;
        GPIOA->AFR[1]&=~GPIO_AFRL_AFRL1_2;
        GPIOA->AFR[1]&=~GPIO_AFRL_AFRL1_3;
        GPIOB->AFR[1]=GPIO_AFRL_AFRL1_0;
        GPIOB->AFR[1]&=~GPIO_AFRL_AFRL1_1;
        GPIOB->AFR[1]&=~GPIO_AFRL_AFRL1_2;
        GPIOB->AFR[1]&=~GPIO_AFRL_AFRL1_3;
        GPIOB->AFR[1]=GPIO_AFRH_AFRH1_0 ;
        GPIOB->AFR[1]&=~GPIO_AFRH_AFRH1_1 ;
        GPIOB->AFR[1]&=~GPIO_AFRH_AFRH1_2 ;
        GPIOB->AFR[1]&=~GPIO_AFRH_AFRH1_3 ;
    TIM2->PSC = 0; // Настраиваем делитель что таймер тикал 1000 раз в секунду
    TIM2->ARR = 4095 ; //65535
    TIM2->CCMR1&=~TIM_CCMR1_CC1S;//настройка канала 1 на выход.
    TIM2->CCMR1&=~TIM_CCMR1_CC2S;//настройка канала 2 на выход.
    TIM2->CCMR2&=~TIM_CCMR2_CC3S;
    TIM2->CCMR2&=~TIM_CCMR2_CC4S;
    TIM2->CR1&=~TIM_CR1_DIR;
    TIM2->CCMR1|= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;//|TIM_CCMR1_OC1M_0;//;//
    TIM2->CCMR1|= TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1;//|TIM_CCMR1_OC2M_0;//
    TIM2->CCMR2|= TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1;//|TIM_CCMR1_OC2M_0;//
    TIM2->CCMR2|= TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1;
    TIM2->CCMR1|=TIM_CCMR1_OC1PE;
    TIM2->CCMR1|=TIM_CCMR1_OC2PE;
    TIM2->CCMR2|=TIM_CCMR2_OC3PE;
    TIM2->CCMR2|=TIM_CCMR2_OC4PE;

    TIM2->CCER |=TIM_CCER_CC1E;
    TIM2->CCER |=TIM_CCER_CC2E;
    TIM2->CCER |=TIM_CCER_CC3E;
    TIM2->CCER |=TIM_CCER_CC4E;
    TIM2->CCER &=~TIM_CCER_CC1P;
    TIM2->CCER &=~TIM_CCER_CC2P;
    TIM2->CCER &=~TIM_CCER_CC3P;
    TIM2->CCER &=~TIM_CCER_CC4P;
    TIM2->CR1|=TIM_CR1_ARPE;
    TIM2->EGR|= TIM_EGR_UG;
    // TIM4->CCR1=30000;
    TIM2->CR1|=  TIM_CR1_CEN;
}

 

 

main.c

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Вопроса нет, - вот никого и нет.

Разве что в названии темы вроде на вопрос похоже - "stm32f4 как настроить шим". Так это в даташите написано, как настроить.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Значит те доки наврали. Пиши в академию и выходи на нобелевскую премию.

Чо за дибилзм, не можешь сам запустить на уровне регистров, используй HAL и CubeMx

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

3 часа назад, Ivan Rusev сказал:

я настроил не работает

Может стоит начать изучение работы таймера не с регистров, а с начала главы про таймеры? Там есть упрощённая блок схема, что поможет понять внутреннее устройство таймера и его возможности. Потом идёт   описание разных режимов работы таймера, во множестве вариантов. Описание упрощённое, с картинками и стрелочками "акцентами внимания". И только после этого начинается описание регистров.

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

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

31.05.2020 в 10:30, Ivan Rusev сказал:

я настроил

Херню настроил, вот и не работает. Научись читать даташит, а не тупо копипастить.

 

P.S.

И научись нормально вставлять код на форум!

Изменено пользователем BARS_
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, BARS_ сказал:

Херню настроил, вот и не работает. Научись читать даташит, а не тупо копипастить.

 

P.S.

И научись нормально вставлять код на форум!

 

Я с вам на вы.А вы в футбол играете.Если не хотите не нужно я до вашего уровня не достигну.Нельзя так с людьми.Пацанюра

2 часа назад, BARS_ сказал:

Херню настроил, вот и не работает. Научись читать даташит, а не тупо копипастить.

 

P.S.

И научись нормально вставлять код на форум!

Небойсь тебя ктото научил.А я самоучка.

3 часа назад, LiVit сказал:

Я так понимаю, скоро форумчане увидев что автор  Ivan Rusev, даже заходить и читать не будут.

Вы все такие умные здесь.Я  к вам с мечём не припёрся.Я прийшёл за консультацией.Если ваш форум носит характер другого плана так зачем же форум вообще что вы здесь обсуждаете?

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

13 минут назад, Ivan Rusev сказал:

Нельзя так с людьми.

А лентяев никто не любит. Тебе же сложно открыть даташит и прочесть, что какой регистр значит. Во-первых, прочесть, что такое GPIOx->AFR и по какому принципу он настраивается, и понять, что вся настройка выглядит примерно вот так, а не простыней кривого кода:

GPIOE->AFR[1] |= 0x00000010;

Каждые 4 бита - настройка одного пина. Что сложного? А потом внимательно прочесть про регистры таймера, ибо там тоже наворочено лишнего, а установки одного важного бита как раз таки нет.

 

13 минут назад, Ivan Rusev сказал:

до вашего уровня не достигну

Если сидеть и ныть, то точно не достигнешь. Ты вот думаешь, что все сразу стали спецами? Хрен там, точно так же учились с нуля. Причем 99% самоучки, включая меня.

 

13 минут назад, Ivan Rusev сказал:

Небойсь тебя ктото научил.

Ты не поверишь, сам себя научил. Читал, изучал, пытался применить на практике. Только шел последовательно, от простого к сложному, а не прыгал туда-сюда по периферии МК. А ты даже форумом пользоваться не можешь научиться....

Изменено пользователем BARS_
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Ivan Rusev сказал:

даташит не даёт полной инфы.

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

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

ну во первых я просмотрел  дататашид.И перевёл референсе мануал.Шим мод одинаковы регистры как на f1 и f4 серии.Только есть одна зацепка альтернативная функция так примеров в нете на неё я нашёл в видео только всё равно не работает.Не понятно если у нас один выход как писать а если четыре как кода плюсовать или умножать?

Даташид дополняет.

Информации я вижу больше на референсе мануал.

Может я что то упустил .Не исключаю.С stm32 знаком недавно  с регистрами тем более .Не судите.А подскажите.Если хотите .Сам я решу эту проблему.Но дольше.

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

01.06.2020 в 14:44, Ivan Rusev сказал:

Вы все такие умные здесь.Я  к вам с мечём не припёрся.Я прийшёл за консультацией.Если ваш форум носит характер другого плана так зачем же форум вообще что вы здесь обсуждаете?

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

В вашем случае Иван, все видят что вы спрашиваете не пытаясь понять и разобраться. Используйте KEIL и отладчик, чтобы понять и увидеть как и что работает.

И никто никого ничему не учил. Откуда такие фантазии? Вы знаете какие-то курсы по STM32? Я - не знаю. Все берут даташиты и читают. Проблемы с инглишем? Ну, тут извините - никто не поможет.
Вы вообще, зачем в эту тему полезли? Для поиграться? Возьмите ардуину и играйте. Для профессионального применения? Тогда не надо ныть, надо разбираться самому. Купите осциллограф, логический анализатор, программатор нормальный.

Изменено пользователем LiVit
Ссылка на комментарий
Поделиться на другие сайты

11 минут назад, Ivan Rusev сказал:

Шим мод одинаковы регистры как на f1 и f4 серии.

Только вот другие регистры отличаются. Внимательно возьми и прочти описание ВСЕХ регистров таймера. Особенно BDTR.

 

11 минут назад, Ivan Rusev сказал:

так примеров в нете на неё я нашёл

	// SPI1 (LAN1 SPI)

	GPIOA->AFR[0] |= 0x55500000;
		
	GPIOA->MODER |= GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1; 
	GPIOA->OTYPER &= ~GPIO_OTYPER_OT_5 & ~GPIO_OTYPER_OT_6 & ~GPIO_OTYPER_OT_7;
	GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5 | GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7;

Вот тебе пример на 429 камень, разбирайся. У тебя все аналогично.

 

13 минут назад, Ivan Rusev сказал:

если у нас один выход как писать а если четыре как кода плюсовать или умножать?

Сам понял, что спросил?

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

GPIOA->AFR[0] |= 0x55500000; правая часть не понятна откуда и куда ноги растут.0x55500000;?Насчёт GPIOA->MODER |= GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1; GPIOA->OTYPER &= ~GPIO_OTYPER_OT_5 & ~GPIO_OTYPER_OT_6 & ~GPIO_OTYPER_OT_7; GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5 | GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7;Это всё понятно. А вот 0x55500000.как это вычесляется?

BDTR.- таймер 1и 8 это там находиться.В других я отличая не нашёл.Может я ошибаюсь.У меня среда не KEIL.Atolic Truestudio

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

28.05.2020 в 09:44, Ivan Rusev сказал:

GPIOA->AFR[1]=GPIO_AFRL_AFRL1_0;
GPIOA->AFR[1]&=~GPIO_AFRL_AFRL1_1;
GPIOA->AFR[1]&=~GPIO_AFRL_AFRL1_2;
GPIOA->AFR[1]&=~GPIO_AFRL_AFRL1_3;

 

Ну что за унылый чувак... Я потратил 5 минут своего драгоценного времени на то, чтобы вникнуть в AFR.

Ты хочешь менять AFR для пина A1, так? Так какого лешего ты лезешь в регистр, который для пинов 8...15?

image.png.29644122e267bec1b67997b56faab33c.png

image.png.539b8c8f14635f16010cc9e1839c26e0.png

Разницу между ними видишь?

А почему ты включаешь A3 A5 B3 B10, а альтернативные функции пытаешься настраивать (неправильно, надо заметить) для A1 и два раза для B1?
Или, пардон муа, это такой стиль написания программы, что вообще не понятно чего пишется и для чего??

 

Черт возьми, да тебе просто лень поискать в сети то, что уже решили и разжевали. Вот ссылка: ТЫЦ, где всё разжевано. На русском (!) языке.

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

Я запустил шим. 

void timer4(void)
{
    RCC->AHB1ENR|=RCC_AHB1ENR_GPIODEN;
    
    GPIOD->MODER|=GPIO_MODER_MODER12_1 ;
    GPIOD->MODER&=~GPIO_MODER_MODER12_0 ;
    //GPIOD->AFR[1]|=(0x02<<4*4) ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_0 ;
    GPIOD->AFR[1]|=GPIO_AFRH_AFSEL12_1 ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_2 ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_3 ;
    RCC->APB1ENR|=RCC_APB1ENR_TIM4EN;
    TIM4->PSC=0;
     TIM4->ARR=65535-1;


    TIM4->CCMR1&=~TIM_CCMR1_CC1S;//
    TIM4->CR1&=~TIM_CR1_DIR;
    TIM4->CCMR1|=TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
    TIM4->CCMR1|=TIM_CCMR1_OC1PE;
    TIM4->CCER|=TIM_CCER_CC1E;
    TIM4->CCER&=~TIM_CCER_CC1P;
    TIM4->CR1|=TIM_CR1_ARPE;
    TIM4->EGR|= TIM_EGR_UG;
    TIM4->CR1|=  TIM_CR1_CEN;
}

Вот рабочий код программы попробую на 4 канала .Спасибо конечно вам мастерам. у меня была банальная ошибка TIM4->ARR=65536;Извините что не так

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

1 час назад, Ivan Rusev сказал:

GPIOD->AFR[1]|=(0x02<<4*4) ;

Что это за бред?

 

1 час назад, Ivan Rusev сказал:

 GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_0 ;
    GPIOD->AFR[1]|=GPIO_AFRH_AFSEL12_1 ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_2 ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_3 ;

Ведь показали же, как правильно писать. Ну и нахрена делать так: 

GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_0 ;
GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_2 ;
GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_3 ;

Ели это делается одной строкой?

GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12;

Да и даже так делать не надо, если дефолтное состояние регистра нулевое. А оно нулевое

image.png.1529c8ede5c1b06559b19ba0c58c37fc.png

Аналогично и тут:

GPIOD->MODER|=GPIO_MODER_MODER12_1 ;
GPIOD->MODER&=~GPIO_MODER_MODER12_0 ;

Строка 

GPIOD->MODER&=~GPIO_MODER_MODER12 ;

Сбрасывает оба бита.

 

1 час назад, Ivan Rusev сказал:

у меня была банальная ошибка TIM4->ARR=65536

Все от того, что ты документацию читать не желаешь. Там английским по белому сказано, что

image.png.8429d032da3464b827d6dbf6b0153a5d.png

Т.е. ровно искомое тобой значение. Плюс знания Си нулевые, ибо не знаешь, что можно писать в какой тип переменной.

Изменено пользователем BARS_
Ссылка на комментарий
Поделиться на другие сайты

GPIOD->AFR[1]|=(0x02<<4*4) ;Этот бред я нашёл  по ссылке вашего коллеги.И этот бред мне дал понять как нужно.Ходя в тёмной комнате.И имея только свет светлячка.Можно найти выход.Ну как раз  int char я могу отличить 1 .0- 255 2 0-65535.Я  вечный ученик. TIM4->ARR=65535 можно так записывать.а можно и так TIM4->ARR=0xFFFF FFFF.у меня нет стажа я электрик.Контроллерами 5 с половиной год занимаюсь.С stm32 даже года не будет.Начинал с полного  нуля.Спасибо за понимание.Учится учится и ещё раз учиться.Я много не знаю.GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_0 ;
    GPIOD->AFR[1]|=GPIO_AFRH_AFSEL12_1 ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_2 ;
    GPIOD->AFR[1]&=~GPIO_AFRH_AFSEL12_3 ;  

Вот это я сам настроил.Мой пример в нете будет первым.Такой настройки я не видел.Кстати вот с этим вариантом тоже работает.Но мне он до конца не понятен.GPIOD->AFR[1]|=(0x02<<4*4).

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...