Это видео недоступно.
Сожалеем об этом.

STM32. Примеры. Blink, аналог millis(), работа с регистрами. Переходим с Arduino на STM32.

Поделиться
HTML-код
  • Опубликовано: 18 авг 2024
  • Привет друзья! Решил выпустить небольшую серию видеоуроков о переходе с платформы Arduino на STM32. Скажу сразу - я не профессионал. Я так же учусь. Надеюсь мои разборы хоть кому-то будут полезны :) Данный курс нацелен больше на новичков. Тех, кто только-только начинают осваивать 32-битные МК от STMicroelectronics. Если есть чего предложить, показать - милости просим к нам в команду.
    Видео содержит примеры кода с arduino и переделкой их под STM32. Использую для конфигурации CubeMX и библиотеку HAL. Пишу в Atollic TrueSTUDIO for STM32 9.3.0
    Заходи в нашу группу ВК solderi...
    ЯндексДзен: zen.yandex.ru/...
    00:00 Порты ввода вывода
    00:40 Blink на Arduino (delay)
    01:10 Blink на Stm32 (delay)
    09:24 Blink на Arduino (millis())
    09:57 Blink на Stm32 (Hal_GetTick()/аналог millis())
    14:00 Blink на Arduino (millis(), используя регистры)
    16:38 Blink на Stm32 (Hal_GetTick(), используя регистры)

