Stm32 с чего начать изучение...

Кто любит RISC в жизни, заходим, не стесняемся.
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Stm32 с чего начать изучение...

Сообщение veso74 »

Adrift выше писал, STM32 можно прошивать/читать разными способами/методами.
С программатором - понятно. Купите, это дешево, супер. Нно чтобы доставить, нужно время. Пока ждете доставки, включите STM32 к PC чрез USB: UART модуль к RX/TX на STM32. Чрез STM32CubeProgrammer можно и записать, и читать, и стереть STM32. Ниже: мой UART модуль на CH340G к A9/A10 на STM32F103C8T6: читаем, записиваем ...

Изображение
vispower
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Ср фев 18, 2009 13:59:46

Re: Stm32 с чего начать изучение...

Сообщение vispower »

Тут одновременно с стм32 и визио изучаю. Скопировал папку с проектом (не моим, тот что с гитхаба), решил его оставить первозданным а тренироваться на копии, создал другую папку и вставил в нее проект. Запустил скомпилировал, а в Дебуге бин старый, и он файлы проекта не видит кроме головного main, походу он из старой папки их подхватывает. Это нормально? Теперь и проект не скопировать? кстати запускаю проект из старой папки, выкидывает сообщение что он плохой, запускать не буду. Я знал что тамошние прогеры мудаки, но не знал что настолько. На дельфи раньше прожки делал, такого не было, пока серьезные дядьки не сказали "на нашем предприятии пиратское по использовать низззяяя", ну нельзя так нельзя, я больше не программист. VisioGDB релиз срок проходит, ключ просит. Сынок посоветовал cubeIDE поставить и cubeMX, с ними тоже не слава богу, сейчас затык скачать openocd не может. Толи санкции толи сам не допетриваю. Посоветуйте чего ребята.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Stm32 с чего начать изучение...

Сообщение Adrift »

[uquote="vispower",url="/forum/viewtopic.php?p=4650811#p4650811"]VisioGDB релиз срок проходит, ключ просит.[/uquote]
На rutracker ломаный есть.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

[uquote="vispower",url="/forum/viewtopic.php?p=4650811#p4650811"]Посоветуйте чего ребята.[/uquote]Займитесь чем-нибудь, что у вас лучше получается - не мучайте себя.
vispower
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Ср фев 18, 2009 13:59:46

Re: Stm32 с чего начать изучение...

Сообщение vispower »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4650849#p4650849"][uquote="vispower",url="/forum/viewtopic.php?p=4650811#p4650811"]Посоветуйте чего ребята.[/uquote]Займитесь чем-нибудь, что у вас лучше получается - не мучайте себя.[/uquote]
Конкуренции боитесь? Не успеете глазом моргнуть, придут молодые, с высокими амбициями, способные, талантливые... Нам бы от альцгеймера убежать, с нашими болезнями. Как говорится, не учите меня жить... и несколько вариантов продолжения
Я ж пишу как сам делаю, делюсь, может поможет такому же начинающему. Вам как профессионалу, интереснее общаться с более компетентными товарищами. Не осуждаю.
На готовых проектах как раз лучше всего начинать, тема же про это
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Stm32 с чего начать изучение...

Сообщение jcxz »

[uquote="vispower",url="/forum/viewtopic.php?p=4652826#p4652826"]Конкуренции боитесь? Не успеете глазом моргнуть, придут молодые, с высокими амбициями,[/uquote]Так и приходят..... но - дальше питона мало кто продвигается. Кубокодинг на си для них - уже коцмас. А чтобы самому прочитать мануалы, разобраться по ним в периферии и самостоятельно написать код - это уже за гранью фантастики для них.
У нас в конторе основная масса - "молодые и амбициозные". И из этой массы только один или два человека умеет на си контроллеры программировать. А чтобы без Куба - ни одного. :facepalm:
И имхо - это не только у нас так. А везде.
Мне уже сказали, что "в моём коде во всей конторе никто не может разобраться". :))) :facepalm: Потому как написан на си и без Кубов. А ведь простой си. Почти без ++ и с маленькими вкраплениями asm.

