Jump to content
Ivan Rusev

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

Recommended Posts

 

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Экономичные решения МЕAN WELL для надежных разработок» (30.09.2021)

Компания Компэл приглашает 30 сентября на вебинар посвященный экономичным решениям МЕAN WELL. На вебинаре мы рассмотрим, как решения MEAN WELL позволяют сэкономить при выборе недорогого источника питания. Будут представлены основные группы источников питания по конструктивным признакам и по областям применения в контексте их стоимости или их особенностей, позволяющих снизить затраты на электропитание конечного устройства.
Подробнее

Модульные RJ-соединители KLS — масштабное пополнение склада Компэл

Продуктовая линейка компании KLS на складе Компэл пополнилась модульными соединителями типа RJ. Ассортимент представлен неэкранированными соединителями RJ11, RJ12 и RJ45 для построения базовых информационных сетей, а также экранированными RJ45 с трансформатором для реализации систем передачи данных между узлами ЛВС.

Подробнее

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

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

Share this post


Link to post
Share on other sites

Вебинар «Microchip и современный подход к искусственному интеллекту. Разворачиваем нейронную сеть на 32-битном микроконтроллере» (13.10.2021)

Приглашаем всех желающих 13 октября 2021 г. посетить вебинар, посвященный искусственному интеллекту, машинному обучению и решениям для их реализации от Microchip. Современные среды для глубинного обучения нейронных сетей позволяют без детального изучения предмета развернуть искусственную нейронную сеть (ANN) не только на производительных микропроцессорах и ПЛИС, но и на 32-битных микроконтроллерах. А благодаря широкому портфолио Microchip, включающему в себя диапазон компонентов от микроконтроллеров и датчиков до ПЛИС, средств скоростной передачи и хранения информации, возможно решить весь спектр задач, возникающий при обучении, верификации и развёртывании модели ANN.
Подробнее

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

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

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

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

Share this post


Link to post
Share on other sites

На f1 запустил а на f4 другое ядро не могу запустить шим.Таймер проверяю работает .А Шима нет.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
31.05.2020 в 10:30, Ivan Rusev сказал:

я настроил

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

 

P.S.

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

Edited by BARS_

Share this post


Link to post
Share on other sites
2 часа назад, BARS_ сказал:

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

 

P.S.

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

 

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

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

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

 

P.S.

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

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

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

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

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

Share this post


Link to post
Share on other sites
13 минут назад, Ivan Rusev сказал:

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

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

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

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

 

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

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

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

 

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

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

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

Edited by BARS_

Share this post


Link to post
Share on other sites

Смотря для чего, AFR расписан в даташите, остальное в референсе.

Share this post


Link to post
Share on other sites
10 часов назад, LiVit сказал:

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

Так уже)

Share this post


Link to post
Share on other sites
6 часов назад, Ivan Rusev сказал:

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

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

Share this post


Link to post
Share on other sites
11 часов назад, Ivan Rusev сказал:

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

Смелое утверждение... Как же все остальные-то работают? :D

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites
01.06.2020 в 14:44, Ivan Rusev сказал:

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

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

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

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

Edited by LiVit

Share this post


Link to post
Share on other sites
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 сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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?
Или, пардон муа, это такой стиль написания программы, что вообще не понятно чего пишется и для чего??

 

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

Share this post


Link to post
Share on other sites

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

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;Извините что не так

Share this post


Link to post
Share on other sites
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

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

Edited by BARS_

Share this post


Link to post
Share on other sites

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).

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • @hablof, а почему не можете привести фото с настоящего осциллографа (не симулятора), можно поинтересоваться? Что-то мне кажется, Ваша схема не способна "остановить сама себя". Предлагаю поставить тиристор, закорачивающий питание DA1 при превышении граничного для схемы тока, который измеряется с помощью TA1.
    • Добавлю гнездо одноконтактное черное 50 шт 25р/шт гнездо одноконтактное красное 50 шт 25р/шт стойка монтажная шестигранная PCHSN-6 d-11,8 мм, диаметр-5,4 мм, резьба М3 20 шт 6р/шт стойка монтажная шестигранная PCHSN-10 d-16мм, диаметр-5 мм, резьба М3  20 шт 10р/шт стойка монтажная шестигранная PCHSS-15 d-15мм, диаметр-5 мм, резьба М3 20 шт 12р/шт
    • ИИП, а не ИБП! Да когда же вы научитесь то????? Импульсный Источник, ругаюсь матом, Питания! И Источник Бесперебойного Питания! Чуете разницу????
    • Если дома есть небольшой токарник, то можно сделать хороший оловоотсос, но на коленке ничего хорошего не получится.  Силиконовые трубки не боятся нагрева в 300 и более градусов. Вакуумный компрессор от старого холодильника. Ещё нужен электрический клапан не понятно от чего. А чтобы он не засорялся, сборник олова должен находится перед ним. В общем, геморроя много.
    • Девушка красивая! Только дым должен идти ещё с места обозначенного стрелкой.
×
×
  • Create New...