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

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

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

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

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

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

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

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 пользователей онлайн

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