Потому - не боимся. Боимся наоборот - что на пенсию не дадут уйти. :)))


[uquote="vispower",url="/forum/viewtopic.php?p=4652826#p4652826"]способные, талантливые... Нам бы от альцгеймера убежать[/uquote]Где-то читал, что - чем активнее человек использует свои извилины, тем меньше вероятность развития оного у него.
Так что - грызите гранит науки языки программирования активнее - и альцгеймер в страхе будет обходить вас стороной, десятой дорогой. :)
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: Stm32 с чего начать изучение...

Сообщение TEPEM »

Ребята здравствуйте! помогите пожалуйста с поиском CMSIS и Startup к STM32G431
Спасибо огромное!!!
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Stm32 с чего начать изучение...

Сообщение Мурик »

Проект для STM32G431CB.
Вложения
STM32G431CB.7z
(155.16 КБ) 88 скачиваний
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: Stm32 с чего начать изучение...

Сообщение TEPEM »

[uquote="Мурик",url="/forum/viewtopic.php?p=4734871#p4734871"]Проект для STM32G431CB.[/uquote]
Мурик! Я вас люблю, Мурик!!!


Что то у меня тактирование от внутреннего генератора не пашет. С внешним морочится не стал( Ни у кого нет готовой настройки на 170мГц?

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

 RCC->CR |= RCC_CR_HSION;
 RCC->CR |= RCC_CR_HSIRDY;
 while(!(RCC->CR & RCC_CR_HSIRDY)) {} 
RCC->PLLCFGR |= RCC_PLLCFGR_PLLM_2; //PLLM 4
RCC->PLLCFGR = RCC_PLLCFGR_PLLN_0 | RCC_PLLCFGR_PLLN_2 | RCC_PLLCFGR_PLLN_4 | RCC_PLLCFGR_PLLN_6;
 RCC->CR |= RCC_CR_PLLON;
 RCC->CFGR = RCC_CFGR_SW_1 | RCC_CFGR_SW_0; 
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

Первые три команды не нужны, hsi и так включен. Вторая вообще бессмысленна - зтот бит только для чтения.
Делитель M неправильно задан, там не 4 получится.
Пятая команда фактически отменяет действие четвёртой.
После включения pll надо подождать его готовности.
Последняя команда наверняка затирает в cfgr что-то полезное.

Итого: ни одной правильной команды.

Добавлено after 1 hour 36 minutes 48 seconds:
Начни с такого.

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

FLASH->ACR = FLASH_ACR_DBG_SWEN
           | FLASH_ACR_ICEN
           | FLASH_ACR_DCEN
           | FLASH_ACR_PRFTEN
           | _VAL2FLD(FLASH_ACR_LATENCY,4);

RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSI
             | _VAL2FLD(RCC_PLLCFGR_PLLM,4-1)
             | _VAL2FLD(RCC_PLLCFGR_PLLN,85)
             | RCC_PLLCFGR_PLLREN
             | _VAL2FLD(RCC_PLLCFGR_PLLR,0); // R=2

RCC->CR = RCC_CR_PLLON | RCC_CR_HSION;
while(!(RCC->CR & RCC_CR_PLLRDY));

RCC->CFGR = RCC_CFGR_MCOPRE_DIV8
          | _VAL2FLD(RCC_CFGR_MCOSEL,1)
          | RCC_CFGR_PPRE2_DIV1
          | RCC_CFGR_PPRE1_DIV2
          | RCC_CFGR_HPRE_DIV1
          | RCC_CFGR_SW_PLL;
Аватара пользователя
sc0rpy
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср июн 18, 2025 07:20:55

Re: Stm32 с чего начать изучение...

Сообщение sc0rpy »

[uquote="TEPEM",url="/forum/viewtopic.php?p=4734875#p4734875"]настройки на 170мГц?[/uquote]
а смысл запускать такой лапоть на милигерцах?
глаза баяца, руки из жопы, но я не здаюсь
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

[uquote="sc0rpy",url="/forum/viewtopic.php?p=4735026#p4735026"]а смысл запускать такой лапоть на милигерцах?[/uquote]Что такое милигерц?
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Stm32 с чего начать изучение...

Сообщение jcxz »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4735041#p4735041"]Что такое милигерц?[/uquote]Не все владеют русским. Даже если говорят на нём. И даже если пытаются учить других правильно говорить. :facepalm:
Аватара пользователя
sc0rpy
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср июн 18, 2025 07:20:55

Re: Stm32 с чего начать изучение...

Сообщение sc0rpy »

[uquote="jcxz",url="/forum/viewtopic.php?p=4735043#p4735043"]Не все владеют русским. Даже если говорят на нём. И даже если пытаются учить других правильно говорить. :facepalm:[/uquote]
а как это читаеца?
[uquote="TEPEM",url="/forum/viewtopic.php?p=4734875#p4734875"]настройки на 170мГц?[/uquote]
глаза баяца, руки из жопы, но я не здаюсь
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: Stm32 с чего начать изучение...

Сообщение TEPEM »

Так ни чего и не понял :cry:
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Stm32 с чего начать изучение...

Сообщение JackSmith »

[uquote="TEPEM",url="/forum/viewtopic.php?p=4735597#p4735597"]Так ни чего и не понял :cry:[/uquote]
вам готовый ответ дали
VladislavS писал(а): Начни с такого.

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

FLASH->ACR = FLASH_ACR_DBG_SWEN
           | FLASH_ACR_ICEN
           | FLASH_ACR_DCEN
           | FLASH_ACR_PRFTEN
           | _VAL2FLD(FLASH_ACR_LATENCY,4);

RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSI
             | _VAL2FLD(RCC_PLLCFGR_PLLM,4-1)
             | _VAL2FLD(RCC_PLLCFGR_PLLN,85)
             | RCC_PLLCFGR_PLLREN
             | _VAL2FLD(RCC_PLLCFGR_PLLR,0); // R=2

RCC->CR = RCC_CR_PLLON | RCC_CR_HSION;
while(!(RCC->CR & RCC_CR_PLLRDY));

RCC->CFGR = RCC_CFGR_MCOPRE_DIV8
          | _VAL2FLD(RCC_CFGR_MCOSEL,1)
          | RCC_CFGR_PPRE2_DIV1
          | RCC_CFGR_PPRE1_DIV2
          | RCC_CFGR_HPRE_DIV1
          | RCC_CFGR_SW_PLL;
КотПротон
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт июл 31, 2025 20:41:39

Re: Stm32 с чего начать изучение...

Сообщение КотПротон »

[uquote="TEPEM",url="/forum/viewtopic.php?p=4734875#p4734875"]Что то у меня тактирование от внутреннего генератора не пашет.[/uquote]
Сконфигурируйте через Cube и не мучайте опу. Дался вам этот CMSIS - оставьте его для умных.
КотПротон
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт июл 31, 2025 20:41:39

Re: Stm32 с чего начать изучение...

Сообщение КотПротон »

[uquote="jcxz",url="/forum/viewtopic.php?p=4652921#p4652921"]Мне уже сказали, что "в моём коде во всей конторе никто не может разобраться". Потому как написан на си[/uquote]
Эхехех. Сегодня случайно натолкнулся я на это "никто не может разобраться":
Спойлер

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

case F_TRA:
      spiC->TRBSCR = B0 | B14;
      if (!(n = faz.tra.dlast)) {
        if (i & 1 << SO_ER) {
          faza = i += F_TRA_STOP - F_TRA << SO_n;
          PingMain();
        } else EndTra();
        return;
      }
      if (n >= BURST_SPI_R * 2) {
        IntDis(concat(NVIC_USIC, USIC_UNIT(nUSIC_spi), _, SRUSIC_SR(nUSIC_SR_spi_RX)));
        AtomicOrI(&DLR.LNEN, 1 << nDMALINE_spi_RX);
        spiC->RBCTR_b[1] = BURST_SPI_R * 2 - 1 - 1;
        __DMB();
        rdmaU->CHEN = (1 << (nDMALINE_spi_RX & 7)) * (B0 | B8);
      } else {
        spiC->RBCTR_b[1] = USIC_FIFO_SIZE;
        __DMB();
      }
      tdmaU->CHEN = (1 << (nDMALINE_spi_TX & 7)) * (B0 | B8);

 CCU_PIN_IN(nCCU_mlx1, PIN_MLX1) << EVENT_MLX_fall * 4 |
    2 << EVENT_MLX_fall * 2 + 16 |
    3 << EVENT_MLX_fall * 2 + 25;
Жжжжуткое месиво из magic numbers и бестолковых смешиваний обращений к регистрам из разных периферийных модулей и прикладных вычислений. Принцип единственной ответственности (и не только он один) попран ногами. Всё склеено в такой жуткий комок, который действительно невозможно разодрать. Так обычно пишут либо начинающие, либо безграмотные. Начинающие то быть может научатся, а вот безграмотные годами пишут месиво и гордятся им. Хотя гордиться тут нечем, это безграмотная позорная мешанина.
Программирование микроконтроллеров - это не только биты и регистры, но и принципы построения вообще программного кода. И этому тоже надо учиться, а не пренебрегать. Те, кто учился в ВУЗах по специальности, это прошли в рамках образовательной программы. Остальным - самообразование никто не запрещал.

Есть такой "принцип единственной ответственности", который гласит, что функция (класс, модуль) должна отвечать только за что-то одно. Если функция работает с регистрами SPI, то она должна работать только с регистрами SPI, никаких побочных вычислений какой-то переменной faza, никаких вызовов какой-то PingMain(), которая вообще черт знает что там делает, никаких вызовов посторонних модулей. Принцип единственной ответственности! Если надо вычислить переменную faza, это делается ВНЕ этой функции. Если надо вызывать PingMain(), это делается ВНЕ этой функции. Если нужно активировать DMA, это делается ВНЕ этой фукнции. Нельзя смешивать в одной функции разные уровни - уровень работы с железом и прикладной уровень. Каждая функция занимается только тем, для чего она предназначена. WriteSpi(GetPhase(i)); - уже лучше. (Причем, орфографически правильно не faza, а phase)

Из вышесказанного следует еще один принцип - принцип открытости/закрытости. Он гласит, что если нужно расширить функционал, то не следует изменять уже написанный модуль или функцию. Добавьте этот функционал в отдельной функции, не переписывая готовой. Потому что каждое дописывание готовой функции требует повторной её отладки, тестирования. Зачем переделывать работу, которая уже была сделана?
А если потом потребуется наоборот уменьшить функционал или использовать модуль в другом месте с меньшим функционалом, потребуется опять переписывать написанный модуль, выбрасывая лишнее.

Используйте интерфейсы модулей. Взаимодействие с программным модулем должно происходить только через предоставляемый модулем интерфейс. Интерфейс - это набор функций для доступа к внутренней структуре модуля. WriteSpi() - это интерфейс модуля Spi для передачи байта. GetPhase() - это интерфейс модуля фазы чего-то там для получения значения этой фазы через вычисление.

Отсюда следует принцип повторного использования кода. Он предполагает, что написанный модуль (класс, функцию) можно без изменений(!) использовать в другом проекте или в другом месте проекта. Показанный выше фрагмент не предполагает повторного использования - в новом проекте с другим функционалом этот фрагмент придется переписывать заново. Из-за этого увеличивается время разработки, усложняется отладка и поиск багов, а структура проекта выглядит как бесформенное месиво с трудноотслеживаемыми зависимостями. Невозможно что-либо изменить в одном месте, каждое изменение тянет за собой клубок тесносвязанных зависимостей. Невозможно один модуль заменить другим без внесения правок и переотладки уже отлаженного кода. Потому что в одной функции тесно переплетены как работа с регистрами микроконтроллера, так и работа с бизнес-логикой проекта. Выдернуть, поменять, переставить что-то - задача не из легких и сопряжена с риском человеческих ошибок.

Если попросить автора этого кода быстро в режиме "надо вчера" что-то изменить в функционале, он, этот автор, не сможет выполнить работу в короткий срок. Даже если он в собственной каше хорошо ориентируется, простая замена какого-либо функционального модуля потребует внесения множества правок, переписываний и повторных тестов уже протестированного. Это противоречит принятым принципам программирования и создает множество рисков и задержек в работе. И получается всё действительно будет завязано на одном человеке, который это написал. Обычно, такой человек является самым ненадежным звеном в компании, да еще и шантажирует руководство своей якобы незаменимостью. Типа, "вот если я уйду, вы все рухните". Но как показывает практика, вместе с этим шантажистом выкидывают и все его проекты, заменяя на правильно написанные. Некоторое переходное время компания испытывает трудности, но после устаканивания о предыдущем работнике-шантажисте больше вообще никогда и не вспоминают. А если и вспоминают, то только в негативном контексте. Хреновая перспектива, однако. Такой человек никогда не будет внесен в историю компании, даже если и многое сделал. Срабатывает обычная психология.

В общем, если кому-то сказали, что "в вашем коде никто не может разобраться", то это следует воспринимать как сигнал того, что вы не знаете принципов программирования и пишите ужасный код. Вряд ли эта фраза несет похвалу. Скорее, прямой намек на то, что погромист безграмотен и генерирует весьма опасный код разового применения. И скорее, все только и ждут, когда же этот горе-погромист свалит всё-таки на пенсию. А после этого никто даже и не будет разгребать это месиво, просто выкинут всё и заменят другим, структурированным кодом, с которым можно будет быстро работать и поддерживать его без создания рисков для компании.

PS. Есть принцип "Keep it simple, stupid", что в переводе означает "пиши проще, чувак!" :)
Аватара пользователя
sc0rpy
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср июн 18, 2025 07:20:55