Комментарии • 75

  • @user-gw4uc3gs7z
    @user-gw4uc3gs7z Год назад +8

    дружище, я сижу тут и нахожусь на грани, чтобы сказать "да ну нахер". и ты умудряешься удержать меня не бросить эту затею. будь здоров, дружище

  • @sv-avtomatika
    @sv-avtomatika 4 года назад +16

    Самое понятное обьяснение происходящего из всех видео данной тематики на ютубе. Отдельное спасибо за "миллис"

  • @edmelectronics4110
    @edmelectronics4110 3 года назад +5

    Поздравляю за Ваш труд! Для меня очен полезные уроки.

  • @djumanjy
    @djumanjy 3 года назад +5

    Спасибо за человеческое объяснение !

  • @enisykin1299
    @enisykin1299 3 года назад +2

    Дай вам бог, благодарю, с stm сложно без наглядного пособия начинающему!

  • @masterkit9517
    @masterkit9517 3 года назад +3

    вот это супер! как же вы помогли! смотрел на одном дыхании видео, думал bool вообще не бывает в STM32, а с вашим объяснением получается многое можно перебросить из ардуино на язык STM32 и наверное даже библиотеки так можно перебросить

    • @Solderingironspb
      @Solderingironspb  3 года назад +3

      так да. Можно без проблем разобрать любую библиотеку, любую программу. Но без понимания, как работает обращение к железу, у вас ничего не получится. В большинстве случаев, пока я писал программы и библиотеки, мне легче свое написать, разобравшись с datasheet, чем копать чужую библиотеку на ардуино)

    • @masterkit9517
      @masterkit9517 3 года назад +1

      @@Solderingironspb понятно, что не получится не зная пальцем в небо если

  • @danilomakaoov
    @danilomakaoov 3 года назад +1

    На практике же после просмотра многочисленных роликов подошёл только предложенный автором способ, за что ему большое спасибо, текущей датой является 12.06.2021, у меня стоит Windows 10 Home, по итогу всё заработало, единственное, драйвера сразу не заработали, пришлось перезагружать ноутбук в режим восстановлния с отключением проверки цифровой подписи драйверов, по итогу всё заработало, а после же обычной перезагрузки драйвера остались на своих местах, всем дочитавшим до этого места мои искринние пожелания хорошего дня.

  • @szapsis
    @szapsis Год назад +1

    Спасибо большое тебе за твой труд!!!

  • @fixcolorpl
    @fixcolorpl 4 месяца назад +1

    stm32cube ide c++ поддерживает ? я привык на ++ в atmel studio

  • @avhad5176
    @avhad5176 5 месяцев назад

    if (HAL_GetTick() - T >= 2000){
    T = HAL_GetTick();
    flag = !flag;
    }
    HAL_GPIO_WritePin(GPIOC, LED_Pin, flag);
    Так не проще?

  • @intelektum
    @intelektum 2 года назад +1

    Не знаю как в хале, но вроде тоже есть. Но в LL есть такое как LL_GPIO_TogglePin и на несколько строк будет меньше ))

  • @user-uh9fp7nh7w
    @user-uh9fp7nh7w 10 месяцев назад +1

    Проясните, пожалуйста, момент. Как у вас получается перепрошивать МК (нажимая F11), при этом не переставляя на плате STM32 желтый коннектор ( переход в режим переноса данных)? У меня при нажатии F11 всегда вылазила ошибка, полез искать причину, наткнулся на видео, где объяснили, что необходимо переставить коннектор, перепрошить и вернуть в начальное положение коннектор. Сделал процедуру, всё заработало. Но я не понимаю, как вы обходитесь без этого?

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад

      Не сталкивался с данной проблемой…а перемычки стоят, как у меня?

    • @user-uh9fp7nh7w
      @user-uh9fp7nh7w 10 месяцев назад

      да, в точности как у вас. @@Solderingironspb

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад

      @user-uh9fp7nh7w очень странно…

  • @user-ue8ik3cm6e
    @user-ue8ik3cm6e 4 года назад +1

    А это точно первое видео? Как будто с середины начинается.

    • @Solderingironspb
      @Solderingironspb  4 года назад +5

      Здравствуйте!) да, это первое видео. Просто начальное вступление отсутствует) если смущает начало то поясню: при работе с ардуино, мы привыкли работать не с портами, а с пинами, ведь ардуино - это надстройка. Но если мы возьмем просто мк atmega328p, который в той же uno, nano и взглянем на него даташит, то привычных D1, D2, A1 и т.д. мы не увидим. С портами на ардуино знакомятся тогда, когда начинают работать с регистрами, дабы обойти ардуиновскую прослойку. Допустим D13 - это PB5(порт B, нога 5). A1 - это PC1(порт C, нога 1).

  • @MrEksol
    @MrEksol 13 дней назад

    Что за милис?

  • @user-ty2vs3ek3p
    @user-ty2vs3ek3p Год назад +1

    Спасибо. А есть по регистрам ознакомительные видео?

  • @Altai2000
    @Altai2000 3 года назад +4

    Еще говорят, что stm32 интересней. Еще ни строчки кода по делу, а текста на пол кило создано. Ну каждому свое. И явно, эти камни не для блинка, а более загруженных и сложных проэктов. А для начинающих, если надо больше портов и mega пойдет и код писать проще.

  • @user-wb6vv3jf8x
    @user-wb6vv3jf8x 4 года назад +1

    Почему не CubeIDE? Это же от самого STM, да и еще объединение atolic и CubeMX в которых ты и работаешь.

    • @Solderingironspb
      @Solderingironspb  4 года назад +2

      Во всех уроках, начиная с 8, я перешел уже на CubeIDE. Работаю сейчас в нем)

  • @Ilya_G
    @Ilya_G 3 года назад +1

    Если я не ошибаюсь, то работать с STM 32 можно из Arduino IDE. По-моему, так удобнее и привычнее. Что думаете вы?

    • @Solderingironspb
      @Solderingironspb  3 года назад +1

      Думаю, что это полная фигня, т.к. Вы не продвинетесь дальше рядового ардуинщика. Будете топтаться на месте и не познаете всех фич данных МК. Плюс Вы будете привязаны только к определенным камням, что тоже беда...

    • @Ilya_G
      @Ilya_G 3 года назад +1

      @@Solderingironspb не спорю
      Но! Для моих случаев нужна Arduino, но мощности ATMega 328 явно не хватает. А STM 32 имеет большую вычислительную мощность, нежели Arduino Mega.
      Не знаю, как вам, но мне нет необходимости управлять отдельными регистрами. Если будет не хватать мощности, то я просто куплю себе что-то мощнее. Ну и конечно, не забываем про оптимизацию кода

    • @Funkbass1986
      @Funkbass1986 Год назад

      ​​​@@Ilya_G интересно, что за проекты у вас такие, что 328 не хватает? У меня на ней висит энкодер, дисплей 1602, датчики СО2 и BMEшка и Ds3231. И всё работает. Диспетчер это всё прокручивает, в сон укладывает, часы каждые полчаса пробуждают, или по нажатию энкодера. Правда, конечно, если дисплей графический повесить, то уже флэша не хватает. Я кстати начинал с атмел студио и причём с ассемблера, теперь на плюсах, но не ардуино иде, а визуал студио. Думаю обратно чтоль пересесть. Уж больно отладчик-симулятор удобный.

  • @user-rf1yx4kp4r
    @user-rf1yx4kp4r 10 месяцев назад +2

    После Atmel studio все какое то не наглядное, подсветки текста нет, много лишних комментариев в коде.
    Очень повышают порог вхождения.

  • @maxbolchman6650
    @maxbolchman6650 Год назад

    Почему при вводе flag=1 выдаёт ошибку, я не могу дальше начать работать(

    • @olrevbass
      @olrevbass Год назад

      ставьте два знака равно ==

  • @andrejkomockij329
    @andrejkomockij329 4 года назад +1

    Подскажите аналог micros(). Спасибо.

    • @Solderingironspb
      @Solderingironspb  4 года назад

      На данный момент сам ищу ответ на этот вопрос. Есть на stm32 режим захвата. Это два прерывания между событиями. Вот там время в микросекундах измеряется. Т.е. если работать с теми же энкодерами(как пример - замер скорости вращения вала двигателя), то должно сработать.

  • @rinatkin7194
    @rinatkin7194 3 года назад

    На регистрах класс

  • @user-kc8ec6vl9d
    @user-kc8ec6vl9d 2 года назад

    Спасибо

  • @zelektriklavrov48
    @zelektriklavrov48 2 года назад

    Подскажите как устранить эту ошибку ide " st-link server is required to launch the debug session "

    • @Solderingironspb
      @Solderingironspb  2 года назад

      Это на windows такое вылезло?

    • @zelektriklavrov48
      @zelektriklavrov48 2 года назад

      @@Solderingironspb Да это на windows. Может быть из-за обновления драйверов st-link-v2? И ещё драйвера не скачиваются с официального сайта. STM32 ST-LINK Utility прошивает.

  • @td_44
    @td_44 3 года назад

    Если использовать таймер милисекунд на STM, он независим и все выводы будут доступны для работы? или как в Ардуйне некоторые выводы уже не работают из за уже использующегося таймера функцией миллис.

    • @Solderingironspb
      @Solderingironspb  3 года назад

      Если честно, не задавался таким вопросом...

    • @intelektum
      @intelektum 2 года назад

      Пользуем сустик и все он независим.

  • @user-ms3id7jv7v
    @user-ms3id7jv7v 7 месяцев назад

    Почему они не используют плюсы? Зачем эти сложности с постоянным дописыванием HAL_ в начале функции когда можно было просто создать какой нибудь класс где уже все эти функции были готовы с автоподстановкой, в чем смысл ide если ручками все делать надо.

    • @Solderingironspb
      @Solderingironspb  7 месяцев назад

      Потому что, как правило, в Embedded все пишется на Си

  • @zikzakleague119
    @zikzakleague119 3 года назад

    Объясните пожалуста, почему у меня происходит следующее: я задал "HAL_Delay(1000)" тобеш 1000мс, а у меня индикатор включается и выключается на 3с (около того, я засекал даже) ?

    • @Solderingironspb
      @Solderingironspb  3 года назад +2

      Здравствуйте. Если сбросите проект, то так легче будет помочь. МК STM32F103C8T6?

    • @zikzakleague119
      @zikzakleague119 3 года назад

      @@Solderingironspb у меня stm32f411vet6, спасибо что отреагировали, я уже нашел проблему!

    • @masterkit9517
      @masterkit9517 3 года назад +1

      @@zikzakleague119 там вроде частота влияет ещё, частотой исправили?

    • @zikzakleague119
      @zikzakleague119 3 года назад +1

      @@masterkit9517 да там входную частоту я задал 8МГц, и это как раз помогло.(по умолчанию было максимум - 25МГц)

  • @user-qz1mh8dm2r
    @user-qz1mh8dm2r 11 месяцев назад

    Всем привет. Поясните, пожалуйста, как интегригровать atollic в cubemx? Я когда выбираю Toolchain/IDE, то у меня нет выбора TrueStudio, хотя он и установлен. Тормознулся уже на этом месте(((((, хэлп, плиз!!!

    • @Solderingironspb
      @Solderingironspb  11 месяцев назад

      Привет) atollic уже все. Не обслуживается. Забудьте про него. Ставьте CubeIDE)

    • @user-qz1mh8dm2r
      @user-qz1mh8dm2r 11 месяцев назад

      Уже стоит, просто хотелось пройтись по урокам, а то пока шаг влево, шаг вправо - везде какие-то ошибки, и не могу запустить.
      @@Solderingironspb

    • @Solderingironspb
      @Solderingironspb  11 месяцев назад

      @@user-qz1mh8dm2r ну разницы по работе с видеоуроками, используя CubeIDE быть не должно

    • @user-qz1mh8dm2r
      @user-qz1mh8dm2r 11 месяцев назад

      Понял, спасибо за помощь!@@Solderingironspb

  • @user-jj5km1cu2n
    @user-jj5km1cu2n 2 года назад

    А у меня светодиод не за моргал( Либо так быстро моргает ,что глаза не замечают)

    • @user-jj5km1cu2n
      @user-jj5km1cu2n 2 года назад

      все ок , я разобрался)

    • @user-jj5km1cu2n
      @user-jj5km1cu2n 6 месяцев назад

      @Peacefull_ я не помню уже

  • @djoutline
    @djoutline 3 года назад

    Зачем два одинаковых if? ruclips.net/video/wvOIsZvOJIk/видео.html
    flag = 1 - flag; и все.. Ну и коли он bool то flag = !flag, или тут так не работает?

    • @djoutline
      @djoutline 3 года назад

      Ну да, и второй if выполнится кажется всегда..

    • @Solderingironspb
      @Solderingironspb  3 года назад

      С флагом затупил, сорян)) естественно if/else можно.

    • @aka_vitfil
      @aka_vitfil 2 года назад

      в С нет булево значения. если вы посмотрите stdbool.h, то там всего лишь
      #define true 1
      #define false 0
      поэтому flag = !flag не прокатит.
      а вот if (flag == 1) - это какая-то жуть. должно быть if (flag)... и с присвоением тоже вместо flag = 1 лучше писать flag = true. это повышает читаемость кода.
      flag = 1 подразумевает то, что flag - это битовый флаг, а не булево.

  • @user-py3nb3ur4m
    @user-py3nb3ur4m 4 месяца назад

    write(uint8_t flag ^ 1)
    delay(num)

  • @GwinDala
    @GwinDala 2 месяца назад

    А сами разработчики чего курили чтоб такой длиномер воткнуть в ПО. Толи Ардуино, пару строк и готово, а на stm кучу строк длиной в километр, и то если упомнишь.

  • @IvanEng747
    @IvanEng747 Год назад

    Не понимаю чья вина и зачем так делают.
    Вы показываете в уроке на 3:50 что пины определяются в файле main.c но я в обновленном CubeMX генерирую код и получаю три файла - main.c main.h и gpio.h
    И как раз определение пинов делают в файле gpio.h
    Также Atolic куплен CubeIDE и по сути одно и тоже.
    То ли вы не до конца настроили Atollic для урока, то ли производитель ST меняет свои продукты и подходы к программированию каждый код.
    Но по итогу все это ох как запутывает новичка, и не только новичка в том же ардуино...

    • @Solderingironspb
      @Solderingironspb  Год назад +1

      Добрый день!
      В CubeMX, в разделе Project Manager -> Code Generator -> Generated files: уберите галку с Generate peripheral initialization as a pair of ".c/.h" files per peripheral.
      По умолчанию она выключена всегда была. Не знаю, почему у Вас она активировалась...

    • @IvanEng747
      @IvanEng747 Год назад

      @@Solderingironspb Сам включил генерацию двух файлов main.c и main.h
      Вроде так "модно" в правильном коде.
      А вообще после ардуино не понимаю, такой большой разрозненности файлов и библиотек. Также пока не нашел хорошего объяснения в уроках о структуре файлов в cube IDE.
      Была бы полезна эта информация.

    • @Solderingironspb
      @Solderingironspb  Год назад

      @@IvanEng747 Сами включили, а потом спрашиваете, чья вина :D)) Тут не то, что модно, сколько удобно бывает. А что именно Вам нужно по структуре файлов?

    • @IvanEng747
      @IvanEng747 Год назад +1

      @@Solderingironspb Ну вот например, структура или точнее дерево в проекте, то что формирует CubeMX.
      -Binaries
      -Includes
      -Core
      -Drivers
      -Debug
      -Release
      Ну и в каждой парке еще ветвление.
      Например, я хочу сам без генератора кода писать программу, как на той в той же ардуино IDE.
      По мере необходимости выносить какие то конструкции в отдельные файлы.
      Да даже просто - какой то проект находишь в интернете на гитхабе, но не понимаешь как его импортировать правильно, чтобы зависимости с библиотеками сохранить и скомпилировать.

  • @user-fo3fy7zd8t
    @user-fo3fy7zd8t 2 года назад

    Все понятно до момента переименовывания пина в Led - не переименовывается и все тут.

    • @Solderingironspb
      @Solderingironspb  2 года назад

      После того, как назначили PC13, как GPIO_Output, кликаете по этой ножке правой кнопкой мышки и выбираете Enter User Label. Прописываете имя и жмете Enter.
      Либо же Вы можете зайти в меню Pinout&Configuration, во вкладке System Core выберите GPIO, в появившемся окне GPIO Mode and Configuration выберите нужный пин, в данном случае PC13-TAMPER-RTC. В появившемся окне настроек PC13-TAMPER-RTC Configuration есть пункт User Label. Вот туда вписываете имя пина.

  • @rashpildes5460
    @rashpildes5460 4 года назад

    я.чайник-что.дает.этот.переход???????????

    • @Solderingironspb
      @Solderingironspb  4 года назад +1

      Смотря какие цели вы преследуете...
      Во первых - у вас начнется вкачка в программировании. Вы начнете наконец-то думать что и как устроено. Начнете читать книги. Вникать в язык Си. По другому будете смотреть на программирование МК.
      Во вторых - вы получаете МК, который во много раз мощней той же Atmega328p, что стоит в arduino uno.
      Еще и стоит дешевле. Куча периферии. DMA. и прочие радости для разработчика.

  • @eagold
    @eagold 2 года назад

    вместо else if (!flag) просто else 🙈

  • @Игорь-0
    @Игорь-0 7 месяцев назад

    Да, задумка класная, но разрабы проги "перестарались", зачем писать этот бесполезный HAL каждый раз? если вывод в начале определен как выход, ему присвоено имя, нах все прописывать, все должно быть автоматом - пишешь: присвоить Led - 1 и все! какой смысл в этом веб интерфейсе если все равно все ручками прописывать?

  • @user-dx8vm8hh8e
    @user-dx8vm8hh8e 4 месяца назад

    Как точно сказано " даем в отладку суриал вайер" а что это текое и где включается -ни звука..Сижу- смоттрю на ноги и ничего на понимаю..... Курс для насинающих!!!!