STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3905500#p3905500"]Не ведаю, где вы таких начинающих находите[/uquote]Да тут же на форуме. Сколько раз уже было: "Cемён Семёныч, куда же я смотрел!"

[uquote="a5021",url="/forum/viewtopic.php?p=3905500#p3905500"]И когда такой случай наблюдался в последний раз?[/uquote]
Да вот, автор считает, что порт на выход сконфигурил, в комментарии же написано...

[uquote="a5021",url="/forum/viewtopic.php?p=3905500#p3905500"]Вообще, более-менее приличный проект -- это не быстрое занятие. Мож с год, а то и не один.[/uquote]В наше время это непозволительная роскошь. Заказчик хочет здесь и сейчас. Мы АФАР за 9 месяцев разрабатываем, а за год локатор. Вот для этого соответствующий инструментарий и нужен, иначе с битами действительно заковыряешься.

[uquote="a5021",url="/forum/viewtopic.php?p=3905500#p3905500"]"Зоопарк" же свидетельствует скорее о игре в бирюльки -- схватили одно, бросили, схватили в другое и так без конца.[/uquote]Или о широком спектре разрабатываемых изделий. В тот же космос на F103 не полетишь. Да и за брошенное изделие денег не получишь.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3905500#p3905500"]Не ведаю, где вы таких начинающих находите, т.к. нужно иметь глаза на жопе, чтобы в регистр RCC->AHBENR начать заталкивать определения RCC_ABP1ENR_xxx, например.[/uquote]
Постоянно на форумах с таким сталкиваюсь, причем не обязательно иметь дело напрямую с регистрами, HAL/SPL функции от подобных ошибок тоже не уберегут, достаточно взглянуть на прототип:

Код: Выделить всё

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
Периферия передается как uint32_t, потому что, допустим, (RCC_APB2Periph_TIM1 | RCC_APB1Periph_TIM2) имеет тип int, даже если изначально речь шла о типах двух разных перечислений. В С++ есть строгие перечисления которые к int автоматически не приводятся, к сожалению '|' для них не работает, но есть перегрузка операторов и шаблоны, с ними можно добавить данный оператор для любых типов. Также есть концепты, они позволяют ограничить такую перегрузку только перечислениями и, наконец, есть перегрузка функций, она позволяет не указывать название шины в имени функции, т.к. ошибиться можно и здесь. В итоге получаем функцию которая если компилируется, то гарантированно работает. А где же классы? Правильно, все вышеперечисленное работает и на уровне простых функций, С++ - это далеко не только классы.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Reflector, вот это сейчас cложно было для тех кто не варится в С++ :( Выстрел в молоко :)
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3905515#p3905515"]Да вот, автор считает, что порт на выход сконфигурил, в комментарии же написано...[/uquote]
Вот этот код?

Код: Выделить всё

GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHz
По вашему это не выход? Нда-с.
Вот для этого соответствующий инструментарий и нужен, иначе с битами действительно заковыряешься.
Сказки не рассказывайте. Заинитить железо -- это пустяк на фоне прикладных алгоритмов. Негде там заковыряться.
В тот же космос на F103 не полетишь.
В космос только на F7 ?
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3905531#p3905531"]

Код: Выделить всё

GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHz
По вашему это не выход? Нда-с.[/uquote]Конечно нет. Без знания CNF как это можно утверждать?

[uquote="a5021",url="/forum/viewtopic.php?p=3905531#p3905531"]Сказки не рассказывайте. Заинитить железо -- это пустяк на фоне прикладных алгоритмов. Негде там заковыряться.[/uquote]А кто только про инит говорит? Последнюю страницу перечитайте. Но где-то же вы годами ковыряетесь? Не я же про года писал.

[uquote="a5021",url="/forum/viewtopic.php?p=3905531#p3905531"]В космос только на F7 ?[/uquote]Опять же, если почитать последние страницы, то там примеры с космического проца пару раз проскакивали. Только тсссс, это тайна :)
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17

