STM32. Урок 9. GPIO. Программирование портов ввода вывода GPIO. Скорость работы GPIO

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น • 164

  • @antonGoldinov
    @antonGoldinov ปีที่แล้ว +1

    Добра и счастья Вам автор видео!!!

    • @NRelectronics
      @NRelectronics  ปีที่แล้ว

      Спасибо Вам большое! Подписывайтесь на телеграм канал

  • @ДмитрийКарасёв-и2ч
    @ДмитрийКарасёв-и2ч 5 ปีที่แล้ว +12

    В своем уроке вы сказали, что для библиотеки HAL скорость вывода не имеет какого-либо практического применения, потому что значения LOW и HIGH не оказывают никакого влияния на частоту переключения вывода. Сейчас я перевожу книгу Carmine Noviello - Mastering STM32, в которой разбирается библиотека HAL. В главе 6 про GPIO в пункте "6.2.3 Understanding GPIO Speed" автор указывает на то, что очень многие неверно понимают понятие скорости GPIO, поскольку STM32 выбрала неподходящее название для этого понятия. Так вот он говорит, что параметр скорость GPIO в HAL определяет не частоту переключения вывода, а скорость, с которой вывод GPIO переходит с нулевого уровня напряжения на уровень VDD, и наоборот, т.е. скорость нарастания или спада фронта. Далее этом пункте он приводит осциллограммы со сравнением скоростей, полученные на плате NUCLEO-F446RE, которые как раз и совпадают с описанием в документации. Поясняя это понятие, автор говорит, что высокая скорость нарастания GPIO влияет на общее излучение платы, поэтому советует ставить значение LOW, если не требуется резкое нарастание фронта. Такое вот неудачное понятие, которое все-таки несет практическое применение.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +3

      Отвечу вечерком, я читал его книгу и там вы немного не точно описываете. Вкратце, HALом достичь максимальную скорость на F103 не получается, и выше LOW ставить смысла нет. А регистрами эта скорость достигается. И скорость и частота переключения для GPIO это по сути одно и тоже. А скорость перехода с нулевого состояния до напряжения питания каким параметром и единицей измерения охарактеризовать?

    • @ДмитрийКарасёв-и2ч
      @ДмитрийКарасёв-и2ч 5 ปีที่แล้ว

      @@NRelectronics Я понимаю, что HALом не достичь максимальной скорости переключения GPIO, как и не достичь на CMSIS той же скорости, что и на ассемблере, как вы показали в следующем своем видео. Чем выше уровень абстракции, тем меньше производительность. И я понимаю, что и скорость, и частота переключения для GPIO одно и то же. Просто в этом видео речь идет о скорости переключения GPIO (которую характеризует время между 2 передними фронтами соседних импульсов), и при настройке в кубе вы показываете, устанавливая значения скорости GPIO_SPEED_FREQ_HIGH и GPIO_SPEED_FREQ_LOW, что скорости переключения не меняются, из чего вы делаете вывод, что установка этой скорости в HAL не имеет никакого практического применения. Но этот параметр координально не влияет на ту скорость переключения GPIO, которую вы замеряли. Потому что скорости GPIO_SPEED_FREQ_LOW и GPIO_SPEED_FREQ_HIGH отвечают за скорость нарастания (или спада) фронта конкретного импульса, т.е. скорость перехода с нулевого состояния до напряжения питания. Так говорит автор приведенной книги. И эту скорость в своих осциллограммах он характеризует частотой. Эта частота равна 1/дельтаT, где дельтаТ - время перехода с нулевого состояния до напряжения питания. Мы говорим с вами о разных скоростях, а в видео вы принимаете их как одно понятие где-то на 28й минуте, либо я что-то не так понял.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      @@ДмитрийКарасёв-и2ч нельзя время, между двумя фронтами характеризовать скоростью, блин ну это неправильно. Это время и время, малое большое, а перключение HIGH|LOW характеризуется скоростью, Гц-ми например, или раз/сек. Там автор в книге сам не совсем корректно это назвал. Щупы выдают затухание на реактивном сопротивлении, это влияет на фронты, завалы, но не на скорость как таковую же, нормальные щупы с запасом по полосе не вносят значимых искажений.

    • @ДмитрийКарасёв-и2ч
      @ДмитрийКарасёв-и2ч 5 ปีที่แล้ว

      @@NRelectronics Что ж, может быть. Мне самому не нравятся все эти непонятки, и я недостаточно компетентен, чтобы спорить, но мне "понравилось" его объяснение на счет кривости названия понятия и проведенные эксперименты. В любом случае, в дальнейшем буду разбираться в официальной документации по HAL и выясню подробности этого вопроса.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      @@ДмитрийКарасёв-и2ч так а что тогда у меня в видео неправильно?)))

  • @АркадийБардамов
    @АркадийБардамов 5 ปีที่แล้ว +4

    Спасибо, хорошее видео!
    Использую cmsis, кончено это долго, но стал хорошо разбираться в "железной" составляющей контроллера)

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Пожалуйста!) Не забывайте про лайки и конструктивные предложения ;-) Как Ваши успехи в освоении МК?

  • @mikhailanisimov2160
    @mikhailanisimov2160 5 ปีที่แล้ว +4

    6:53 правильно будет сказать "за одну инструкцию" и "за три инструкции". Одна инструкция может выполняться от 1 до 3 машинных тактов на процессоре Cortex-M3, в зависимости от инстркуций, идущих перед ней
    22:51 На линии 106 вы перезаписываете все значения регистра ODR, цикла чтение-модификация-запись, о котором вы говорите там нет. Увеличение скорости при записи в регистр BSRR в сравнении с ODR, никак не зависит от самих регистров, потому что процессору всё равно куда вы записываете - это для него совершенно одинаковые ячейки памяти (с разными адресами, естественно). Ускорение связано с тем, что компилятор выгенерировал немного другую последовательность инструкций для этих двух примеров, потому что вы записываете другие значения (нужно смотреть листинг, чтобы узнать в чём конкретно отличие).

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +3

      Спасибо за корректный и осмысленный ответ. С вами согласен. Хотелось сравнить библиотеки и команды выполнения. Это показательно конечно. Компилятор вносит свои не малые три копейки. Так и получается компилятором выполнение ODR более долгое чем BSRR. Все подтверждается.

    • @OdinokijKot
      @OdinokijKot 4 ปีที่แล้ว +2

      Верно сказано. 3 операции при использовании регистра ORD - это 1-чтение значения, 2-наложение битовой маски для изменения только нужного бита, 3-запись нового значения в регистр. В случае с BSRR это всего одна операция - снятие или установка бита. За счёт этого и достигается ускорение.
      К этому же относится и атомарность. Если в первом случае у нас произойдёт прерывание и в нём поменяем значение порта, то накладывать маску и записывать обратно мы уже будет совершенно не то значение, которое сейчас находится в порте. В случае если мы делаем это всё с помощью регистра BSRR, мы делаем это за одну инструкцию, которую не сможет никто прервать, и гарантированно получим в регистре то, что хотели. Это и есть атомарность.
      В примере с F4 Вы как раз при работе с регистром ODR делаете верно, читаете, накладываете маску (инвертируете) и записываете ( хоть и одной строкой кода), по этому все рассчёты сходятся. А в примере с f1 просто пишете в регистр значения, но не читаете из него.
      Ну а значения "скорости" порта отвечают не за прямую скорость, а за скорость нарастания и спада импульса.

  • @mi4ell
    @mi4ell 5 ปีที่แล้ว +2

    Спасибо за ваши труды!

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Все для вас) не забывайте про лайки для других зрителей)

  • @alexseychrulev1081
    @alexseychrulev1081 8 หลายเดือนก่อน

    Провел тот же самый эксперимент с синий таблеткой, результат на cmsis скорость порта 2,8MHZ, HAL 788KHZ, а 8MHZ генерирует четко, очень разный результат получился почему то .

    • @NRelectronics
      @NRelectronics  8 หลายเดือนก่อน

      Очень мало что-то у Вас.

    • @alexseychrulev1081
      @alexseychrulev1081 8 หลายเดือนก่อน

      @@NRelectronics Сам удивился, причем что через регистр ODR что через BSRR 2,8MHZ выдает.

    • @NRelectronics
      @NRelectronics  8 หลายเดือนก่อน +1

      Выключите любую оптимизацию компилятора и попробуйте.

  • @remontlive
    @remontlive 5 ปีที่แล้ว +7

    Хотелось бы все-таки видеть cubemx IDE, раз уж она вышла, зачем ставить кейл.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +5

      На вкус и цвет как говорится... Сейчас планирую и продумываю одну ветку ещё по STM32, там будет CubeIDE.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +2

      Кейл надежен, кубиде эклипсоподобная система со своей "надежностью". Кто работал и там и там поймет о чем я.

    • @remontlive
      @remontlive 5 ปีที่แล้ว +1

      Еще на 46:30 немного удивился почему Вы просто не включили режим AC на осциллографе? На самом деле все видео нужно было с режимом AC работать. Просто постоянная составляющая по сути только мешала

    • @remontlive
      @remontlive 5 ปีที่แล้ว +1

      NR.electronics Буду смотреть обязательно!

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +2

      @@remontlive Спасибо! Не забывайте про лайки, чтобы поднять видео в поиске для других зрителей.

  • @namename2031
    @namename2031 2 ปีที่แล้ว

    2:52 Output Data Register. ODR - это один из регистров GPIO, который содержит все выходные состояния контактов порта GPIO.
    Сетресет на опеределённом выводе это что.
    Есть так же GPIO IDR- Input Data Register
    Согласитесь что так намного понятней.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      SET установ 1, RESET сброс. Понятно хоть это?

    • @namename2031
      @namename2031 2 ปีที่แล้ว

      @@NRelectronics Мне понятно.
      Но я нашёл описание в инете.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      @@namename2031 в RM все достаточно четко и нормально расписано. Нужно только понять.

    • @namename2031
      @namename2031 2 ปีที่แล้ว

      Я вас неирвирую своими постами?
      В принципе мне не принципиально, могу и не писать.
      Думал может чем то поделюсь что замечаю и сам запоминаю лучше если пишу.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      @@namename2031 просто вы не внимательно совсем смотрите, и одно из замечаний не корректное, не в формате вас как зрителя. Пишите если так легче учиться, я подправлю где нужно, или удалю))

  • @Aleksandr_Sidorov
    @Aleksandr_Sidorov 5 ปีที่แล้ว +2

    Ух ты вот это урок , но есть нюанс с которым я как то столкнулся , если используем библиотеку HAL то можно и CubeMX использовать , а вот если использовать CMSIS то CubeMX лучьше не использовать , так как некоторые отладочные платы на примере NUCLEO тактируються от Stlin-Ka , и CubeMX выставляет там сои битики , так что если используем CMSIS и CubeMX то лучьше проверить что установленно , я уже просто сталкивался с подобной проблемой

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Спасибо за совет. С нуклео не работал, учту для себя. Тактирование там МК осуществляется через вывод МСО отладчика встроенного читал. Технически нормуль. Видимо накладывается это на более "правильную" инициализацию RCC тактирование.

  • @kokotmkokot4926
    @kokotmkokot4926 5 ปีที่แล้ว

    Спасибо за интересное и полезное видео. Только обратите внимание, что при разных скоростях GPIO выходной каскад работает в разных токовых режимах.Это прекрасно видно по выбросу на фронтах 30:20. И сравните с 21:13. Соответственно должно быть разное потребление контроллером.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Спасибо,стараюсь ради зрителей! Так то может, ток потребления не замерял, не так это интересно. Скорость интересна.

    • @КонстантинСвечкарев-ю6о
      @КонстантинСвечкарев-ю6о 5 หลายเดือนก่อน

      Об этом и писал @user-fe6on9xu4w
      Видео всё равно зачётное! +

  • @tantry3111
    @tantry3111 5 ปีที่แล้ว +2

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

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +1

      Согласен полностью на счет осциллографа, но другого нет и в 500МГц для дома не подъемно будет стоить. Есть урок 10 и там на ассемблере все получилось ;-)

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Понижу оптимизацию до О0 и отпишусь.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +1

      Оптимизация на -О0 только уменьшила частоту на всех МК. На -O3 частота сигналов максимальная.

  • @dmitriyp7701
    @dmitriyp7701 8 หลายเดือนก่อน

    А вы могли бы записать пару тройку уроков кодинга на регистрах? С язык.
    Просто после Atmel Studio тяжело хал воспринимать

    • @NRelectronics
      @NRelectronics  8 หลายเดือนก่อน

      Всё возможно. Только сейчас хочется делать совсем другое.

  • @ЧПУ
    @ЧПУ 4 ปีที่แล้ว +1

    Очень хорошо!

  • @Aleksandr_Sidorov
    @Aleksandr_Sidorov 5 ปีที่แล้ว +1

    Я по кусочкам смотрю видео , и вот назрел вопрос по скорости ногодрыга так называемого, 36 мГц я так и не смог добиться , а вот таймерами смог спокойно , в том числе с 50 % заполнением шим ,другие функции таймеров еще пока что изучаю , так что тут нужно искать где собака зарыта , скорее всего в HAL ?тут нужно отрывать и смотреть где какая проверка проходит

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +1

      С халом все понятно. В видео хорошо показано на сравнении на кусочках как он работает. На Си я смог получить 36МГц для так называемого "ногодрыга". Таймером конечно удобнее работать.

  • @namename2031
    @namename2031 2 ปีที่แล้ว

    1:14
    4 Гигабайта адресного пространства это да.
    Но я совершенно уже запутался сколько Байт находится под каждым из этих адресов.
    Если вы найдёте в интернете тему: bit banding th-cam.com/video/IAMabY16PHw/w-d-xo.html
    то увидите что каждому адресу bit band региона соответствует 32 адреса региона псевдонимов.
    То есть на 1 Адрес который был, есть 32 адреса, а значит 32 бита.
    И много где ещё говорится что информация во Flash памяти хранится в 32 битных словах.
    Но когда пишешь в IDE и смотришь описание регистров, кажется что на каждый адрес один Байт. Не пойму.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      32 бита это 4 байта, а дальше строгая адресация по map memory. Есть регистры на 2 байта, есть на 4 байта. Посмотрите теже GPIO, USART.

    • @namename2031
      @namename2031 2 ปีที่แล้ว

      @@NRelectronics th-cam.com/video/IAMabY16PHw/w-d-xo.html
      4010 0000 - 4000 0000==1 048 576 это 1 Мегабайт адресов
      Каждый из этих адресов должен содержать 32 бита. Каждый из адресов.
      Так как ровно в 32 раза больше то пространство псевдонимов, на которое ссылается эта 1 мегабайтная область.
      Пространство псевдонимов от 4200 0000 до 4400 0000
      4400 0000-4200 0000==200 0000== 32 Мб

  • @Mishukan404
    @Mishukan404 ปีที่แล้ว

    Повторил для nucleo f411 и для g431. У меня почему-то нет разницы по частоте между ODR и BSRR. С чем может быть связано? 🤔

    • @NRelectronics
      @NRelectronics  ปีที่แล้ว

      И какая частота получилась? Разница должна быть, ибо количество тактов разное на каждой команде.

    • @Mishukan404
      @Mishukan404 ปีที่แล้ว

      @@NRelectronics для Nucleo f411 HCLK=100МГц: ODR и BSRR 9.1 МГц
      для WeAct g431 HCLK=150МГц (170 не выставляются с 8МГц кварцем): ODR и BSRR 12.5 МГц

    • @NRelectronics
      @NRelectronics  ปีที่แล้ว

      Вопрос в частоте шины и количестве тактов команды... Можно прикинуть...

    • @Mishukan404
      @Mishukan404 ปีที่แล้ว

      @@NRelectronics самое интересное что для F407 (плата DEVE-Box) только что получил такую же картину. ODR и BSRR 14 МГц 🤯

    • @NRelectronics
      @NRelectronics  ปีที่แล้ว

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

  • @namename2031
    @namename2031 2 ปีที่แล้ว

    1:14
    0хFFFF FFFF == 4 294 967 296== 4 Гибибайт.
    Один адрес это как в компьютере один Байт?
    Под порт А выделяется 1024 адреса. Это 1024 Байта?
    Это килобайт. Действительно так много надо для регистров?
    Один регистр 32 бит(16 во многих резервировано)==32 бит==4 Байта.
    1024/4==256
    Получается можно 256 регистров поместить в эту память.
    Но регистров я думаю ведь меньше?

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว +1

      Всё так, да меньше. Ну вот такой стандарт распределения памяти

    • @namename2031
      @namename2031 2 ปีที่แล้ว

      @@NRelectronics На хабре я нашёл такое:
      Каждый из регистров имеет свой порядковый номер - адрес. Адрес регистра обозначается 32-битным числом представленным в шестнадцатеричной системе счисления.
      ---------------------
      Если адрессация побайтовая, то как каждый регист может иметь свой адрес? Это адрес начального байта регистра или что?

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว +1

      Вам нужно посмотреть Memory Map например на GPIO или любую другую периферию. Есть начальный адрес и о него для каждой частицы хардвера свой адрес, это начальный адрес + смещение. И всё.

  • @DunnoOnTheMoon
    @DunnoOnTheMoon 3 ปีที่แล้ว

    Не подскажите, как в кубеИДЕ найти/установить кнопку "Загрузить ПО в плату"? Всю голову уже сломал, но найти так и не смог =(. Заранее спасибо.

    • @NRelectronics
      @NRelectronics  3 ปีที่แล้ว +1

      Кнопнка Run. В последнем видео ею пользовался, нужно сначала автоматом подгрузить серийник программатора и эта кнопка будет работать.

    • @DunnoOnTheMoon
      @DunnoOnTheMoon 3 ปีที่แล้ว

      @@NRelectronics большое спасибо. Пока досмотрел до нужного момента в видео, благодаря подсказке автора в комментарии, уже сам нашел куда ткнуть нужно).
      На всякий случай, чтобы таких вопросов не было потом у людей. В видео про пустой и рабочий проект в IDE на CMSIS показано, как прошивать.

    • @NRelectronics
      @NRelectronics  3 ปีที่แล้ว

      Не за что. Про пустой проект на CMSISe я как раз говорил что зашиваем прошивку в мк этой кнопкой))

    • @DunnoOnTheMoon
      @DunnoOnTheMoon 3 ปีที่แล้ว

      @@NRelectronics я до новых видео ещё просто не дошел=). Поэтому был не в курсе.

    • @NRelectronics
      @NRelectronics  3 ปีที่แล้ว

      А, я понял. Думал смотрели. Хорошо что теперь мы разобрались как это делать, удачи в освоении!

  • @ElektroElektroniker
    @ElektroElektroniker 9 หลายเดือนก่อน

    Perfekt, Vielen Dank!

    • @NRelectronics
      @NRelectronics  9 หลายเดือนก่อน

      Vielen Dank für Ihren Kommentar! Empfehlen Sie den Kanal.

  • @АлександрДаскаль-е6т
    @АлександрДаскаль-е6т 4 ปีที่แล้ว

    Хорошие ролики, спасибо. Под STM32 еще не чего не писал, но писал под AVR8. Сейчас знакомлюсь, в том числе и по вашим роликам. Мне не понятно, зачем 2 регистра порта для записи, ODR и BSSR, если оба делают одно и тоже? Но за разное время. И как надо было извратится с HAL, что простая запись в регистр отнимает столько времени. И почему с HAL изменение скорости порта не к чему не приводит?

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      C HALом вот такие накладные расходы, он так сделан, что изменение скорости порта такое низкое... Его только самому переписывать или просто использовать значение регистров

    • @АлександрДаскаль-е6т
      @АлександрДаскаль-е6т 4 ปีที่แล้ว

      С HALом все понятно, слишком унифицирован, я б сказал ардуиноподобный. Решил на начальном этапе с CMSIS поработать, а дальше видно будет, еще раз спасибо, за то что учите нас.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Да, согласен, ардуиноподобный хал, и своими приколами. На регистрацию все яснее и проще.

  • @aanikin969
    @aanikin969 2 ปีที่แล้ว

    Спасибо! Можно ли сделать или будет ли более детальное описание вкладки Clock Configuration и показать как соотносить с даташитом? Пока выглядит как магия.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      Пожалуйста. Это уже сделано ранее:
      th-cam.com/video/pgm_MphGOjM/w-d-xo.html

    • @aanikin969
      @aanikin969 2 ปีที่แล้ว

      @@NRelectronics отлично! Сюда не дошёл ещё.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      Следом посмотрите обязательно продолжение:
      th-cam.com/video/a8t8mvR5Z88/w-d-xo.html
      а потом ещё:
      th-cam.com/video/C2knTvdv-KY/w-d-xo.html

    • @aanikin969
      @aanikin969 2 ปีที่แล้ว

      Почти все посмотрел. Мне, как новичку, не очень понятно в каких задачах может быть нужны эти эксперименты с тактированием. С точки зрения, больше частота - лучше.
      Когда нужно замедлять или использовать определенную частоту? Показано, что реальная частота на выходе все равно другая.
      Возможно, просто нужно смотреть дальше. :-)

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว

      Это нужно в задачах, когда нужно по серьёзному экономить потребление. Хороший ход занизить тактировпние. Вы невнимательно видео посмотрели, я с 72МГц уменьшил до 36 МГц, а потом вернул также легко обратно. И показал это на длительности свечения светодиода по осциллографу.

  • @slavaglow6933
    @slavaglow6933 5 ปีที่แล้ว

    Интересует вопрос почему реальное смещение не совпадает с тем, что задает компилятор (при загрузке из ОЗУ)?
    0x080004EA 480C LDR r0,[pc,#48] ; @0x0800051C
    0x080004EA 480C LDR r0,[pc,#0x30] ; @0x0800051C
    offset = 0x0800051C - 0x080004EA = 0x32;
    address = 0x080004EA + 30 = 0x0800051A;
    diff = 0x0800051C - 0x0800051A = 0х02;
    На сколько я понимаю смещение должно быть кратное 4, но тогда почему компилятор не подставляет сразу значение кратное 4?

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Вопрос сразу тогда в ARM Holdings ;-)

  • @MrPusyakaryagin
    @MrPusyakaryagin 4 ปีที่แล้ว

    Подскажите пожалуйста, есть ли способ переключать состояния выходов, при этом не останавливая выполнение кода?
    Делаю буфер с шифратором, на несколько мегагерц. Пока идёт вывод, нужно также читать состояния других ножек и писать их в буфер. По коду 72 МГц едва хватит, но если он будет ждать каждого переключения выхода, то скорость будет как у атмеги. Даже плисы рассмотрел, но дорого и большой буфер не сделать.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว +1

      Изменение состояния это ноль или единица? Алгоритмом задайте как вам нужно и меняйте на здоровье не останавливая код.

    • @MrPusyakaryagin
      @MrPusyakaryagin 4 ปีที่แล้ว

      @@NRelectronics Я имею в виду, что рассмотренные в видео операции по установке 1 или 0 на выводе занимают очень много процессного времени.
      На той же атмеге мы пишем в порт за один такт и сразу же выполняем дальнейший код. А на стм32, как я понимаю, при записи в порт программа ждет переключения ножки, в итоге контроллер будет всё процессорное время ждать переключения.
      То есть i++ в вечном цикле будет работать на 72 мгц (без учета перехода), но цикл с инкрементом и переключением ножки уже будет делать инкремент в десятки раз реже. Как этого избежать?

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว +1

      @@MrPusyakaryagin bsrr или brr регистр это производит, изменения состояния, сейчас не вспомню точное название, запись одного значения в регистр один, разве это долго??

  • @АнтонЖук-м4у
    @АнтонЖук-м4у 4 ปีที่แล้ว

    Спасибо. А что Вы скажете про библиотеку LL, вместо HAL?

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Она считается менее насыщенной скажем так. С меньшим количеством проверок а значит стабильнее. Но на LL не все можно сделать как на HAL, посмотрим Description на эти библиотеку, хал по функционалу шире.

    • @АнтонЖук-м4у
      @АнтонЖук-м4у 4 ปีที่แล้ว

      Встречал комбинацию HAL и LL, в LL советуют описывать GPIO , как раз из-за больших задержек в HAL, а можете добавить сравнение скорости работы выводов через LL, к уже имеющимся у Вас HAL и ассемблер ?

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Большие задержки при старте МК и инициализации перефирии? Интересно это ж сколько в мс или мкс? При старте это происходит быстро, не думаю что это на что-то вообще может повлиять. Вы когда подаете питание на МК до десяти секунд можете с ним ничего не делать... А тут только инициализации. LLC мне библиотека мало интересна, пока не вижу смысла тратить на нее время.

  • @ShaneAMC
    @ShaneAMC 4 ปีที่แล้ว

    Здравствуйте. Подскажите с чем может быть связано, делаю как у вас с ф103 но частоты отличаются в меньшую сторону?

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Здравствуйте. Тактирование настроили точно как у меня?

    • @ShaneAMC
      @ShaneAMC 4 ปีที่แล้ว

      @@NRelectronics всё именно так, прочитал в комментариях про оптимизацию с о3 добавилось ещё немного, но всё же меньше чем у вас по частотам. Плюс фронты не такие как у вас.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      @@ShaneAMC каким осциллографом измеряли и какая частота получилась по ослику?

    • @ShaneAMC
      @ShaneAMC 4 ปีที่แล้ว

      @@NRelectronics hantek dso5102p 100MHz. Частоты в зависимости от способа дрыганья отличаются на 10-20% в меньшую сторону от ваших.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Возможно у кого-то из нас ослик не точно измеряет, либо мк на на bluepill не оригинальный, коих много продается к сожалению на Али.

  • @NIKOLAY_PSHONIA
    @NIKOLAY_PSHONIA 4 ปีที่แล้ว

    Спасибо за уроки. Вопрс?
    GPIOB->BSRR = GPIO_BSRR_BR9; // ((uint32_t)0x02000000)
    GPIOB->BSRR = GPIO_BSRR_BS9;
    // ((uint32_t)0x00000200)
    GPIOB->BRR = GPIO_BRR_BR9;
    // ((uint16_t)0x0200)
    GPIOB->BRR = GPIO_BSRR_BS9;
    // ((uint32_t)0x00000200)
    GPIOB->BSRR = (1 BSRR &= ~GPIO_ODR_ODR9; // ((uint16_t)0x0200)
    Чем лучше пользоваться выставлять 0 или 1
    (GPIOB->ODR ) медленно, и боится прерываний СПАСИБО

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Я вас не совсем наверное понял. Единица для установки, нуль для сброса, от необходимости, установка каждого значения скорость одинаковая.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Лучше как вы в начале писали, читабильнее.

    • @NIKOLAY_PSHONIA
      @NIKOLAY_PSHONIA 4 ปีที่แล้ว

      @@NRelectronics Спасибо за ответ - Третья строчка кода 16 бит поэтому и задумался. как и что лучше или правильнее.

    • @NIKOLAY_PSHONIA
      @NIKOLAY_PSHONIA 4 ปีที่แล้ว

      @@NRelectronics Разобрался
      BSRR - BR - 0 на выводе
      (32бита)
      BSRR - BS - 1 на выводе
      (32бита)
      ---------------------------------------
      BRR - (только BR) 1 на выводе
      (16бит)
      ---------------------------------------
      ODR - 0.7 мГц ногодрыг (пока прочитает - запишет)
      понятно А....
      BSRR - BS - 1 на выводе 1,38 мГц ногодрыг
      BRR - BR - 1 на выводе 1,7 мГц ногодрыг
      почему разница 1,38 и 1,7 - не может быть что бы в 16 битный запись 16 бит происходила чуть быстрее или компилятор как то влияет ??? ведь stm прожевывает 32 бита за тик.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Посмотрите в режиме отладки в окне дизассемблирования, все увидите. Сейчас нет возможности у меня сделать, я на работе.

  • @ilhitindustries7499
    @ilhitindustries7499 5 ปีที่แล้ว

    А скажите пожалуйста про 0x200 равно 9. Где можно на онлайн калькуляторе это проверить? У меня не получается такое значение.Спасибо.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +1

      Спасибо за вопрос. Калькулятор в винде переключаете в режим для программистов. А так ручкой можно перевести ;-)

    • @ilhitindustries7499
      @ilhitindustries7499 5 ปีที่แล้ว

      @@NRelectronics Так и делал но девятки не получается)

    • @ilhitindustries7499
      @ilhitindustries7499 5 ปีที่แล้ว

      Так от куда они взялись то?

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +3

      @@ilhitindustries7499 0x200 = 0b000000100000000. И это значение записывается в регистр ODR.

    • @ilhitindustries7499
      @ilhitindustries7499 5 ปีที่แล้ว +1

      Воо, теперь понятно. Всем спасибо

  • @Aleksandr_Sidorov
    @Aleksandr_Sidorov 5 ปีที่แล้ว

    Доброго времени суток у меня почемуто вот при этих значениях
    GPIOA->ODR = 0x200;
    GPIOA->ODR = 0;
    частота показывает 12 мГц это нормально или не нормально
    А вот при таких значениях
    GPIOA->BSRR = GPIO_BSRR_BS9;
    GPIOA->BSRR = GPIO_BSRR_BR9;
    показывает 8 мГц
    что я могу делать не так
    или чего то я не понимаю

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Если как в видео, то все у вас так, это нормально. Напишите повторение каждой пары раз пятьдесят для каждого случая и померьте частоту, удивитесь ;-)

    • @Aleksandr_Sidorov
      @Aleksandr_Sidorov 5 ปีที่แล้ว

      @@NRelectronics У меня еще ослик ограничен 20 мГц и он у меня не супер быстрый , так что больших частот не увижу , а так посмотрю

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      @@Aleksandr_Sidorov тогда жалко, тут нужно иметь побольше полосы, причем лучше кратно больше.

  • @kholodengineering7105
    @kholodengineering7105 5 ปีที่แล้ว

    Привет есть работка по STM32 ? занимаетесь написанием?

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Здравствуйте. Написанием чего или для кого?

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Так это предложение поработать или просто интересуетесь?

  • @fffmarty7427
    @fffmarty7427 5 ปีที่แล้ว

    У меня почему-то команды
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); //High
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); //LOW
    и
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);
    Выдают максимум всего 500 Гц((( у меня STM32F407
    Тактирование ставил 168 МГц и 84 МГц...
    Почему такое может быть?

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      Странно,меньше чем у меня на видео... возможно разные у нас тактирования, шина, системная шина, кварц...

    • @Frutktt
      @Frutktt 5 ปีที่แล้ว

      500 кГц?
      У меня stm32f3 максимум выдает 0.5 МГц.

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +1

      @@Frutktt вы, что-то написали одно и тоже...

    • @Frutktt
      @Frutktt 5 ปีที่แล้ว

      @@NRelectronics всё верно, я хотел уточнить, выше у товарища 500 Гц. Наверное он имел в виду 500 кГц.
      500 кГц и 0.5 МГц я написал, чтобы не повторяться)

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว

      @@Frutktt вот и я про тоже.

  • @clora1136
    @clora1136 4 ปีที่แล้ว

    Есть мнение, что фронты ограничены скоростью нарастания ослика. 50мгц меандр не тоже самое что 50мгц синуса. И по "постоянной" составляющей видно что 10+ мгц меандр он не может.

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      Не скоростью, а полосой пропускания и теоремой Котельникова.

    • @clora1136
      @clora1136 4 ปีที่แล้ว

      @@NRelectronics ну тут не все так просто) , скорость нарастание напряжение в/мкс связана с полосой пропускания. Понятно что так же связана и с амплитудой (но в тракте она +- постоянная). Так что измерить фронты импульса в 10мгц осликом на 50мгц не выйдет. 16нс для ослика со 125-250msa похоже на правду. Я думаю меандр там лучше чем на экране

    • @NRelectronics
      @NRelectronics  4 ปีที่แล้ว

      @Инженерия от Clor'a я 18МГц измеряю осликом полосой 50МГц, показания нормальные как раз ;-)

    • @ЮрийКордюков-н4ш
      @ЮрийКордюков-н4ш 4 ปีที่แล้ว

      @@NRelectronics На осциллографе с полосой пропускания 200MHz и частотой дискретизации 1GS/sec вы нормально (но не идеально) увидите меандр с частотой 20 MHz, с некоторыми оговорками (например измерять его параметры с известной погрешностью) имеющим частоту максимум 4MHz-6,6MHz. Если же Вы занимаетесь разработкой электронных устройств и Вам требуется изучать и измерять переходные процессы на фронтах меандра, вам по минимуму хватит для работы с меандром имеющим частоту в районе 50KHz.

  • @maximpetrov2742
    @maximpetrov2742 5 ปีที่แล้ว +1

    Спасибо за видео ) интересно больше про cmsis смотреть , так как это основы , необдуманно юзать хал - как мне кажется , не правильно .
    P.S с вами как то можно связаться ?(почта , телеграм )

    • @NRelectronics
      @NRelectronics  5 ปีที่แล้ว +1

      Пожалуйста за видео) для инициализации переферии хал удобен, далее лучше самому все писать на CMSIS конечно. Почта nr.electronicss@gmail.com

    • @nikshpik6690
      @nikshpik6690 4 ปีที่แล้ว

      Hal это быстрый порт готовых решений. Скорость разработки ни кто не отменял

  • @namename2031
    @namename2031 2 ปีที่แล้ว

    HEX 200==10 0000 0000 бинарный вид
    Единица стоит на десятом месте. Нумерация портов начинается ведь с нуля?
    Первый порт это 0? Второй порт 1? Третий порт 10?
    Если предположить что каждый бит это пин, то тоже не получается.
    Здесь 10 0000 0000 единица стоит на десятом месте.
    Получается что первый пин начинается с 10? Почему так?
    А, ок понял.
    Нулевой пин это 0
    Первый пин это 10
    Второй пин это 100
    Третий пин 1000
    и.т.д.
    10 0000 0000 Это девятый пин, но учитывая что есть нулевой пин.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว +1

      Хорошо, что сами определились. Это самое ценное в самообразовании.

  • @Dmitrii82
    @Dmitrii82 3 ปีที่แล้ว

    На мой взгляд сложновато, куча всего создал.... что , зачем. В авр что написал то и получил.

    • @NRelectronics
      @NRelectronics  3 ปีที่แล้ว

      Это еще стмка простая. Сложные не видел, все просто на самом деле, в начале сложновато да.

  • @namename2031
    @namename2031 2 ปีที่แล้ว

    Не вижу настройки каждого пина для Mode,Pull,Speed,Alternate.
    #define GPIO_MODE_INPUT 0x00000000U
    Как это приспособить для определённого пина?
    То есть настройка пинов порта происходит всех сразу, а не поотдельности.
    Как выбирают из 16 ти пинов нужный, чтоб дать модус нужный?
    Здесь GPIO_InitStruct.Pin информация сразу о 16 ти пинах передаётся.
    Как узнать для какого именно пина я хочу сделать это #define GPIO_MODE_INPUT 0x00000000U
    Здесь #define GPIO_MODE_INPUT 0x00000000U ведь нет информации о порядковом номере пина.

    • @NRelectronics
      @NRelectronics  2 ปีที่แล้ว +1

      Ответы на эти вопросы относятся к регистрам. В плейлисте по CMSIS это есть.