Re: Stm32 с чего начать изучение...

Сообщение sc0rpy »

[uquote="КотПротон",url="/forum/viewtopic.php?p=4737357#p4737357"]Эхехех. Сегодня случайно натолкнулся я на это "никто не может разобраться":/[/uquote]

а человек-оркестр за миску риса еще и коментов должэн был накидать?
Последний раз редактировалось sc0rpy Вс авг 10, 2025 09:21:41, всего редактировалось 1 раз.
глаза баяца, руки из жопы, но я не здаюсь
КотПротон
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт июл 31, 2025 20:41:39

Re: Stm32 с чего начать изучение...

Сообщение КотПротон »

Причем здесь комменты? Там в том коде чушь собачья написана, это и без комментов видно. Никакой структуры, никакой логики, всё в навал. И я объяснил подробно, почему так. Читайте литературу по программированию.
Такое бестолковое месиво пишут либо начинающие, либо безграмотные. И это барахло никто разбирать не будет, выкинут файлы по Shift+Del и вспоминать не будут.
Если "человек-оркестр" ни в зуб ногой в теме вопроса, то пусть лучше в "оркестре" на балалайке пиликает за свою тарелку риса, коль он за еду работает. Кто не умеет, тому не следует и браться, чтоб не воротить такой вот дичи, которую потом только в помойку, на свалку истории.
Ответить

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