Все работает отлично. Я не уничтожал код а его копировал и добавлял. В результате еще веселее смотрится программа и возможность разных вариантов включения порта. В последнем коде светодиоды загораются по часовой стрелке и против. Немного неточность в конце урока.
Спасибо за уроки, сейчас вспоминаю STM32. Когда-то давно баловался с SPL, сейчас придется привыкать к HAL. Поэтому Ваше видео как нельзя к стати. Странно, что у Вас не работают подсказки в Keil, у меня 5.2 и все отлично. Выбор появляется после 3-го введенного символа.
Даже не знаю сколь велика будет серия. Это как загуляется. Зависит от моей фантазии, от наличия времени и различных компонентов. Все что в моих силах, сделаю.
Если мне нужно инициализировать только PIN9 порта Е например в output и не инициализировать остальные пины этого порта, то выглядит это так: GPIOE->MODER |= 1
В любом stm32 есть RTC который может запитываться от батарейки, причем запитывается не только сам RTC, но и некоторая часть SRAM и некоторые регистры (количество зависит от вашей модели микроконтроллера), так вот эти ячейки памяти вы можете использовать для хранения каких-то переменных или настроек.
Спасибо! играю с stm32F429i discovery, полдня пытался понять почему лампочки не моргают, в итоге программа обновляется только после нажатия ресета... ))) А в Си нет встроенного delay? кажется когда-то в студенчестве она была...
С дефайнами не очень понял. Изначально в соответствующий регистр прописывали нужное двоичное число (представленное правда в шестнадцатиричной форме) типа GPIOD->ODR = 0xC000; теперь мы с помощью дефайнов, как я понимаю, заменяем идентифиры типа PORTD0, PORTD1...итд на токены 1,2,3...и т д. затем в основной программе вместо шестнадцатиричного числа подставляем идентифир (например PORT12) и совершаем битовый сдвиг влево. Как при этом в регистре оказывается нужное двоичное число непонятно. Может подскажете куда глянуть?
Здравствуйте! Ну, отдельно именно на эту плату нет. Но с использованием есть. практически все последние уроки по LAN-модулю ENC28J60 выходят с использованием именно такой платы. Просто дело в том, что чем сложнее уроки, тем более не важным становится, какой именно контроллер и какую плату мы используем в уроке.
Здравтсвуйте! Смотрите уроки по программированию на СИ. Как раз мы недавно выводили в консоль различные типы данных. Диапазон int: от -2147483648 до 2147483647.
Уже просмотрел ваши уроки по Кубу. И немного разочаровало меня происшествие с FreeRTOS. Выходит МК и операционка не поддерживают аппаратную многозадачность, а сделано банально на ручном переключение между задачами. Вам приходило в голову сделать хотя бы по таймеру переключение между задачами?
Ну это же не процессор с модулем виртуальной памяти и с несколькими раздельными ядрами. Уже и так хорошо. Раньше мы и об этом лет 20 назад мечтать не могли, когда работали с контроллерами. А в голову мою много чего приходит. И стараюсь её сразу освобождать, делясь всеми этими мыслями с вами.
+Дмитрий Попов Это на первых занятиях только. Затем будет конечно в отдельных файлах. В хедерах только дефайны, инклуды и прототипы. Сейчас суть не в этом. Ну и как раз мы увидим, что если функцию написать в заголовочном файле, то она также будет работать. Где-то с 4го занятия я конечно все вынесу уже в одноименные си-файлы. Ну и загромождать main.c я тоже не сторонник. Только вызов функций инициализации и бесконечный цикл.
А может есть материалы по 16тиричным числам для 32 разрядных процессоров ? то я не пойму в видео для меня как колдовство эти цифры мои команды по включению пинов выглядят так GPIOC ->ODR|=(1
Ошибки нет никакой. Просто я не понял как ваш код работает. как я понял #define PORTD12 12 #define PORTD13 13 Это замена идентификаторов PORTD12 и PORTD13 на числа 12 и 13 соответственно. затем GPIOD->ODR = (1
повторил код до места где просто лампочки по кругу идут(в итоге горят зелёный, красный и оранжевый светодиод, а должны меняться по кругу). Вообще не понятно где ошибка
@@smidani8132 Оптимизация решает несколько задач, одна из них это ускорение выполнения кода за счет того что компилятор включает свои "мозги" и корректирует код на свое усмотрение.
Применив этот первый код. Диоды горят все вместе не в полную силу(синий горит слабее всех), только после нажатия черной кнопки. До этого работал на micropython подключал датчик. Флеш-память очистил. Подскажите кто-нибудь, что может быть не так? Еще при отдельном зажигании диодов. Не горит красный диод. Вместо него загораентся зеленый.
Тоже не могу понять светодиоды горят тускло синий всех слабее горит. Что сделать чтобы исправить? не могу понять. По урокам вроде все хорошо, но пол урока ползать по папкам копировать и прочее это сбивает.
у вас при запуске сборки почему-то пересобираются файлы Сишные, которые не менялись!!! КАЖДЫЙ РАЗ!!! это "фича" такая у кейла что ли? или что-то в компиляторе неправильно настроено??
К регистрам периферии (порт ввода-вывода) можно обращаться через адрес напрямую, тогда код будет непонятным, из звездочек скобочек и магических чисел. Это как писать адрес проживания через GPS координаты. А можно косвенно, с помощью структуры, тогда адрес будет вычислен от базового через несколько шагов, зато код будет ясный и понятный (город/улица/дом/кв). Структура для каждого типа периферии своя, у stm эти структуры описаны в общем *.h файле на каждый МК.
20 лет назад видел такого учителя - "давайте напишем так, а нет, вот так,Раз и переключил". И так постоянно, больше похоже на запутывание, чем на обучение.
Зачем вы так хардкодите задержку тактами? Это очень плохо и нельзя так учить в уроках. Ваш код будет не правильно работать на разных частотах. Тем более что в микроконтроллере есть RTC часы реального времени, то есть уже готовый таймер.
Это один из вариантов, он не самый лучший, но для начинающих так понятнее, в более поздних уроках, особенно там, где важно процессорное время, мы конечно так делать не будем. А RTC не имеет смысл подключать для бегущих огней. Это серьёзная периферия и она создавалась не совсем для этого. Достаточно таймеров вполне.
@@user-px4tj9cp9u Тоже самое было, помог комент vadoooos сверху: пкм по "target 1" ==> Options ==> вкладка "C/C++ (AC6)" ==> Слева ищи "Optimization" и выбирай -О 0. Потом пересобрать проект и все заработает
я конечно самый первый крикун что кейл гавно полное, но даже мне кажется что отсутствие интелли сенса вроде полнейший зашквар уже... всё таки мне кажется должна быть подсказка иначе совсем непонятно как работать то в нём ))
Спасибо Вам огромное за Ваши уроки.
И Вам спасибо за внимание к каналу!
Все получилось, спасибо!
Огромное спасибо!
Все работает отлично. Я не уничтожал код а его копировал и добавлял. В результате еще веселее смотрится программа и возможность разных вариантов включения порта. В последнем коде светодиоды загораются по часовой стрелке и против. Немного неточность в конце урока.
Аааа!
Все. Теперь понял. )))
Смотреть лучше на скорости x1.5.
Жаль что нет 1.75, на x2 не смотрабельно
Спасибо за уроки, сейчас вспоминаю STM32. Когда-то давно баловался с SPL, сейчас придется привыкать к HAL. Поэтому Ваше видео как нельзя к стати.
Странно, что у Вас не работают подсказки в Keil, у меня 5.2 и все отлично. Выбор появляется после 3-го введенного символа.
лайк))))
Отличные уроки, хотелось бы урокои по работе без использования библиотек SPL, HAL.
1 марта выйдет первое видео по LL.
Занятия конечно нужны, серия планируется большая? Давайте больше объяснений, не ЗАЧЕМ вы так написали код , а ПОЧЕМУ именно так...
Даже не знаю сколь велика будет серия. Это как загуляется. Зависит от моей фантазии, от наличия времени и различных компонентов. Все что в моих силах, сделаю.
Если мне нужно инициализировать только PIN9 порта Е например в output и не инициализировать остальные пины этого порта, то выглядит это так: GPIOE->MODER |= 1
Хотел уточнить, когда мы пишем строку "GPIOD -> ODR = (1
У стм можно по-всякому, там 2 разных регистра, типа как набор кнопок с фиксацией и без.
у меня вопрос есть две библиотеки. ну я вашим урокам увидел HAL и SPL /какая лучше.?
Насколько я знаю, все на HAL переходят
Второй вопрос Stm32 есть ли внутрениий EEProm и как реализовать сохранение данных? Есть ли библиотека?как в atmel studio
В любом stm32 есть RTC который может запитываться от батарейки, причем запитывается не только сам RTC, но и некоторая часть SRAM и некоторые регистры (количество зависит от вашей модели микроконтроллера), так вот эти ячейки памяти вы можете использовать для хранения каких-то переменных или настроек.
В контроллерах L-серии (малопотребляющей) кажется есть встроенный еепром.
Спасибо! играю с stm32F429i discovery, полдня пытался понять почему лампочки не моргают, в итоге программа обновляется только после нажатия ресета... ))) А в Си нет встроенного delay? кажется когда-то в студенчестве она была...
нету, вместо delay в Си используют for(i = 0; i < ...; i++) {}
нету, вместо for(i = 0; i < ...: i++) {} используют таймеры
С дефайнами не очень понял.
Изначально в соответствующий регистр прописывали нужное двоичное число (представленное правда в шестнадцатиричной форме)
типа
GPIOD->ODR = 0xC000;
теперь мы с помощью дефайнов, как я понимаю, заменяем идентифиры типа PORTD0, PORTD1...итд на токены 1,2,3...и т д. затем в основной программе вместо шестнадцатиричного числа подставляем идентифир (например PORT12) и совершаем битовый сдвиг влево.
Как при этом в регистре оказывается нужное двоичное число непонятно.
Может подскажете куда глянуть?
Ошибка какая? Не понял я на Вашем сленге.
#define PORTD2 2
GPIOD->ODR = (1
Добрый день. А у Вас есть уроки по плате stm32f103? Заранее благодарю
Здравствуйте!
Ну, отдельно именно на эту плату нет. Но с использованием есть. практически все последние уроки по LAN-модулю ENC28J60 выходят с использованием именно такой платы. Просто дело в том, что чем сложнее уроки, тем более не важным становится, какой именно контроллер и какую плату мы используем в уроке.
в 5 кейле есть проблема дилей такой не работает, компилятор оптимизирует и пропускает ничего не делающий код
здравствуйте скажите почему число 2000000 помещается в тип int в функции delay
Здравтсвуйте!
Смотрите уроки по программированию на СИ. Как раз мы недавно выводили в консоль различные типы данных.
Диапазон int: от -2147483648 до 2147483647.
А почему не используете CubeMX для генерации проекта и настройки МК?
А Вы все уроки канала по STM посмотрели?
Уже просмотрел ваши уроки по Кубу.
И немного разочаровало меня происшествие с FreeRTOS.
Выходит МК и операционка не поддерживают аппаратную многозадачность, а сделано банально на ручном переключение между задачами.
Вам приходило в голову сделать хотя бы по таймеру переключение между задачами?
Ну это же не процессор с модулем виртуальной памяти и с несколькими раздельными ядрами. Уже и так хорошо. Раньше мы и об этом лет 20 назад мечтать не могли, когда работали с контроллерами.
А в голову мою много чего приходит. И стараюсь её сразу освобождать, делясь всеми этими мыслями с вами.
А зачем вы пишите функции в заголовочном файле? Не лучше тогда уж сделать отдельный .с файл или тогда все в main писать.
+Дмитрий Попов
Это на первых занятиях только. Затем будет конечно в отдельных файлах. В хедерах только дефайны, инклуды и прототипы. Сейчас суть не в этом. Ну и как раз мы увидим, что если функцию написать в заголовочном файле, то она также будет работать. Где-то с 4го занятия я конечно все вынесу уже в одноименные си-файлы. Ну и загромождать main.c я тоже не сторонник. Только вызов функций инициализации и бесконечный цикл.
+narod stream Спасибо за полный ответ. Я тоже сейчас программирую на F4 очень интересно смотреть ваши видео может узнаю чего раньше не знал))
А в двоичной системе компилятор не понимает? Тут было бы удобнее написать типа 0b1100, а не в шестнадцатеричной форме.
Маленькая помарка: GPIOD->OTYPER не за резисторы отвечает
А за что ?
А может есть материалы по 16тиричным числам для 32 разрядных процессоров ? то я не пойму в видео для меня как колдовство эти цифры мои команды по включению пинов выглядят так GPIOC ->ODR|=(1
@@LinArt Битовые и логические операции гораздо нагляднее, компилятор все равно преобразует вашу запись из битовых операций в одно число.
Ошибки нет никакой. Просто я не понял как ваш код работает.
как я понял
#define PORTD12 12
#define PORTD13 13
Это замена идентификаторов PORTD12 и PORTD13 на числа 12 и 13 соответственно.
затем
GPIOD->ODR = (1
Многие понимают наоборот
Сдвигаемое чило всегда справа, то есть стоит первым, потом направление, а потом значение сдвига
Я же вае рассказывал
Поэтоме сдвигаем мы всегда единицу
В данном случае на 12 и на 13 пунктов
повторил код до места где просто лампочки по кругу идут(в итоге горят зелёный, красный и оранжевый светодиод, а должны меняться по кругу). Вообще не понятно где ошибка
У меня было то же самое пока не выставил в настройках опций оптимизацию на ноль.
@@user-ox7qz8wv3r а где это выставить?
@@ilba8700 пкм по "target 1" ==> Options ==> вкладка "C/C++ (AC6)" ==> Слева ищи "Optimization" и выбирай -О 0
@@user-ox7qz8wv3r на что влияет оптимизация?
@@smidani8132 Оптимизация решает несколько задач, одна из них это ускорение выполнения кода за счет того что компилятор включает свои "мозги" и корректирует код на свое усмотрение.
Применив этот первый код. Диоды горят все вместе не в полную силу(синий горит слабее всех), только после нажатия черной кнопки. До этого работал на micropython подключал датчик. Флеш-память очистил. Подскажите кто-нибудь, что может быть не так? Еще при отдельном зажигании диодов. Не горит красный диод. Вместо него загораентся зеленый.
Была аналогичная ситуация, я перезалил файлы .h с папки inc и тогда заработало нормально!
@@user-yi7pc3sf1w благодарю за отклик. Я через настройки
исправил тогда.
@@user-sd4pv6bc8v а у Вас как через настройки получилось исправить?
Тоже не могу понять светодиоды горят тускло синий всех слабее горит. Что сделать чтобы исправить? не могу понять.
По урокам вроде все хорошо, но пол урока ползать по папкам копировать и прочее это сбивает.
@@user-yi7pc3sf1w а как перезалили? не могу понять все тоже самое
у вас при запуске сборки почему-то пересобираются файлы Сишные, которые не менялись!!! КАЖДЫЙ РАЗ!!!
это "фича" такая у кейла что ли? или что-то в компиляторе неправильно настроено??
автор прототипы функций не в хидеры кинул а в сишные файлы.
Не до конца понятна конструкция "->". Как я понял, это работа со структурой через указатель. Но, здесь не совсем понятно как...
К регистрам периферии (порт ввода-вывода) можно обращаться через адрес напрямую, тогда код будет непонятным, из звездочек скобочек и магических чисел. Это как писать адрес проживания через GPS координаты. А можно косвенно, с помощью структуры, тогда адрес будет вычислен от базового через несколько шагов, зато код будет ясный и понятный (город/улица/дом/кв). Структура для каждого типа периферии своя, у stm эти структуры описаны в общем *.h файле на каждый МК.
20 лет назад видел такого учителя - "давайте напишем так, а нет, вот так,Раз и переключил". И так постоянно, больше похоже на запутывание, чем на обучение.
Зачем вы так хардкодите задержку тактами? Это очень плохо и нельзя так учить в уроках. Ваш код будет не правильно работать на разных частотах. Тем более что в микроконтроллере есть RTC часы реального времени, то есть уже готовый таймер.
Это один из вариантов, он не самый лучший, но для начинающих так понятнее, в более поздних уроках, особенно там, где важно процессорное время, мы конечно так делать не будем. А RTC не имеет смысл подключать для бегущих огней. Это серьёзная периферия и она создавалась не совсем для этого. Достаточно таймеров вполне.
И где DMA и прерывания? Вы сами начинали изучать микроконтроллеры с RTC ? Браво! Рассмешили! А автору огромное спасибо!
@@narodstream552 у меня почему-то горят все 4 лампочки, а не по 1 или по 2, видимо из-за этого или почему? Я полностью повторил код до середины((
@@user-px4tj9cp9u Добрый вечер! Получилось исправить?
@@user-px4tj9cp9u Тоже самое было, помог комент vadoooos сверху: пкм по "target 1" ==> Options ==> вкладка "C/C++ (AC6)" ==> Слева ищи "Optimization" и выбирай -О 0. Потом пересобрать проект и все заработает
прототипы лишнее...
я конечно самый первый крикун что кейл гавно полное, но даже мне кажется что отсутствие интелли сенса вроде полнейший зашквар уже... всё таки мне кажется должна быть подсказка иначе совсем непонятно как работать то в нём ))
стм 32 гавнище! куча лишних движений там где они не нужны. В мусор!
А что по вашему не "гавнище" ?
Посмотрите курсы, где через регистры учат работать. Здесь реально много лишнего, особенно если начинать через HAL и CUBE.