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

Вебинар "Разбор новых уникальных модулей FMAC и CORDIC в микроконтроллерах общего назначения STM32G4" (15.07.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре 15.07.2020, посвященном новому семейству микроконтроллеров общего назначения – STM32G4. Вебинар рассчитан на технических специалистов и тех, кто знаком с основами цифровой обработки сигналов. Мы разберем алгоритм работы CORDIC, а также рассмотрим пример создания цифрового фильтра на базе FMAC.

Зарегистрироваться на вебинар

                     

Новые контроллеры VIPerPLUS для ИП – видео и материалы вебинара STMicroelectronics

Видеозапись и материалы вебинара ST о семействе AC/DC регуляторов VIPerPLUS производства компании STMicroelectronics. Инженерами ST было детально рассмотрено новое семейство микросхем VIPerPLUS со встроенным транзистором, их возможности и топологии применения. Продемонстрировано испытание из лаборатории ST в Праге и моделирование в среде E-DesignSuite.

Подробнее

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

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

Share this post


Link to post
Share on other sites
                     

Конденсаторы ECWFG от Panasonic: теперь и для высоковольтных применений

Компания Panasonic анонсировала существенное расширение серии пленочных конденсаторов ECWFG: на сегодняшний день диапазон рабочих напряжений серии составляет 630…1100 В (DC). Серия ECWFG поддерживает уникальную функцию микропредохранителей.

Подробнее

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
Posted (edited)
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
Posted (edited)
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

Спасибо извини если обидел.Так референсе мануал или даташит?

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
Posted (edited)
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
Posted (edited)
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...

  • Сообщения

    • -Абрам, займи денег. Я знаю, что у тебя есть, ты же семечками торгуешь. - Не могу, у меня с Ротшильдами договор. Я никому не одалживаю деньги, а они не торгуют семечками.
    • Получено в лучшем виде. Все работает. Продавец-молодец. 
    • Multi-Contact синие интересны, но ради 4-х шт. одного цвета, думаю, смысла нет.
    • Что вы имеете в виду по поводу "не лезет" ? То, что я не указал, что это полевой транзистор и неправильно указал полярность диода или еще что-то не так ?
    • Coda. Прогон, вроде как ничего, меня вполне устраивает. После двухчасового прогона радиаторы чуть теплые, кулеры на полные обороты не выходят. Мосты БП прикручены к днищу корпуса, заодно служат крепежом платы. Софстарт простейший, питание кулеров от отдельного транса, коих оч. много, а доп. обмотку лень мотать. Предохранители намеренно спрятаны в корпус - умельцев много, а наши руки не для скуки, нефигделать, могут влепить гвоздь вместо предохранителя.Торы - перемотаные 2х амперные ЛАТРы, железо, конечно, никоторое, но пойдет - на безрыбье и рак рыба. В общем удовлетворен.  
    • если работает то я вас поздравляю, вам на месте виднее, а вот то что вы "изобразили на "схеме" - НЕ ЛЕЗЕТ   судя по "схеме" там три банки с балансиром и если зарядка "токовая", то у нее напряжение априори выше чем напряжение полностью заряженной батареи и диод ни коим образом не уменьшит напряжение заряженной батареи. если же заряд осуществляется "напряжением", то при использовании диода шоттки напряжение каждой банки будет меньше на 0.135 вольта, что незначительно повлияет на емкость батареи и в свою очередь исключит возможность ее перезаряда
    • А в следующей колонке - сопротивление цепи. Т.е. там может и появляется напряжение для переключения, но запитать вы им ничего не сможете. Только продетектировать.
×
×
  • Create New...