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

  Рет қаралды 19,229

NR.electronics

NR.electronics

Күн бұрын

Пікірлер: 164
@antonGoldinov
@antonGoldinov Жыл бұрын
Добра и счастья Вам автор видео!!!
@NRelectronics
@NRelectronics Жыл бұрын
Спасибо Вам большое! Подписывайтесь на телеграм канал
@АркадийБардамов
@АркадийБардамов 5 жыл бұрын
Спасибо, хорошее видео! Использую cmsis, кончено это долго, но стал хорошо разбираться в "железной" составляющей контроллера)
@NRelectronics
@NRelectronics 5 жыл бұрын
Пожалуйста!) Не забывайте про лайки и конструктивные предложения ;-) Как Ваши успехи в освоении МК?
@mi4ell
@mi4ell 5 жыл бұрын
Спасибо за ваши труды!
@NRelectronics
@NRelectronics 5 жыл бұрын
Все для вас) не забывайте про лайки для других зрителей)
@ДмитрийКарасёв-и2ч
@ДмитрийКарасёв-и2ч 5 жыл бұрын
В своем уроке вы сказали, что для библиотеки 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 жыл бұрын
Отвечу вечерком, я читал его книгу и там вы немного не точно описываете. Вкратце, 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ч так а что тогда у меня в видео неправильно?)))
@mikhailanisimov2160
@mikhailanisimov2160 5 жыл бұрын
6:53 правильно будет сказать "за одну инструкцию" и "за три инструкции". Одна инструкция может выполняться от 1 до 3 машинных тактов на процессоре Cortex-M3, в зависимости от инстркуций, идущих перед ней 22:51 На линии 106 вы перезаписываете все значения регистра ODR, цикла чтение-модификация-запись, о котором вы говорите там нет. Увеличение скорости при записи в регистр BSRR в сравнении с ODR, никак не зависит от самих регистров, потому что процессору всё равно куда вы записываете - это для него совершенно одинаковые ячейки памяти (с разными адресами, естественно). Ускорение связано с тем, что компилятор выгенерировал немного другую последовательность инструкций для этих двух примеров, потому что вы записываете другие значения (нужно смотреть листинг, чтобы узнать в чём конкретно отличие).
@NRelectronics
@NRelectronics 5 жыл бұрын
Спасибо за корректный и осмысленный ответ. С вами согласен. Хотелось сравнить библиотеки и команды выполнения. Это показательно конечно. Компилятор вносит свои не малые три копейки. Так и получается компилятором выполнение ODR более долгое чем BSRR. Все подтверждается.
@OdinokijKot
@OdinokijKot 4 жыл бұрын
Верно сказано. 3 операции при использовании регистра ORD - это 1-чтение значения, 2-наложение битовой маски для изменения только нужного бита, 3-запись нового значения в регистр. В случае с BSRR это всего одна операция - снятие или установка бита. За счёт этого и достигается ускорение. К этому же относится и атомарность. Если в первом случае у нас произойдёт прерывание и в нём поменяем значение порта, то накладывать маску и записывать обратно мы уже будет совершенно не то значение, которое сейчас находится в порте. В случае если мы делаем это всё с помощью регистра BSRR, мы делаем это за одну инструкцию, которую не сможет никто прервать, и гарантированно получим в регистре то, что хотели. Это и есть атомарность. В примере с F4 Вы как раз при работе с регистром ODR делаете верно, читаете, накладываете маску (инвертируете) и записываете ( хоть и одной строкой кода), по этому все рассчёты сходятся. А в примере с f1 просто пишете в регистр значения, но не читаете из него. Ну а значения "скорости" порта отвечают не за прямую скорость, а за скорость нарастания и спада импульса.
@kokotmkokot4926
@kokotmkokot4926 5 жыл бұрын
Спасибо за интересное и полезное видео. Только обратите внимание, что при разных скоростях GPIO выходной каскад работает в разных токовых режимах.Это прекрасно видно по выбросу на фронтах 30:20. И сравните с 21:13. Соответственно должно быть разное потребление контроллером.
@NRelectronics
@NRelectronics 5 жыл бұрын
Спасибо,стараюсь ради зрителей! Так то может, ток потребления не замерял, не так это интересно. Скорость интересна.
@КонстантинСвечкарев-ю6о
@КонстантинСвечкарев-ю6о 6 ай бұрын
Об этом и писал @user-fe6on9xu4w Видео всё равно зачётное! +
@ЧПУ
@ЧПУ 4 жыл бұрын
Очень хорошо!
@remontlive
@remontlive 5 жыл бұрын
Хотелось бы все-таки видеть cubemx IDE, раз уж она вышла, зачем ставить кейл.
@NRelectronics
@NRelectronics 5 жыл бұрын
На вкус и цвет как говорится... Сейчас планирую и продумываю одну ветку ещё по STM32, там будет CubeIDE.
@NRelectronics
@NRelectronics 5 жыл бұрын
Кейл надежен, кубиде эклипсоподобная система со своей "надежностью". Кто работал и там и там поймет о чем я.
@remontlive
@remontlive 5 жыл бұрын
Еще на 46:30 немного удивился почему Вы просто не включили режим AC на осциллографе? На самом деле все видео нужно было с режимом AC работать. Просто постоянная составляющая по сути только мешала
@remontlive
@remontlive 5 жыл бұрын
NR.electronics Буду смотреть обязательно!
@NRelectronics
@NRelectronics 5 жыл бұрын
@@remontlive Спасибо! Не забывайте про лайки, чтобы поднять видео в поиске для других зрителей.
@ElektroElektroniker
@ElektroElektroniker 11 ай бұрын
Perfekt, Vielen Dank!
@NRelectronics
@NRelectronics 11 ай бұрын
Vielen Dank für Ihren Kommentar! Empfehlen Sie den Kanal.
@Aleksandr_Sidorov
@Aleksandr_Sidorov 5 жыл бұрын
Ух ты вот это урок , но есть нюанс с которым я как то столкнулся , если используем библиотеку HAL то можно и CubeMX использовать , а вот если использовать CMSIS то CubeMX лучьше не использовать , так как некоторые отладочные платы на примере NUCLEO тактируються от Stlin-Ka , и CubeMX выставляет там сои битики , так что если используем CMSIS и CubeMX то лучьше проверить что установленно , я уже просто сталкивался с подобной проблемой
@NRelectronics
@NRelectronics 5 жыл бұрын
Спасибо за совет. С нуклео не работал, учту для себя. Тактирование там МК осуществляется через вывод МСО отладчика встроенного читал. Технически нормуль. Видимо накладывается это на более "правильную" инициализацию RCC тактирование.
@tantry3111
@tantry3111 5 жыл бұрын
Если есть сомнения в скорости , можно на вкладке ассемблера посмотреть за сколько команд происходит действие. Да и оптимизация может играть злую шутку. Видео хорошее , но осцилограф по частоте лучше с запасом в 10 раз
@NRelectronics
@NRelectronics 5 жыл бұрын
Согласен полностью на счет осциллографа, но другого нет и в 500МГц для дома не подъемно будет стоить. Есть урок 10 и там на ассемблере все получилось ;-)
@NRelectronics
@NRelectronics 5 жыл бұрын
Понижу оптимизацию до О0 и отпишусь.
@NRelectronics
@NRelectronics 5 жыл бұрын
Оптимизация на -О0 только уменьшила частоту на всех МК. На -O3 частота сигналов максимальная.
@alexseychrulev1081
@alexseychrulev1081 9 ай бұрын
Провел тот же самый эксперимент с синий таблеткой, результат на cmsis скорость порта 2,8MHZ, HAL 788KHZ, а 8MHZ генерирует четко, очень разный результат получился почему то .
@NRelectronics
@NRelectronics 9 ай бұрын
Очень мало что-то у Вас.
@alexseychrulev1081
@alexseychrulev1081 9 ай бұрын
@@NRelectronics Сам удивился, причем что через регистр ODR что через BSRR 2,8MHZ выдает.
@NRelectronics
@NRelectronics 9 ай бұрын
Выключите любую оптимизацию компилятора и попробуйте.
@dmitriyp7701
@dmitriyp7701 10 ай бұрын
А вы могли бы записать пару тройку уроков кодинга на регистрах? С язык. Просто после Atmel Studio тяжело хал воспринимать
@NRelectronics
@NRelectronics 10 ай бұрын
Всё возможно. Только сейчас хочется делать совсем другое.
@АлександрДаскаль-е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 жыл бұрын
Пожалуйста. Это уже сделано ранее: kzbin.info/www/bejne/ppjQkICmnayCoK8
@aanikin969
@aanikin969 2 жыл бұрын
@@NRelectronics отлично! Сюда не дошёл ещё.
@NRelectronics
@NRelectronics 2 жыл бұрын
Следом посмотрите обязательно продолжение: kzbin.info/www/bejne/l2nXaaCsh5qNbpo а потом ещё: kzbin.info/www/bejne/eWPOn4esmdtggbs
@aanikin969
@aanikin969 2 жыл бұрын
Почти все посмотрел. Мне, как новичку, не очень понятно в каких задачах может быть нужны эти эксперименты с тактированием. С точки зрения, больше частота - лучше. Когда нужно замедлять или использовать определенную частоту? Показано, что реальная частота на выходе все равно другая. Возможно, просто нужно смотреть дальше. :-)
@NRelectronics
@NRelectronics 2 жыл бұрын
Это нужно в задачах, когда нужно по серьёзному экономить потребление. Хороший ход занизить тактировпние. Вы невнимательно видео посмотрели, я с 72МГц уменьшил до 36 МГц, а потом вернул также легко обратно. И показал это на длительности свечения светодиода по осциллографу.
@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 жыл бұрын
Я по кусочкам смотрю видео , и вот назрел вопрос по скорости ногодрыга так называемого, 36 мГц я так и не смог добиться , а вот таймерами смог спокойно , в том числе с 50 % заполнением шим ,другие функции таймеров еще пока что изучаю , так что тут нужно искать где собака зарыта , скорее всего в HAL ?тут нужно отрывать и смотреть где какая проверка проходит
@NRelectronics
@NRelectronics 5 жыл бұрын
С халом все понятно. В видео хорошо показано на сравнении на кусочках как он работает. На Си я смог получить 36МГц для так называемого "ногодрыга". Таймером конечно удобнее работать.
@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 работает атомарно быстрее. Собственно это лишь тест, использовать голый миландр редко когда нужно в мк, нужно данные вкладывать, а это ещё скорость снижает...
@maximpetrov2742
@maximpetrov2742 5 жыл бұрын
Спасибо за видео ) интересно больше про cmsis смотреть , так как это основы , необдуманно юзать хал - как мне кажется , не правильно . P.S с вами как то можно связаться ?(почта , телеграм )
@NRelectronics
@NRelectronics 5 жыл бұрын
Пожалуйста за видео) для инициализации переферии хал удобен, далее лучше самому все писать на CMSIS конечно. Почта nr.electronicss@gmail.com
@nikshpik6690
@nikshpik6690 4 жыл бұрын
Hal это быстрый порт готовых решений. Скорость разработки ни кто не отменял
@MrPusyakaryagin
@MrPusyakaryagin 4 жыл бұрын
Подскажите пожалуйста, есть ли способ переключать состояния выходов, при этом не останавливая выполнение кода? Делаю буфер с шифратором, на несколько мегагерц. Пока идёт вывод, нужно также читать состояния других ножек и писать их в буфер. По коду 72 МГц едва хватит, но если он будет ждать каждого переключения выхода, то скорость будет как у атмеги. Даже плисы рассмотрел, но дорого и большой буфер не сделать.
@NRelectronics
@NRelectronics 4 жыл бұрын
Изменение состояния это ноль или единица? Алгоритмом задайте как вам нужно и меняйте на здоровье не останавливая код.
@MrPusyakaryagin
@MrPusyakaryagin 4 жыл бұрын
@@NRelectronics Я имею в виду, что рассмотренные в видео операции по установке 1 или 0 на выводе занимают очень много процессного времени. На той же атмеге мы пишем в порт за один такт и сразу же выполняем дальнейший код. А на стм32, как я понимаю, при записи в порт программа ждет переключения ножки, в итоге контроллер будет всё процессорное время ждать переключения. То есть i++ в вечном цикле будет работать на 72 мгц (без учета перехода), но цикл с инкрементом и переключением ножки уже будет делать инкремент в десятки раз реже. Как этого избежать?
@NRelectronics
@NRelectronics 4 жыл бұрын
@@MrPusyakaryagin bsrr или brr регистр это производит, изменения состояния, сейчас не вспомню точное название, запись одного значения в регистр один, разве это долго??
@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 жыл бұрын
Всё так, да меньше. Ну вот такой стандарт распределения памяти
@namename2031
@namename2031 2 жыл бұрын
@@NRelectronics На хабре я нашёл такое: Каждый из регистров имеет свой порядковый номер - адрес. Адрес регистра обозначается 32-битным числом представленным в шестнадцатеричной системе счисления. --------------------- Если адрессация побайтовая, то как каждый регист может иметь свой адрес? Это адрес начального байта регистра или что?
@NRelectronics
@NRelectronics 2 жыл бұрын
Вам нужно посмотреть Memory Map например на GPIO или любую другую периферию. Есть начальный адрес и о него для каждой частицы хардвера свой адрес, это начальный адрес + смещение. И всё.
@DunnoOnTheMoon
@DunnoOnTheMoon 3 жыл бұрын
Не подскажите, как в кубеИДЕ найти/установить кнопку "Загрузить ПО в плату"? Всю голову уже сломал, но найти так и не смог =(. Заранее спасибо.
@NRelectronics
@NRelectronics 3 жыл бұрын
Кнопнка Run. В последнем видео ею пользовался, нужно сначала автоматом подгрузить серийник программатора и эта кнопка будет работать.
@DunnoOnTheMoon
@DunnoOnTheMoon 3 жыл бұрын
@@NRelectronics большое спасибо. Пока досмотрел до нужного момента в видео, благодаря подсказке автора в комментарии, уже сам нашел куда ткнуть нужно). На всякий случай, чтобы таких вопросов не было потом у людей. В видео про пустой и рабочий проект в IDE на CMSIS показано, как прошивать.
@NRelectronics
@NRelectronics 3 жыл бұрын
Не за что. Про пустой проект на CMSISe я как раз говорил что зашиваем прошивку в мк этой кнопкой))
@DunnoOnTheMoon
@DunnoOnTheMoon 3 жыл бұрын
@@NRelectronics я до новых видео ещё просто не дошел=). Поэтому был не в курсе.
@NRelectronics
@NRelectronics 3 жыл бұрын
А, я понял. Думал смотрели. Хорошо что теперь мы разобрались как это делать, удачи в освоении!
@АнтонЖук-м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 мне библиотека мало интересна, пока не вижу смысла тратить на нее время.
@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 ;-)
@namename2031
@namename2031 2 жыл бұрын
1:14 4 Гигабайта адресного пространства это да. Но я совершенно уже запутался сколько Байт находится под каждым из этих адресов. Если вы найдёте в интернете тему: bit banding kzbin.info/www/bejne/f3KwkpWPZpuDftk то увидите что каждому адресу bit band региона соответствует 32 адреса региона псевдонимов. То есть на 1 Адрес который был, есть 32 адреса, а значит 32 бита. И много где ещё говорится что информация во Flash памяти хранится в 32 битных словах. Но когда пишешь в IDE и смотришь описание регистров, кажется что на каждый адрес один Байт. Не пойму.
@NRelectronics
@NRelectronics 2 жыл бұрын
32 бита это 4 байта, а дальше строгая адресация по map memory. Есть регистры на 2 байта, есть на 4 байта. Посмотрите теже GPIO, USART.
@namename2031
@namename2031 2 жыл бұрын
@@NRelectronics kzbin.info/www/bejne/f3KwkpWPZpuDftk 4010 0000 - 4000 0000==1 048 576 это 1 Мегабайт адресов Каждый из этих адресов должен содержать 32 бита. Каждый из адресов. Так как ровно в 32 раза больше то пространство псевдонимов, на которое ссылается эта 1 мегабайтная область. Пространство псевдонимов от 4200 0000 до 4400 0000 4400 0000-4200 0000==200 0000== 32 Мб
@ilhitindustries7499
@ilhitindustries7499 5 жыл бұрын
А скажите пожалуйста про 0x200 равно 9. Где можно на онлайн калькуляторе это проверить? У меня не получается такое значение.Спасибо.
@NRelectronics
@NRelectronics 5 жыл бұрын
Спасибо за вопрос. Калькулятор в винде переключаете в режим для программистов. А так ручкой можно перевести ;-)
@ilhitindustries7499
@ilhitindustries7499 5 жыл бұрын
@@NRelectronics Так и делал но девятки не получается)
@ilhitindustries7499
@ilhitindustries7499 5 жыл бұрын
Так от куда они взялись то?
@NRelectronics
@NRelectronics 5 жыл бұрын
@@ilhitindustries7499 0x200 = 0b000000100000000. И это значение записывается в регистр ODR.
@ilhitindustries7499
@ilhitindustries7499 5 жыл бұрын
Воо, теперь понятно. Всем спасибо
@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 не оригинальный, коих много продается к сожалению на Али.
@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.
@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 жыл бұрын
Посмотрите в режиме отладки в окне дизассемблирования, все увидите. Сейчас нет возможности у меня сделать, я на работе.
@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 тогда жалко, тут нужно иметь побольше полосы, причем лучше кратно больше.
@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 жыл бұрын
@@Frutktt вы, что-то написали одно и тоже...
@Frutktt
@Frutktt 5 жыл бұрын
@@NRelectronics всё верно, я хотел уточнить, выше у товарища 500 Гц. Наверное он имел в виду 500 кГц. 500 кГц и 0.5 МГц я написал, чтобы не повторяться)
@NRelectronics
@NRelectronics 5 жыл бұрын
@@Frutktt вот и я про тоже.
@kholodengineering7105
@kholodengineering7105 5 жыл бұрын
Привет есть работка по STM32 ? занимаетесь написанием?
@NRelectronics
@NRelectronics 5 жыл бұрын
Здравствуйте. Написанием чего или для кого?
@NRelectronics
@NRelectronics 5 жыл бұрын
Так это предложение поработать или просто интересуетесь?
@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 жыл бұрын
Хорошо, что сами определились. Это самое ценное в самообразовании.
@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 жыл бұрын
Ответы на эти вопросы относятся к регистрам. В плейлисте по CMSIS это есть.
This GitHub repository should be illegal
9:21
Mehul - Codedamn
Рет қаралды 8 М.
Chain Game Strong ⛓️
00:21
Anwar Jibawi
Рет қаралды 41 МЛН
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
GPIO STM32 Схемотехника портов ввода-вывода
13:06
Chain Game Strong ⛓️
00:21
Anwar Jibawi
Рет қаралды 41 МЛН