Тёмный

Программирование МК STM32. УРОК 6. Библиотека HAL. LCD 20x4. 4-битный режим 

narod stream
Подписаться 35 тыс.
Просмотров 41 тыс.
50% 1

Опубликовано:

 

1 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 103   
@vitalyoleynikov9268
@vitalyoleynikov9268 6 лет назад
убил вечер с инициализацией на STM32F103C8. все очень просто. не верные задержки при инициализации дисплея. По даташиту самая долгая > 500нс. В тиках проца на 72МГц составит 13.8нс на тик. делим 500нс на 13.8, получаем 36.2 тика (округлим до 40). В void delay(void) меняем 1000 на 40 - for(i=0;i
@kuandykbaikenov9916
@kuandykbaikenov9916 4 года назад
Спасибо друг. Уменшил до 40 заработало👍
@vahtang-testers
@vahtang-testers 2 года назад
Мужики, я разобрался, почему может не работать дисплей с LCD и контроллере STM32L103C8T6! В моем случае проблемой оказался не столько код, сколько питание, т.к. платка с контроллером запитывалась через ST-Link по 4 проводам и я долго подключался к пятивольтовому выводу, не вспоминая, что им там неоткуда взяться. Проблема решилась с запитыванием платки от USB. И в функции delay() нужно ставить i
@Sanchogus
@Sanchogus 8 лет назад
О да, создание своей библиотеки/подключение чужой - это хорошая тема. Не делали такое видео? С удовольствием бы посмотрел, что, как и почему. :) Кстати, можно обозвать пины прямо в кубе, в итоге будут созданы дефайны для пина и порта с этим именем. Таким образом, можно в кубе назвать линии для данных, например D7, D6, D5, D4 и обращаться к ним, как к D7_GPIO_Port, D7_Pin в функциях. Т.е. даже после переноса пинов на другие места код вообще не надо трогать и править порты/пины, т.к. они привязаны к тому, как обозвали пины в кубе.
@ruslanbei2112
@ruslanbei2112 6 лет назад
Почему в LCD_WriteData сдвиг на 3 бита вправо, я голову уже сломал - объясните пожалуйста.
@vursalov
@vursalov 7 лет назад
Непривычно слышать слово "Дисплей" именно через "е". А вообще большое спасибо за уроки! Именно по Вашим урокам хаотически витающие мысли начали оседать по полочкам на свое место. Становится все просто и легко. Спасибо за уроки.
@narodstream552
@narodstream552 7 лет назад
А вот это и есть основная цель занятий, чтобы мысли в кучу собрать. И Вам спасибо за оценку ресурса!
@ЕкатеринаЛоктина-э6к
@@narodstream552 ещё бы код ваш работал , было бы вообще хорошо
@ЕкатеринаЛоктина-э6к
Теоретически люди говорящие дисплей через Е , так же говорят слово секс через Е , интересно как дела с этим у автора .
@YuriyIY
@YuriyIY 8 лет назад
Владимир Александрович, я один заметил, что + подсветки дисплея вместо VCC в схеме подключен к RS? Чет раньше не обращал внимания на схему. Слушал на автомате. :-)
@narodstream552
@narodstream552 8 лет назад
Я знаю, потом в других уроках уже исправленная схема. Невнимательность, что поделаешь.
@99percents
@99percents 4 года назад
Я тоже сразу заметил, когда ещё про RS рассказывал! Удачи, уроки класс!
@Ironziz
@Ironziz 6 лет назад
Огромное Спасибо!!! Уроки очень полезны ! Очень интересно, буду продолжать заниматься, Зарядили энтузиазмом )
@keycimag3316
@keycimag3316 6 лет назад
Мне не понятно, при реализации функции инициализации 39:30 параметром передается число 3 и устно обьясняется, что это 11 (видимо 00000011) в восьмеричной системе. Но откуда функция узнала, что здесь восьмеричная система? Ведь в остальных случая передается 16 и 10 чные! Спасибо за оперативное обьяснение:)
@fisher7452
@fisher7452 4 года назад
Число 3, что в восмиричной, что в десятичной, что в шестнадцатиричной выглядит одинаково и в двоичную переводится как 00000011. Но, конечно, привычка не указывать систему счисления - это повод когда-нибудь долго искать ошибку.
@spindle853
@spindle853 3 года назад
потому что функция void LCD_WriteData(uint8_t dt) принимает параметр восьмибитное число ...вот то что в скобках
@lvladislav96
@lvladislav96 6 лет назад
Почему каждый урок нельзя писать с начала? а то чтоб понять что откуда взялось приходится выискивать это в других уроках...
@narodstream552
@narodstream552 6 лет назад
А потому что так проще. Я тоже могу спросить "А почему нельзя смотреть уроки подряд?". Но я же не спрашиваю. А вот если их смотреть подряд, то не возникнет таких вопросов. И занятия скомпонованы так, что смотреть нужно все рубрики сначала. Да и вообще, зачем мы пишем проекты, если мы не можем ими в дальнейшем воспользоваться. И вообще, я уже 100 раз отвечал на этот вопрос. Да и ладно, если Вы такой вопрос задали где-то в 100-м уроке, но досмотреть до 6-го если тяжело, то, видимо, и смотреть тогда уроки не зачем. P S. Школьник идёт в школу сначала в 1 класс и затем в других классах он использует накопленный опыт.
@ВладимирГрачев-в4к
Здравствуйте, дошел до ЛСД и тут у меня загвоздка, дисплей у меня QAPAS 1602А, не получается инициализировать, после прошивки горят обе линии всеми пикселями, до прошивки горела только нижняя линия, подскажите в чем может быть причина?
@viktorpiasta6132
@viktorpiasta6132 6 лет назад
Та же проблема.
@spindle853
@spindle853 3 года назад
во первых вместо LCD_Command(0x28); в void LCD_ini(void) отправляй LCD_Command(0x20); , во вторых запитай анод подсветки через резистор на 330, например
@Ma_X64
@Ma_X64 6 лет назад
Так дефайнить куски кода не рекомендуется. Поглядите, как сделано в библиотеках. Обычно заключают в какой-нибудь блок вроде do{ }while(0U); Это для того, чтобы гарантировать в коде изолированность дефайна от каких-то других выражений.
@narodstream552
@narodstream552 6 лет назад
Спасибо! Учту на будущее. Хотя, признаться, я чаще вижу мой вариант.
@televizorlol
@televizorlol Год назад
А я решил проблему с lcd.h просто переместив файл к папке Inc, к другим файлам h
@znakomiy_42
@znakomiy_42 2 года назад
Очень сложные уроки в плане восприятия. Создавать новый проект руками, когда в 2 клика можно создать проект без "мусора". Но нет, мы полезем искать разный мусор, удалять его ручками, а между этими поисками полезная инфа и вот приходится слушать, смотреть и перематывать... А вот если начать смотреть с самого первого урока, а не то что интересует и делать все как автар, то все встает на свои места... но мне предыдущие не нужны...
@ДмитрийМихеев-д5р
@ДмитрийМихеев-д5р 3 года назад
У меня на Bluepill не заработало, оказалось 4 вывод не работает на с8т6.Переделал на другой вывод и все получилось.Может поможет кому
@lazarocamargo
@lazarocamargo 6 лет назад
Excellent tutorial. Thanks.
@polbelou743
@polbelou743 4 года назад
Благодарю за уроки, все очень толково и по делу, с помощью полученных знаний подключил немного другой дисплей - WH0802A NGG CT, а это как раз самое оно! Посмотрел, осмыслил и вперед, к поиску новых тупиков))) Шутка.
@СергейГрибовский-б7щ
Спасибо! Очень познавательно!
@vursalov
@vursalov 7 лет назад
4битный режим для stm32f1 для экрана на этом же контроллере только 1602 (16 символов и две строки) нужно чуть по другому проинициализировать, вместо 0x28 пишем 0x08 А также там где задаем курсор, режимы 0x0F / 0x0E / 0x0C - при инициализации нужно в самом конце прописывать. Иначе не получится убрать курсор. Если кому нужно.
@МихаилЖуравель-в2к
Виталий почему именно так? Если смотреть по даташиту то выходит все как в уроке. Как вы до этого добрались?
@РусланХаннанов-ш8ж
А у вас заработало с этой подсказкой?
@TheDenwww
@TheDenwww 5 лет назад
У меня LCD на контроллере KS0066U, для перехода на 4 битный режим надо на DB5 отправить два раза 1, как учесть это в программе не понимаю, это мой первый проект, помогите пожалуйста.
@user_fgk_135jx
@user_fgk_135jx 2 года назад
Спасибо огромное. Отличные уроки для постепенного входжения. Повторил на stm32f103c8n6 - все работает! Конечно надо немного поработать мозгами, многие ответы нашел в комментариях. Продолжайте в том же духе.
@vahtang-testers
@vahtang-testers 2 года назад
Пытаюсь повторить Ваш подвиг, пока безуспешно.
@kulonkul3277
@kulonkul3277 2 года назад
Огромное Спасибо!!! Уроки очень полезны
@nwood4586
@nwood4586 7 лет назад
Привет всем! Автору за видео большой респект! lcd.h без проблем подцепился к main.h после того как стер из lcd.h все инклюды кроме include "main.h". Сам файл lcd.h в папку Inc, а lcd.c в папку Src, как в видео.
@narodstream552
@narodstream552 7 лет назад
Спасибо!
@ЕкатеринаЛоктина-э6к
Говорю за автором надо постоянно доделывать . Уроки не рабочие половина
@kulonkul3277
@kulonkul3277 2 года назад
Огромное Спасибо!!! Уроки очень полезны
@ОлегАсмолов-й5н
@ОлегАсмолов-й5н 2 года назад
Добрый день! Есть такой урок только для 8 битной шины ?
@kulonkul3277
@kulonkul3277 2 года назад
Огромное Спасибо!!! Уроки очень полезны
@eagleheart2751
@eagleheart2751 6 лет назад
Здравствуйте! Делаю все как описано в уроке, только под контроллер stm32f103c8t6. Вместо портов d4-d7 использую b4-b7. Мигающий курсор выводится. а когда пытаюсь выводить символы вместо одного символа выводится два иероглифа. Уже два дня бьюсь. ничего не получается! Подскажите в чем может быть причина. Файлы lcd.h и lcd.c беру уже с уроков вместо мною набранных. Результат тот же. Help!!!
@TheDenwww
@TheDenwww 5 лет назад
#pragma optimize=none void delay(void) { uint16_t i; for(i=0;i
@dazzershell
@dazzershell 4 года назад
Было так при ресете МК во время передачи команд. Повторная инициализация не спасает, внутренняя память символов похоже заполняется говном, лечилось только сбросом питания, команд на сброс самого контроллера дисплея я не нашел.
@vahtang-testers
@vahtang-testers 2 года назад
@@dazzershell Делаю по уроку и тоже с контроллером STM32F103C8T6 использую d4-d7 использую b4-b7. Вообще не запускается, даже с учетом всех рекомендаций, коих немало собралось в комментариях к данному видео. Могли бы Вы поделиться файлом lcd.c для STM32F103C8T6?
@dazzershell
@dazzershell 2 года назад
@@vahtang-testers я городил свой велосипед, без сторонних библиотек, и для экрана сразу использовал и2с расширитель, вам этот код не подойдет. С помощью hal рецепт описан в каком-то из следующих уроков. Экран заводится указанным заклинанием (набором инструкций), проверьте все передачи данных побитно, важно не только данные, но и паузы между передачами. Заклинание не выполняет сброс экрана, если он завис в непонятном состоянии или не стартует - сбросьте питание. Крайне рекомендую применять логический анализатор, ускорит работу и поиск подобных ошибок на порядки, самый дешёвый китайский клон saleae, софт к нему бесплатный.
@vahtang-testers
@vahtang-testers 2 года назад
@@dazzershell В итоге у меня всё запустилось и проблема была вообще не в коде, а в питании дисплея - я подавал на него 3,3., а не 5В. Анализатор логических сигналов у меня сеть (LA1010), но при подключении соответствующим пинам контроллера/дисплея он показывает нечто не соотносящееся с временными диаграммами инициализации из даташита на дисплей. Странно. Тем не менее - всё работает.
@_._._._._
@_._._._._ 4 года назад
Хотел поделился на вашем форуме по этой теме результатами своих изысканий, но увы не проходит проверка примера для подтверждения "человечности"😀. Информации в инете мало на самом деле, многие просто копипастят, конечно это проще . Но если что не стандартное или нечасто встречаемые то караул.
@dazzershell
@dazzershell 4 года назад
Я не понимаю, когда люди выкладывают свои ценные наработки в народ, даже автора канала не понимаю. Это советское воспитание, у нас про таких говорят "хороший человек". Только потом эти люди не могут найти работу в нашей нефтегазоядерной сверхдержаве. У меня на глазах двоих спецов так отбрили, отца моего динамили и обманывали.
@СергейМолочников-ы1ъ
Мы с вами общались в данный момент
@prizhimin
@prizhimin 7 лет назад
вместо (dt>>3)&0x01 лучше бы писать dt & (1
@АлександрДаскаль-е6т
Учите битовую арифметику, это вообще не одно и тоже. 15 >> 3 = 1 & 1 =1 ваш вариант с этими же числами 1
@АлександрДаскаль-е6т
@@Евгений-ы2л9т Да что -ж такое, для того, чтоб узнать true/false, пойдет и так.
@doskhanziyadabek8240
@doskhanziyadabek8240 3 года назад
ничего не понятно личные движение много
@DrargonsM
@DrargonsM 8 лет назад
лайк за видео!
@vitalyoleynikov9268
@vitalyoleynikov9268 6 лет назад
при 40 глючит, остановился на 220
@vladimirrogovoj9949
@vladimirrogovoj9949 5 лет назад
Когда то неплохо изучил Турбо Паскаль, писал свои программки. Решил изучить язык Джава и запутался в библиотеках. Корифеи просветите, сколько времени уходит на изучение библиотек. В каждом ролике говорят - эта функция находится в этой библиотеке здесь. Откуда вы это знаете?
@dazzershell
@dazzershell 4 года назад
Мне с ХАЛ было намного сложнее, чем работать напрямую с регистрами. Описание на нее есть, сгенерированный роботом файл: просто список функций и аргументов. Обзорного знакомства с контроллером не достаточно, все равно надо лазить под капот, изучать их код, изучать мануалы. В основе та же работа с регистрами, короче двойную работу делать приходится и код разбухает неприлично. Моргалка светодиодом весит как целый проект)
@АлександрДаскаль-е6т
@@dazzershell Я пока только вникаю в STM32, вчера смотрел ролик, там автор провел эксперимент, простой ногодрыг с HAL в восемь раз медленней чем с CMSIS. Так, что сделал вывод - HAL только для инициализации, ну или по быстрому чего нибудь.
@onurdemir42
@onurdemir42 6 лет назад
Hi narod,is this code useable to stm32f103c8t ?
@viktorpiasta6132
@viktorpiasta6132 6 лет назад
Yes.But read the commentary of Vitaly Oleynikov who is above.
@LinArt
@LinArt 6 лет назад
Владимир А откуда взяли библиотеку LCD.c ? я как топ рассмотрел что ли откуда она взялась или вы ее на прошлых уроках создавали ?
@narodstream552
@narodstream552 6 лет назад
Если Вы полностью все прошлые мои видео смотрели (включая другие контроллеры), то знаете, откуда. Ну конечно же, ни у кого не украл.
@LinArt
@LinArt 6 лет назад
)) хорошо бы сослаться на материал откуда он берется, Спасибо за ответ
@narodstream552
@narodstream552 6 лет назад
Да я вроде стараюсь всегда и ссылку на урок даю, возможно этот урок был сделан до того, как у меня был сайт. Поэтому сейчас старайтесь также смотреть текстовые версии на сайте и там уже будут кликабельные ссылки на уроки. Спасибо за интерес к ресурсу. А я постараюсь следовать Вашим подсказкам и рекомендациям.
@ЕвгенийАлександров-и9я
Спасибо за уроки. Пытаюсь учить как программирование МК так и саму радиоэлектронику. Вопрос такой: В конце вашего видео видно, что питание индикатора идет от ножки 5 вольт, а на схеме питание указано с ножки Vdd. А там ведь 3 вольта? Подключать все равно как, или я чего то путаю?
@narodstream552
@narodstream552 6 лет назад
От 5 вольт подключать, иначе работать не будет.
@ЕвгенийАлександров-и9я
Ясно. Спасибо.
@YuriyIY
@YuriyIY 8 лет назад
Бред какой-то. Вот не могу проинициализировать дисплей. Ни QC1602A, ни МЭЛТовский 20х4. Поначалу как-то делал вывод библиотекой, которую нашел в инете, малость переписал ее под себя. На 1602 работало. Теперь создал новый проект, и не работает ни моя, ни ваша библиотека. Вот засада. Жду прихода логического анализатора. Будем смотреть диаграммы на ногах. Кстати, а можете снять анализатором диаграммы при инициализации дисплея? Был бы признателен. Не понятно, где засада. То ли ST что-то поменяли при обновлении библиотек, то ли у меня уже глаз замылился. Хоть бросай всё и начинай играться с RFID метками, пришла мне платка такая. Сервопривод с ШИМ уже освоил. А вот с надежным выводом на дисплей засада.
@narodstream552
@narodstream552 8 лет назад
Ну вообще-то мог бы, как будет время сниму конечно и отскриншочу. Не проблема. Вон какой дисплей завели, а это ерунда.
@narodstream552
@narodstream552 8 лет назад
Вот логи анализатора savepic.su/7365194.jpg Не знаю, что они дадут. По ним точно все равно тайминги не отследить, но общая картина в принципе видна. Здесь инициализация дисплея, очистка экрана, переход на позицию 0,0 и вывод символа 'n'
@YuriyIY
@YuriyIY 8 лет назад
Ок, пасиба. Придет мой ЛА, сравню. Делал ЛА из своей дискавери, но он пишет всего 24мс, что есть очень мало. Видимо, заполняет свой какой-то буфер и выкидывает через Com порт. Исходников нет, только прошивка. Было два дисплея на HD44780, спалил отдел электроники. :-) Остался один, мы его распаяли на шлейф, макетировать неудобно очень стало с ним.
@narodstream552
@narodstream552 8 лет назад
У меня тоже 24 мс
@YuriyIY
@YuriyIY 8 лет назад
Вот. Но там неудобная программа. При включении питания, по всем шинам возникает импульс. Программа начинает запись, и пишет только 24мс, а там ожидание стоит в начале инициализации. Получается, программа записывает только фронт установки 3 на шине данных и все. :)
@obuhovmi
@obuhovmi 7 лет назад
Как можно сделать задержку в микросекундах в отдельную библиотеку(файл), чтобы можно его было использовать во всем проекте... у меня не получается вынести в отдельный файл delay.c Идут ошибки __STATIC_INLINE
@dev_zloi
@dev_zloi 8 лет назад
а ещё можно использовать FCMS для более быстрой работы дисплея + можно даже подключить DMA что полностью освободить процессор от вывода символов
@narodstream552
@narodstream552 8 лет назад
+Дмитрий Попов Ну DMA с дисплеем, это уж перебор. не такие уж великие пакеты передаем. Ну хотя пробуйте, может и будет какой то выигрыш. Отпишитесь, что у Вас получится только обязательно.
@dev_zloi
@dev_zloi 8 лет назад
+narod stream проверил только что время заливки TFT экрана 480х272 16 битным цветом. С DMA - 4.76, без(только FCMS) - 11.67. Как видим результат примерно в 2.5 раз лучше. Без FCMS будет ещё хуже.
@dev_zloi
@dev_zloi 8 лет назад
+narod stream без FCMS можно ускорить передачу байт если повесить все выводы на один порт.
@dev_zloi
@dev_zloi 8 лет назад
+narod stream да кстати, забыл добавить что частота моего контроллера 168мгц.
@dev_zloi
@dev_zloi 8 лет назад
+narod stream да кстати, забыл добавить что частота моего контроллера 168мгц.
@alex-petrov
@alex-petrov 7 лет назад
Жесть, минимальное количество полезной информации за максимальное время...
@narodstream552
@narodstream552 7 лет назад
Это бесплатные уроки. Мне кажется, Вы выдвигаете требования не имеющие под собой почвы. Почва - образец бесплатного видео. в котором очень много информации за максимально-короткое время. Вообщем, ведёте Вы себя так, как будто Вы заплатили очень дорого за услугу, а она не была предоставлена должным образом. Тем более этому видео уже много времени, и замечания уже не актуальны.
@МихаилЖуравель-в2к
Алекс, я вас понимаю, когда знаешь 90% по теме то такие уроки только для здорового сна полезны. Но когда знаешь только 10% по теме, то есть шанс узнать все до конца, при этом в сон клонить не будет. Спокойная подача материала способствует его усвоению. Вот я них не знаю и 10%)) сначала изучаю урок на сайте, точнее распечатывая его чтоб все было перед глазами, изучаю так чтоб были вопросы и потом в видео я получаю на них ответы.
@CTO_Mechanik
@CTO_Mechanik 6 лет назад
Вы хотите сказать, что у вас на видео нет рекламы и вы бесплатно тут все выложили? Ну да ладно... По мне кажется что вы просто передрали урок ничего своего не добавили, я бы добавил регулировку контрастности программно в место переменного резистора. Ничего личного спасибо вам за то что есть, могу накидать тем по которым нужно делать уроки их нет в инете. 1-Работа с CD картой чтение и запись в файл. 2-Работа с дисплеем Nextion 3-Весы 4-Часы и вывод даты на дисплей итд можно долго перечислять потому как на stm32 очень мало инфо. Конечно любой труд должен быть оценен ставлю лайк.
@dazzershell
@dazzershell 6 лет назад
При наличии всяких неочевидных глюков и подстав в самом Кале, надо повторять все буква в букву, чтоб хоть что-то заработало, такие видео очень нужны. Например, когда программатор не определялся, я весь лоб расшиб. На наших форумах предлагают "переустановить Кайл, пререзагрузить винду, почистить реестр итд" Кто-то даже советовал винду переставить))). И только на буржуйском форуме среди всяких бытовых вопросов написал добрый человек, что надо зайти туда-то и ткнуть туда-то, и тогда она падла заработает.
Далее