Это видео недоступно.
Сожалеем об этом.
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(), используя регистры)
дружище, я сижу тут и нахожусь на грани, чтобы сказать "да ну нахер". и ты умудряешься удержать меня не бросить эту затею. будь здоров, дружище
Самое понятное обьяснение происходящего из всех видео данной тематики на ютубе. Отдельное спасибо за "миллис"
Поздравляю за Ваш труд! Для меня очен полезные уроки.
Спасибо за человеческое объяснение !
Дай вам бог, благодарю, с stm сложно без наглядного пособия начинающему!
вот это супер! как же вы помогли! смотрел на одном дыхании видео, думал bool вообще не бывает в STM32, а с вашим объяснением получается многое можно перебросить из ардуино на язык STM32 и наверное даже библиотеки так можно перебросить
так да. Можно без проблем разобрать любую библиотеку, любую программу. Но без понимания, как работает обращение к железу, у вас ничего не получится. В большинстве случаев, пока я писал программы и библиотеки, мне легче свое написать, разобравшись с datasheet, чем копать чужую библиотеку на ардуино)
@@Solderingironspb понятно, что не получится не зная пальцем в небо если
На практике же после просмотра многочисленных роликов подошёл только предложенный автором способ, за что ему большое спасибо, текущей датой является 12.06.2021, у меня стоит Windows 10 Home, по итогу всё заработало, единственное, драйвера сразу не заработали, пришлось перезагружать ноутбук в режим восстановлния с отключением проверки цифровой подписи драйверов, по итогу всё заработало, а после же обычной перезагрузки драйвера остались на своих местах, всем дочитавшим до этого места мои искринние пожелания хорошего дня.
Спасибо большое тебе за твой труд!!!
stm32cube ide c++ поддерживает ? я привык на ++ в atmel studio
if (HAL_GetTick() - T >= 2000){
T = HAL_GetTick();
flag = !flag;
}
HAL_GPIO_WritePin(GPIOC, LED_Pin, flag);
Так не проще?
Не знаю как в хале, но вроде тоже есть. Но в LL есть такое как LL_GPIO_TogglePin и на несколько строк будет меньше ))
Проясните, пожалуйста, момент. Как у вас получается перепрошивать МК (нажимая F11), при этом не переставляя на плате STM32 желтый коннектор ( переход в режим переноса данных)? У меня при нажатии F11 всегда вылазила ошибка, полез искать причину, наткнулся на видео, где объяснили, что необходимо переставить коннектор, перепрошить и вернуть в начальное положение коннектор. Сделал процедуру, всё заработало. Но я не понимаю, как вы обходитесь без этого?
Не сталкивался с данной проблемой…а перемычки стоят, как у меня?
да, в точности как у вас. @@Solderingironspb
@user-uh9fp7nh7w очень странно…
А это точно первое видео? Как будто с середины начинается.
Здравствуйте!) да, это первое видео. Просто начальное вступление отсутствует) если смущает начало то поясню: при работе с ардуино, мы привыкли работать не с портами, а с пинами, ведь ардуино - это надстройка. Но если мы возьмем просто мк atmega328p, который в той же uno, nano и взглянем на него даташит, то привычных D1, D2, A1 и т.д. мы не увидим. С портами на ардуино знакомятся тогда, когда начинают работать с регистрами, дабы обойти ардуиновскую прослойку. Допустим D13 - это PB5(порт B, нога 5). A1 - это PC1(порт C, нога 1).
Что за милис?
Спасибо. А есть по регистрам ознакомительные видео?
у меня есть цикл по CMSIS
Еще говорят, что stm32 интересней. Еще ни строчки кода по делу, а текста на пол кило создано. Ну каждому свое. И явно, эти камни не для блинка, а более загруженных и сложных проэктов. А для начинающих, если надо больше портов и mega пойдет и код писать проще.
Почему не CubeIDE? Это же от самого STM, да и еще объединение atolic и CubeMX в которых ты и работаешь.
Во всех уроках, начиная с 8, я перешел уже на CubeIDE. Работаю сейчас в нем)
Если я не ошибаюсь, то работать с STM 32 можно из Arduino IDE. По-моему, так удобнее и привычнее. Что думаете вы?
Думаю, что это полная фигня, т.к. Вы не продвинетесь дальше рядового ардуинщика. Будете топтаться на месте и не познаете всех фич данных МК. Плюс Вы будете привязаны только к определенным камням, что тоже беда...
@@Solderingironspb не спорю
Но! Для моих случаев нужна Arduino, но мощности ATMega 328 явно не хватает. А STM 32 имеет большую вычислительную мощность, нежели Arduino Mega.
Не знаю, как вам, но мне нет необходимости управлять отдельными регистрами. Если будет не хватать мощности, то я просто куплю себе что-то мощнее. Ну и конечно, не забываем про оптимизацию кода
@@Ilya_G интересно, что за проекты у вас такие, что 328 не хватает? У меня на ней висит энкодер, дисплей 1602, датчики СО2 и BMEшка и Ds3231. И всё работает. Диспетчер это всё прокручивает, в сон укладывает, часы каждые полчаса пробуждают, или по нажатию энкодера. Правда, конечно, если дисплей графический повесить, то уже флэша не хватает. Я кстати начинал с атмел студио и причём с ассемблера, теперь на плюсах, но не ардуино иде, а визуал студио. Думаю обратно чтоль пересесть. Уж больно отладчик-симулятор удобный.
После Atmel studio все какое то не наглядное, подсветки текста нет, много лишних комментариев в коде.
Очень повышают порог вхождения.
Почему при вводе flag=1 выдаёт ошибку, я не могу дальше начать работать(
ставьте два знака равно ==
Подскажите аналог micros(). Спасибо.
На данный момент сам ищу ответ на этот вопрос. Есть на stm32 режим захвата. Это два прерывания между событиями. Вот там время в микросекундах измеряется. Т.е. если работать с теми же энкодерами(как пример - замер скорости вращения вала двигателя), то должно сработать.
На регистрах класс
Спасибо
Подскажите как устранить эту ошибку ide " st-link server is required to launch the debug session "
Это на windows такое вылезло?
@@Solderingironspb Да это на windows. Может быть из-за обновления драйверов st-link-v2? И ещё драйвера не скачиваются с официального сайта. STM32 ST-LINK Utility прошивает.
Если использовать таймер милисекунд на STM, он независим и все выводы будут доступны для работы? или как в Ардуйне некоторые выводы уже не работают из за уже использующегося таймера функцией миллис.
Если честно, не задавался таким вопросом...
Пользуем сустик и все он независим.
Почему они не используют плюсы? Зачем эти сложности с постоянным дописыванием HAL_ в начале функции когда можно было просто создать какой нибудь класс где уже все эти функции были готовы с автоподстановкой, в чем смысл ide если ручками все делать надо.
Потому что, как правило, в Embedded все пишется на Си
Объясните пожалуста, почему у меня происходит следующее: я задал "HAL_Delay(1000)" тобеш 1000мс, а у меня индикатор включается и выключается на 3с (около того, я засекал даже) ?
Здравствуйте. Если сбросите проект, то так легче будет помочь. МК STM32F103C8T6?
@@Solderingironspb у меня stm32f411vet6, спасибо что отреагировали, я уже нашел проблему!
@@zikzakleague119 там вроде частота влияет ещё, частотой исправили?
@@masterkit9517 да там входную частоту я задал 8МГц, и это как раз помогло.(по умолчанию было максимум - 25МГц)
Всем привет. Поясните, пожалуйста, как интегригровать atollic в cubemx? Я когда выбираю Toolchain/IDE, то у меня нет выбора TrueStudio, хотя он и установлен. Тормознулся уже на этом месте(((((, хэлп, плиз!!!
Привет) atollic уже все. Не обслуживается. Забудьте про него. Ставьте CubeIDE)
Уже стоит, просто хотелось пройтись по урокам, а то пока шаг влево, шаг вправо - везде какие-то ошибки, и не могу запустить.
@@Solderingironspb
@@user-qz1mh8dm2r ну разницы по работе с видеоуроками, используя CubeIDE быть не должно
Понял, спасибо за помощь!@@Solderingironspb
А у меня светодиод не за моргал( Либо так быстро моргает ,что глаза не замечают)
все ок , я разобрался)
@Peacefull_ я не помню уже
Зачем два одинаковых if? ruclips.net/video/wvOIsZvOJIk/видео.html
flag = 1 - flag; и все.. Ну и коли он bool то flag = !flag, или тут так не работает?
Ну да, и второй if выполнится кажется всегда..
С флагом затупил, сорян)) естественно if/else можно.
в С нет булево значения. если вы посмотрите stdbool.h, то там всего лишь
#define true 1
#define false 0
поэтому flag = !flag не прокатит.
а вот if (flag == 1) - это какая-то жуть. должно быть if (flag)... и с присвоением тоже вместо flag = 1 лучше писать flag = true. это повышает читаемость кода.
flag = 1 подразумевает то, что flag - это битовый флаг, а не булево.
write(uint8_t flag ^ 1)
delay(num)
А сами разработчики чего курили чтоб такой длиномер воткнуть в ПО. Толи Ардуино, пару строк и готово, а на stm кучу строк длиной в километр, и то если упомнишь.
Не понимаю чья вина и зачем так делают.
Вы показываете в уроке на 3:50 что пины определяются в файле main.c но я в обновленном CubeMX генерирую код и получаю три файла - main.c main.h и gpio.h
И как раз определение пинов делают в файле gpio.h
Также Atolic куплен CubeIDE и по сути одно и тоже.
То ли вы не до конца настроили Atollic для урока, то ли производитель ST меняет свои продукты и подходы к программированию каждый код.
Но по итогу все это ох как запутывает новичка, и не только новичка в том же ардуино...
Добрый день!
В CubeMX, в разделе Project Manager -> Code Generator -> Generated files: уберите галку с Generate peripheral initialization as a pair of ".c/.h" files per peripheral.
По умолчанию она выключена всегда была. Не знаю, почему у Вас она активировалась...
@@Solderingironspb Сам включил генерацию двух файлов main.c и main.h
Вроде так "модно" в правильном коде.
А вообще после ардуино не понимаю, такой большой разрозненности файлов и библиотек. Также пока не нашел хорошего объяснения в уроках о структуре файлов в cube IDE.
Была бы полезна эта информация.
@@IvanEng747 Сами включили, а потом спрашиваете, чья вина :D)) Тут не то, что модно, сколько удобно бывает. А что именно Вам нужно по структуре файлов?
@@Solderingironspb Ну вот например, структура или точнее дерево в проекте, то что формирует CubeMX.
-Binaries
-Includes
-Core
-Drivers
-Debug
-Release
Ну и в каждой парке еще ветвление.
Например, я хочу сам без генератора кода писать программу, как на той в той же ардуино IDE.
По мере необходимости выносить какие то конструкции в отдельные файлы.
Да даже просто - какой то проект находишь в интернете на гитхабе, но не понимаешь как его импортировать правильно, чтобы зависимости с библиотеками сохранить и скомпилировать.
Все понятно до момента переименовывания пина в Led - не переименовывается и все тут.
После того, как назначили 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. Вот туда вписываете имя пина.
я.чайник-что.дает.этот.переход???????????
Смотря какие цели вы преследуете...
Во первых - у вас начнется вкачка в программировании. Вы начнете наконец-то думать что и как устроено. Начнете читать книги. Вникать в язык Си. По другому будете смотреть на программирование МК.
Во вторых - вы получаете МК, который во много раз мощней той же Atmega328p, что стоит в arduino uno.
Еще и стоит дешевле. Куча периферии. DMA. и прочие радости для разработчика.
вместо else if (!flag) просто else 🙈
Да, задумка класная, но разрабы проги "перестарались", зачем писать этот бесполезный HAL каждый раз? если вывод в начале определен как выход, ему присвоено имя, нах все прописывать, все должно быть автоматом - пишешь: присвоить Led - 1 и все! какой смысл в этом веб интерфейсе если все равно все ручками прописывать?
Как точно сказано " даем в отладку суриал вайер" а что это текое и где включается -ни звука..Сижу- смоттрю на ноги и ничего на понимаю..... Курс для насинающих!!!!