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