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