Программирование МК STM32. УРОК 2. Бегущие огни

Поділитися
Вставка
  • Опубліковано 27 вер 2024

КОМЕНТАРІ • 78

  • @AVKrobotics
    @AVKrobotics 6 років тому

    Все работает отлично. Я не уничтожал код а его копировал и добавлял. В результате еще веселее смотрится программа и возможность разных вариантов включения порта. В последнем коде светодиоды загораются по часовой стрелке и против. Немного неточность в конце урока.

  • @Wasteomindy
    @Wasteomindy 7 років тому +11

    Смотреть лучше на скорости x1.5.
    Жаль что нет 1.75, на x2 не смотрабельно

  • @dimmid4109
    @dimmid4109 8 років тому +3

    Занятия конечно нужны, серия планируется большая? Давайте больше объяснений, не ЗАЧЕМ вы так написали код , а ПОЧЕМУ именно так...

    • @narodstream552
      @narodstream552  8 років тому +4

      Даже не знаю сколь велика будет серия. Это как загуляется. Зависит от моей фантазии, от наличия времени и различных компонентов. Все что в моих силах, сделаю.

  • @merv8543
    @merv8543 5 років тому +1

    Отличные уроки, хотелось бы урокои по работе без использования библиотек SPL, HAL.

    • @narodstream552
      @narodstream552  5 років тому +2

      1 марта выйдет первое видео по LL.

  • @М_М-е8в
    @М_М-е8в 3 роки тому

    Огромное спасибо!

  • @barkas2589
    @barkas2589 4 роки тому

    Все получилось, спасибо!

  • @smidani8132
    @smidani8132 3 роки тому +2

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

    • @СергейГончаров-э4г
      @СергейГончаров-э4г 3 роки тому +1

      У меня было то же самое пока не выставил в настройках опций оптимизацию на ноль.

    • @ilba8700
      @ilba8700 3 роки тому +1

      @@СергейГончаров-э4г а где это выставить?

    • @vados1y652
      @vados1y652 3 роки тому +2

      @@ilba8700 пкм по "target 1" ==> Options ==> вкладка "C/C++ (AC6)" ==> Слева ищи "Optimization" и выбирай -О 0

    • @smidani8132
      @smidani8132 3 роки тому

      @@СергейГончаров-э4г на что влияет оптимизация?

    • @СергейГончаров-э4г
      @СергейГончаров-э4г 3 роки тому

      @@smidani8132 Оптимизация решает несколько задач, одна из них это ускорение выполнения кода за счет того что компилятор включает свои "мозги" и корректирует код на свое усмотрение.

  • @jdm_jzs141
    @jdm_jzs141 Рік тому +1

    в 5 кейле есть проблема дилей такой не работает, компилятор оптимизирует и пропускает ничего не делающий код

  • @ДмитроПерший
    @ДмитроПерший 6 років тому +1

    Хотел уточнить, когда мы пишем строку "GPIOD -> ODR = (1

    • @dazzershell
      @dazzershell 4 роки тому +1

      У стм можно по-всякому, там 2 разных регистра, типа как набор кнопок с фиксацией и без.

  • @TheLongolier
    @TheLongolier 7 років тому +2

    С дефайнами не очень понял.
    Изначально в соответствующий регистр прописывали нужное двоичное число (представленное правда в шестнадцатиричной форме)
    типа
    GPIOD->ODR = 0xC000;
    теперь мы с помощью дефайнов, как я понимаю, заменяем идентифиры типа PORTD0, PORTD1...итд на токены 1,2,3...и т д. затем в основной программе вместо шестнадцатиричного числа подставляем идентифир (например PORT12) и совершаем битовый сдвиг влево.
    Как при этом в регистре оказывается нужное двоичное число непонятно.
    Может подскажете куда глянуть?

    • @narodstream552
      @narodstream552  7 років тому

      Ошибка какая? Не понял я на Вашем сленге.

    • @CanchezAK
      @CanchezAK 5 років тому +2

      #define PORTD2 2
      GPIOD->ODR = (1

  • @dev_zloi
    @dev_zloi 8 років тому +5

    А зачем вы пишите функции в заголовочном файле? Не лучше тогда уж сделать отдельный .с файл или тогда все в main писать.

    • @narodstream552
      @narodstream552  8 років тому +4

      +Дмитрий Попов
      Это на первых занятиях только. Затем будет конечно в отдельных файлах. В хедерах только дефайны, инклуды и прототипы. Сейчас суть не в этом. Ну и как раз мы увидим, что если функцию написать в заголовочном файле, то она также будет работать. Где-то с 4го занятия я конечно все вынесу уже в одноименные си-файлы. Ну и загромождать main.c я тоже не сторонник. Только вызов функций инициализации и бесконечный цикл.

    • @dev_zloi
      @dev_zloi 8 років тому +1

      +narod stream Спасибо за полный ответ. Я тоже сейчас программирую на F4 очень интересно смотреть ваши видео может узнаю чего раньше не знал))

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 6 років тому +1

    Второй вопрос Stm32 есть ли внутрениий EEProm и как реализовать сохранение данных? Есть ли библиотека?как в atmel studio

    • @yukhnevich
      @yukhnevich 6 років тому +1

      В любом stm32 есть RTC который может запитываться от батарейки, причем запитывается не только сам RTC, но и некоторая часть SRAM и некоторые регистры (количество зависит от вашей модели микроконтроллера), так вот эти ячейки памяти вы можете использовать для хранения каких-то переменных или настроек.

    • @dazzershell
      @dazzershell 4 роки тому

      В контроллерах L-серии (малопотребляющей) кажется есть встроенный еепром.

  • @Vivavatnik
    @Vivavatnik 7 років тому +1

    Спасибо! играю с stm32F429i discovery, полдня пытался понять почему лампочки не моргают, в итоге программа обновляется только после нажатия ресета... ))) А в Си нет встроенного delay? кажется когда-то в студенчестве она была...

    • @slavik5375
      @slavik5375 7 років тому +2

      нету, вместо delay в Си используют for(i = 0; i < ...; i++) {}

    • @enderman4
      @enderman4 6 років тому +3

      нету, вместо for(i = 0; i < ...: i++) {} используют таймеры

  • @alekseybazilevich1368
    @alekseybazilevich1368 4 роки тому +1

    Если мне нужно инициализировать только PIN9 порта Е например в output и не инициализировать остальные пины этого порта, то выглядит это так: GPIOE->MODER |= 1

  • @TheLongolier
    @TheLongolier 7 років тому +1

    Ошибки нет никакой. Просто я не понял как ваш код работает.
    как я понял
    #define PORTD12 12
    #define PORTD13 13
    Это замена идентификаторов PORTD12 и PORTD13 на числа 12 и 13 соответственно.
    затем
    GPIOD->ODR = (1

    • @narodstream552
      @narodstream552  7 років тому

      Многие понимают наоборот
      Сдвигаемое чило всегда справа, то есть стоит первым, потом направление, а потом значение сдвига

    • @narodstream552
      @narodstream552  7 років тому +4

      Я же вае рассказывал
      Поэтоме сдвигаем мы всегда единицу
      В данном случае на 12 и на 13 пунктов

  • @юрий-я2с2ч
    @юрий-я2с2ч 5 років тому

    здравствуйте скажите почему число 2000000 помещается в тип int в функции delay

    • @narodstream552
      @narodstream552  5 років тому

      Здравтсвуйте!
      Смотрите уроки по программированию на СИ. Как раз мы недавно выводили в консоль различные типы данных.
      Диапазон int: от -2147483648 до 2147483647.

  • @Дмитрийсергеевич-о9п

    у вас при запуске сборки почему-то пересобираются файлы Сишные, которые не менялись!!! КАЖДЫЙ РАЗ!!!
    это "фича" такая у кейла что ли? или что-то в компиляторе неправильно настроено??

    • @electrod9041
      @electrod9041 4 роки тому

      автор прототипы функций не в хидеры кинул а в сишные файлы.

  • @АртемКарпов-я2з
    @АртемКарпов-я2з 7 років тому

    Добрый день. А у Вас есть уроки по плате stm32f103? Заранее благодарю

    • @narodstream552
      @narodstream552  7 років тому

      Здравствуйте!
      Ну, отдельно именно на эту плату нет. Но с использованием есть. практически все последние уроки по LAN-модулю ENC28J60 выходят с использованием именно такой платы. Просто дело в том, что чем сложнее уроки, тем более не важным становится, какой именно контроллер и какую плату мы используем в уроке.

  • @yukhnevich
    @yukhnevich 6 років тому +7

    Зачем вы так хардкодите задержку тактами? Это очень плохо и нельзя так учить в уроках. Ваш код будет не правильно работать на разных частотах. Тем более что в микроконтроллере есть RTC часы реального времени, то есть уже готовый таймер.

    • @narodstream552
      @narodstream552  6 років тому +5

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

    • @vitalivit8701
      @vitalivit8701 5 років тому +1

      И где DMA и прерывания? Вы сами начинали изучать микроконтроллеры с RTC ? Браво! Рассмешили! А автору огромное спасибо!

    • @НиколайКрасиков-ы8й
      @НиколайКрасиков-ы8й 4 роки тому +4

      @@narodstream552 у меня почему-то горят все 4 лампочки, а не по 1 или по 2, видимо из-за этого или почему? Я полностью повторил код до середины((

    • @ЯрославГоловань-я8д
      @ЯрославГоловань-я8д 4 роки тому

      @@НиколайКрасиков-ы8й Добрый вечер! Получилось исправить?

    • @IliveInAlmaty
      @IliveInAlmaty 3 роки тому

      @@НиколайКрасиков-ы8й Тоже самое было, помог комент vadoooos сверху: пкм по "target 1" ==> Options ==> вкладка "C/C++ (AC6)" ==> Слева ищи "Optimization" и выбирай -О 0. Потом пересобрать проект и все заработает

  • @vladimirrogovoj9949
    @vladimirrogovoj9949 5 років тому +3

    20 лет назад видел такого учителя - "давайте напишем так, а нет, вот так,Раз и переключил". И так постоянно, больше похоже на запутывание, чем на обучение.

  • @Gerotero-r1o
    @Gerotero-r1o 3 роки тому

    Применив этот первый код. Диоды горят все вместе не в полную силу(синий горит слабее всех), только после нажатия черной кнопки. До этого работал на micropython подключал датчик. Флеш-память очистил. Подскажите кто-нибудь, что может быть не так? Еще при отдельном зажигании диодов. Не горит красный диод. Вместо него загораентся зеленый.

    • @АнтонГореев
      @АнтонГореев 3 роки тому +1

      Была аналогичная ситуация, я перезалил файлы .h с папки inc и тогда заработало нормально!

    • @Gerotero-r1o
      @Gerotero-r1o 3 роки тому

      @@АнтонГореев благодарю за отклик. Я через настройки
      исправил тогда.

    • @АнтонГореев
      @АнтонГореев 3 роки тому

      @@Gerotero-r1o а у Вас как через настройки получилось исправить?

    • @АлексейАверин-й1у
      @АлексейАверин-й1у Рік тому

      Тоже не могу понять светодиоды горят тускло синий всех слабее горит. Что сделать чтобы исправить? не могу понять.
      По урокам вроде все хорошо, но пол урока ползать по папкам копировать и прочее это сбивает.

    • @АлексейАверин-й1у
      @АлексейАверин-й1у Рік тому

      @@АнтонГореев а как перезалили? не могу понять все тоже самое

  • @batonprog6560
    @batonprog6560 6 років тому +1

    Маленькая помарка: GPIOD->OTYPER не за резисторы отвечает

    • @LinArt
      @LinArt 6 років тому

      А за что ?

    • @LinArt
      @LinArt 6 років тому

      А может есть материалы по 16тиричным числам для 32 разрядных процессоров ? то я не пойму в видео для меня как колдовство эти цифры мои команды по включению пинов выглядят так GPIOC ->ODR|=(1

    • @dazzershell
      @dazzershell 4 роки тому

      @@LinArt Битовые и логические операции гораздо нагляднее, компилятор все равно преобразует вашу запись из битовых операций в одно число.

  • @ДмитроПерший
    @ДмитроПерший 6 років тому

    Не до конца понятна конструкция "->". Как я понял, это работа со структурой через указатель. Но, здесь не совсем понятно как...

    • @dazzershell
      @dazzershell 4 роки тому +1

      К регистрам периферии (порт ввода-вывода) можно обращаться через адрес напрямую, тогда код будет непонятным, из звездочек скобочек и магических чисел. Это как писать адрес проживания через GPS координаты. А можно косвенно, с помощью структуры, тогда адрес будет вычислен от базового через несколько шагов, зато код будет ясный и понятный (город/улица/дом/кв). Структура для каждого типа периферии своя, у stm эти структуры описаны в общем *.h файле на каждый МК.

  • @СергейВасильев-к9ж2ж

    прототипы лишнее...

  • @Дмитрийсергеевич-о9п

    я конечно самый первый крикун что кейл гавно полное, но даже мне кажется что отсутствие интелли сенса вроде полнейший зашквар уже... всё таки мне кажется должна быть подсказка иначе совсем непонятно как работать то в нём ))

  • @SIM31r
    @SIM31r 6 років тому +1

    А в двоичной системе компилятор не понимает? Тут было бы удобнее написать типа 0b1100, а не в шестнадцатеричной форме.

  • @alexhub5916
    @alexhub5916 8 років тому +1

    Спасибо за уроки, сейчас вспоминаю STM32. Когда-то давно баловался с SPL, сейчас придется привыкать к HAL. Поэтому Ваше видео как нельзя к стати.
    Странно, что у Вас не работают подсказки в Keil, у меня 5.2 и все отлично. Выбор появляется после 3-го введенного символа.

  • @АлексейНовиков-п3ъ
    @АлексейНовиков-п3ъ 7 років тому +2

    Спасибо Вам огромное за Ваши уроки.

    • @narodstream552
      @narodstream552  7 років тому

      И Вам спасибо за внимание к каналу!

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 6 років тому

    у меня вопрос есть две библиотеки. ну я вашим урокам увидел HAL и SPL /какая лучше.?

    • @DeckardTheBladeRunner
      @DeckardTheBladeRunner 6 років тому +1

      Насколько я знаю, все на HAL переходят

  • @DrargonsM
    @DrargonsM 8 років тому

    лайк))))

  • @TheLongolier
    @TheLongolier 7 років тому

    Аааа!
    Все. Теперь понял. )))

  • @AleksandrArtroom
    @AleksandrArtroom 7 років тому +4

    А почему не используете CubeMX для генерации проекта и настройки МК?

    • @narodstream552
      @narodstream552  7 років тому

      А Вы все уроки канала по STM посмотрели?

    • @AleksandrArtroom
      @AleksandrArtroom 7 років тому

      Уже просмотрел ваши уроки по Кубу.
      И немного разочаровало меня происшествие с FreeRTOS.
      Выходит МК и операционка не поддерживают аппаратную многозадачность, а сделано банально на ручном переключение между задачами.
      Вам приходило в голову сделать хотя бы по таймеру переключение между задачами?

    • @narodstream552
      @narodstream552  7 років тому +13

      Ну это же не процессор с модулем виртуальной памяти и с несколькими раздельными ядрами. Уже и так хорошо. Раньше мы и об этом лет 20 назад мечтать не могли, когда работали с контроллерами.
      А в голову мою много чего приходит. И стараюсь её сразу освобождать, делясь всеми этими мыслями с вами.

  • @ТанкистВася-и6ф
    @ТанкистВася-и6ф 4 роки тому

    стм 32 гавнище! куча лишних движений там где они не нужны. В мусор!

    • @pomidorka7699
      @pomidorka7699 4 роки тому

      А что по вашему не "гавнище" ?

    • @dazzershell
      @dazzershell 4 роки тому

      Посмотрите курсы, где через регистры учат работать. Здесь реально много лишнего, особенно если начинать через HAL и CUBE.