Сообщение AVI-crak »

[uquote="a5021",url="/forum/viewtopic.php?p=3905485#p3905485"]
Когда я говорю что невозможно допустить ошибку - я имею в виду именно этот факт (там просто нет других вариантов).
От всех ошибок это не уберегает. Глаз может замылиться, рука дрогнуть и из списков вместо нужного выбора можно сделать ошибочный.[/uquote]
Шанс создания ошибки разный, а шанс обнаружения ошибки намного выше вашего варианта. Мой вариант заточен под использование внутренней периферии, та самая часть в вашем варианте выглядит как магия. Вам для проверки потребуется открытие мануала, а у меня и так видно.

Ага, маниакально посчитали все мои затраты на вызов несчастной функции, ну а теперь посмотрите на свой вариант - так-же пристально. От момента размещения констант в регистрах ядра мк - до вызова функции. В этом плане мне особенно нравятся функции хала, там сначала долго и упорно ногами избивают стек, а после вызывают функцию.
Контактная информация:
Реклама
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3905549#p3905549"]Конечно нет. Без знания CNF как это можно утверждать?[/uquote]
Я не знаю, каким таинственным способом идентифицируют выход секретные космические разработчики, но выход здесь определяется содержимым битов MODE, а не CNF. Похоже, вы со всего размаху ударили лицом в грязь. Обличитель, блин. Так обосраться...

предупреждение за хамство. В следующий раз длительный бан. FAKIR.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Битами CNF можно задать режим AF, который не обязательно выход.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

В режиме AF направлением вывода управлеяет периферийный модуль, к которому этот вывод привязан. Вот, например, на FSMC шина данных двунаправленная, вопреки тому что в бите MODE стоит.
Изображение
Изображение
fsmc1.png
(47.92 КБ) 545 скачиваний
fsmc2.png
(49.05 КБ) 535 скачиваний
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3905748#p3905748"]В режиме AF направлением вывода управлеяет периферийный модуль, к которому этот вывод привязан.[/uquote]
Не надо сову на глобус, Славик. Не поможет. Пункт "9.1.11 GPIO configurations for device peripherals":

Изображение

Читать умеете?

Даже если периферия умеет реверсировать линии, порт конфигурируется, как OUTPUT/PUSH-PULL.

п 2-3 бан - 7дней за хамство после предупреждения. FAKIR.
Вложения
fsmc.jpg
(22.35 КБ) 510 скачиваний
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Ну и все че если надо AF значит конфигуришь AF че еще надо то? или чтобы пару строк написать нужно C++ изучать? :))) ему обьясняешь что достаточно пару строк, а он тебе говорит, нет надо C++ и портянки

FAKIR ты только банить можешь? ну обосрался чел значит обосрался, хамства тут нет

STM32F030

Код: Выделить всё

int ini_timer1(void)
{
 	GPIOA->MODER &= ~GPIO_MODER_MODER6;
  GPIOA->MODER |= GPIO_MODER_MODER6_1; 
	GPIOA->AFR[0]  |= _VAL2FLD(GPIO_AFRL_AFSEL6, 1); 
	
	RCC->APB1ENR |= RCC_APB1ENR_TIM3EN | RCC_APB1ENR_TIM14EN;
	
	TIM14->PSC = 8-1;
	
  NVIC_EnableIRQ(TIM3_IRQn);
	
	TIM3->PSC = 8-1;
	TIM3->CCMR1 |= TIM_CCMR1_CC1S_0; 
	TIM3->CCER |= TIM_CCER_CC1P; 
	
	TIM3->CCMR1 |= TIM_CCMR1_CC2S_1; 
	
	
	TIM3->SMCR |= TIM_SMCR_TS_0 | TIM_SMCR_TS_2; 
	TIM3->SMCR |= TIM_SMCR_SMS_2; 
                                
	TIM3->CCER |= TIM_CCER_CC1E; 
	TIM3->CCER |= TIM_CCER_CC2E; 
	
	TIM3->SMCR |= TIM_SMCR_MSM; 
                          
	TIM3->CCR3 = 15000;
	TIM3->CCR4 = 48000;
	
	TIM3->DIER |= TIM_DIER_CC1IE;
	TIM3->DIER |= TIM_DIER_CC2IE;
	TIM3->DIER |= TIM_DIER_CC3IE;
	TIM3->DIER |= TIM_DIER_CC4IE;
	
	TIM3->SR = 0;
	TIM3->CR1 |= TIM_CR1_CEN;
}
Порты в этом коде 3 строки, остальное настройка таймеров для аппаратного декодирования. у плюсов от этого кода плохого станет, тут одни регистры непонятные. :tea:
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Oxford",url="/forum/viewtopic.php?p=3905800#p3905800"]или чтобы пару строк написать нужно C++ изучать?[/uquote]Вам не надо. А тем кто хочет что-то больше знать и уметь стОит попробовать. Лишним оно всё равно не будет. Не зайдёт в эмбедде, так на компе пригодится.

[uquote="Oxford",url="/forum/viewtopic.php?p=3905800#p3905800"]:))) ему обьясняешь что достаточно пару строк, а он тебе говорит, нет надо C++ и портянки[/uquote]Реальные программы никогда не состоят из пары строк. Но чтобы показать на форуме сильные стороны даже и пары строк бывает достаточно. В раельной программе эффект усиливается с её ростом. А "портянки" это точно не ко мне, я как раз за лаконичность и читаемость кода.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Ну напиши мой код на C++ читаемо и лаконично, пока я другой проект прогаю. :tea: Хоть полюбуюсь.
Мк программироваться должен и исполнять нужный функционал. А не красотой блестать:tea: Профессионализм не от красоты зависит.

Весь проект у меня составил 2272 байта, хотя на борту 16кб флеша (stm32f030f4p6), аппаратное декодирование NEC пульта и эмуляция команд с другим протоколом. При этом я не думал экономить какие то байты никогда это не делал.
Последний раз редактировалось Oxford Пн окт 12, 2020 22:29:07, всего редактировалось 1 раз.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Oxford",url="/forum/viewtopic.php?p=3905800#p3905800"]у плюсов от этого кода плохого станет, тут одни регистры непонятные. :tea:[/uquote]Вот иж испугал регистрами. На плюсах разве не в регистры пишется? В них же, только вместо шифрограмм можно один раз сделать осмысленное задание режимов работы того же таймера и пользоваться по человечески.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Так я сделал и пользуюсь по человечески :))) Проект я этот сделал за 2 дня на второй день плату изготовил и впаял в телек. :tea: Теперь у меня ящик включается и выключается от пульта ТВ приставки ))) :))) Одной кнопкой два девайса. И голову не забивал всякой ерундой и время не тратил.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Знаешь, я бы постеснялся такое выкладывать

Код: Выделить всё

   TIM3->DIER |= TIM_DIER_CC1IE;
   TIM3->DIER |= TIM_DIER_CC2IE;
   TIM3->DIER |= TIM_DIER_CC3IE;
   TIM3->DIER |= TIM_DIER_CC4IE;
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

А я не стесняюсь. Но ты можешь навести красоту и сэкономить. Все в твоих руках дерзай.
А мне так код воспринимать легче. Не все требует оптимизации. Оптимизация должна быть разумная.
Последний раз редактировалось Oxford Вт окт 13, 2020 02:57:17, всего редактировалось 2 раза.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Я неоднократно выкладывал разные классы USB на разные контроллеры. Утаптываются в 2 кб. Любуйся.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

VladislavS да нет мне не нужно я не использую сторонние библиотеки в своих проектах. Максимум от вендоров проверенные либы через тестирование, если надо будет я напишу что мне нужно.
Если говорить о USB-UART я микрухи ставлю так проще и надежнее.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Чипы стоят денег, занимают место и потребляют энергию. :dont_know:
Ответить

Вернуться в «ARM»