Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.

  Рет қаралды 23,743

Vladimir Medintsev

Vladimir Medintsev

5 жыл бұрын

Рассказывается о том, как работает интерфейс SPI и об особенностях его реализации применительно к процессору STM32. Показывается как управлять экранами Nokia 1202.
------------------------------------------
Поддержать автора канала можно перейдя по ссылке:
yoomoney.ru/to/4100116547550395
Или просто отправив перевод на Yandex.кошелек:
4100116547550395
А также переводом по номеру карты Сбер:
4279-3000-1033-0561
------------------------------------------

Пікірлер: 71
@motoday3580
@motoday3580 5 жыл бұрын
Отличный урок , пожелания : работа с adc (во всех режимах), usb custom hid (прием и передача), подключение vga камеры (не по usb) .. Спасибо больше за Ваш труд.
@Ironziz
@Ironziz 5 жыл бұрын
Хороший урок , толковое объяснение , так держать 👍
@grinvich2304
@grinvich2304 2 ай бұрын
когда сам смотришь даташиты и код - это белиберда непонятная. Смотрю здесь видео, складываются ощущения будто бы я это знаю. У вас талант объяснять.
@DmitriyMelnik
@DmitriyMelnik 3 жыл бұрын
Отличная работа!
@sergatmel8242
@sergatmel8242 5 жыл бұрын
Здорово ! 👍
@user-po9cn9og2g
@user-po9cn9og2g 5 жыл бұрын
Качественно
@korpus8481
@korpus8481 5 жыл бұрын
Хороший урок - обстоятельный. Не могли бы вы показать работу с м\сх AT45... на примере записи звука с АЦП на флэш память AT45 и последующее воспроизведение по нажатию кнопки
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Могу но не буду тратить на это время. Т.к. Про AT45 я уже рассказал, АЦП и ЦАП это отдельные и весьма обьемные видеоролики и показывать их работу на примере плеера ну никому не интересно.
@user-vi7wj2nz4b
@user-vi7wj2nz4b 3 ай бұрын
Спасибо большое
@user-gn5uw7ou8y
@user-gn5uw7ou8y 2 жыл бұрын
Моём дисплейчике ssd1306 есть дополнительные отдельные "порты" как для CS, так и для D/C. Если кто столкнулся с тем же - на данном этапе обучения я решил раздельно запитить их низким логическим сигналом с ног микроконтроллера, не связанных с SPI. Таким образом мы без проблем передаём команды/данные лишь в 8-битности.
@lesharom2405
@lesharom2405 3 жыл бұрын
Здравствуйте Владимир!Очень хорошее видео у вас получилось по этой теме.Извините за длинный пост,не смог выразить короче и так же точно. Скажите,я правильно понял что на всех выводах микросхемы памяти напряжение по SPI не должно превышать 3,6 вольта по даташиту микросхем? Заранее Вам большое спасибо!Прежде чем задать вам вопрос искал информацию сколько же вольт должно быть на CS MOSI MISO линиях.) Прикупил я как то себе китайский программатор на CH341A.Когда пришёл,проверил его на только чтение микросхемы из старой материнки,прошивка считалась,ну я его и положил до момента когда понадобится.И вот такой момент настал,ТВ приставка зависла на одном канале и не переключалась.Я методом исключения проверил пульт,работает,заменил инфракрасный датчик,(благо заведомо исправный с другой приставки был) не помогло. Ну естественно остался самый логичный вариант,прошивка(микросхема 25 серии).Установил я её на программатор,попытался считать,не считалось ничего.Попробовал стереть,стирание было долгим но прошло,попытался прошить,не вышло.Чип после этого вообще не стал определяться. Притом чип с той самой материнки при установке снова прочитался.Я грешил на флешку с приставки.Но потом решил померять напряжения на линиях программатора и там оказалось на CS MISO MOSI CLK линиях,везде по 4,8 вольта.И стало быть мне "повезло" и мне попался брак...(
@user-gh4tc2wo5k
@user-gh4tc2wo5k 5 жыл бұрын
Спасибо. Давно ждал это видео. Как то написал комент под другим видеороликом по поводу подключения ILI9341 к плате Discovery 4. Были проблемы и артефакты. Я не учёл, что интерфейс SPI в ILI9341 является 9-ти битным. А я отправлял с Discovery 4 по SPI 8-ми битный массив данных 16-битных цветов 8+8 бит. И таким образом происходила потеря старших битов во втором байте. Т.е., что бы передать данные 16-ти битного цвета для точки, мне нужно передать в два раза больше данных? На примере закраски точки белым цветом: uint8_t SPI_Data [4] = {0x00, 0xFF, 0x00, 0xFF}; Я правильно понял? В инете полно примеров по передаче данных на этот дисплей по параллельной 8-ми битной шине. По SPI только базовые примеры, которые описывают рисование геометрических фигур и закраска одним цветом. Кстати, это всё у меня получилось повторить. Но как только начал ваять свой проект, так и не смог разобраться.. Ещё раз спасибо за видео по СТМ32 и особенно автомобильную электронику.
@AndreiRomanovGrif
@AndreiRomanovGrif 2 жыл бұрын
Владимир, добрый день! Начал разбираться с SPI и обнаружилась следующая проблема: При попытке передачи данных на линии MOSI видны импульсы передаваемых данных, но на выходе SCLK нет импульсов. Этот выход в момент начала передачи данных переходит из высокого в низкий уровень и все. После окончания передачи так и остаётся в низком уровне. Может подскажете в какую сторону копать, я уже в ступоре.
@AlexAlex-vq6yg
@AlexAlex-vq6yg 2 жыл бұрын
Не могли бы вы подсказать как реализовать spi в режиме daisy-chain? к сожалению очень мало информации в интернете, как теоретической так и практической реализации этого протокола.
@zsony2215
@zsony2215 3 жыл бұрын
Спасибо понятные объяснения. Очень помогает. Вопрос по схемам почему у вас микрофарады mf? Обычно же uf?
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Как хочу так и пишу.
@zsony2215
@zsony2215 3 жыл бұрын
@@VladimirMedintsev это конечно верно. Но есть же стандарты. И как ваши коллеги, которые ваши схемы читают, обозначают номиналы? Я уж не говорю о начинающих которые будут искать в магазине конденсатор на 10 mf.
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Вообще не вижу тут почвы для какого-то обсуждения. Хоть словами номинал писать можно, хоть как угодно. Главное это ход мышления. А остальное ну по прошествии лет начинает выглядеть просто как юношеский максимализм.
@zsony2215
@zsony2215 3 жыл бұрын
Спасибо за ответ, хоть он мне и не совсем понятен. И еще раз спасибо за ваши видео. Мне как начинающему очень помогает.
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Всегда пожалуйста.
@panigo63
@panigo63 5 жыл бұрын
Спасибо за уроки! Где можно посмотреть текстовую версию? Заранее благодарен.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Вот под этим видео в описании ссылка на проект - kzfaq.info/get/bejne/er5jq8Vmla6xkX0.html
@masjanja11
@masjanja11 5 жыл бұрын
Владимир, здравствуйте. Я позаимствовал вашу библиотеку и совсем немного её модифицировал, добавив возможность работы с библиотекой LL, ибо HAL и SPI вместе это лютый тормоз. Плюс добавил возможность выбора режима работы SPI. разрешите ли опубликовать её на гитхаб, конечно же с указанием первоисточника. P.S. не являюсь профессиональным программистом, программирование - это моё хоби, так что изяществом кода не блещу.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Можете публиковать где хотите в любом удобном для вас виде. Я совсем не претендую даже на указание своего имени. Для меня это совсем не важный вопрос. Так что с моей стороны нет ни возражений ни пожеланий.
@lesharom2405
@lesharom2405 3 жыл бұрын
Здравствуйте!Можно задать Вам вопрос?
@user-qe2ii8hv8k
@user-qe2ii8hv8k 4 жыл бұрын
ВОТ это ПРИМЕР, так пример..... выбирай что нравится.! СПС.
@user-gh4tc2wo5k
@user-gh4tc2wo5k 5 жыл бұрын
Хотя сейчас ещё раз "нырнул" в даташит дисплея и там на странице 65 указано, что данные цвета передаются всё таки двумя байтами. Но при этом указано, что биты DBI[2:0] регистра 3Ah должны быть выставлены в "101". Нужно будет проверить. Может у меня по умолчанию выставлены в "110" и передача должна быть тремя битами (для 18-ти битного цвета). Дааа... не зря опытные программисты говорят, что работать с графикой и дисплеями - это уже достаточно сложно. Наскоком разобраться не получится.
@user-ve9xh6si1r
@user-ve9xh6si1r 10 ай бұрын
Подскажите, по поводу HAL_SPI_TransmitReceive Вы не знаете или я не совсем понятно сформулировал вопрос? Очень часто этот метод используется для чтения регистров различных модулей напр. enc28j60, но почему не используются просто HAL_SPI_Transmit и HAL_SPI_Receive? Каков принцип работы HAL_SPI_TransmitReceive ?
@VladimirMedintsev
@VladimirMedintsev 10 ай бұрын
Принципе работы любой функции прекрасно становится понятен при чтении ее кода. Т.е. на полном серьезе вы можете просто сравнить код этих функций и увидеть разницу. На самом деле почему используют TransmitReceive - да из-за удобстве. Не нужно как в случае с двумя функциями тратить время на проверку блокировки интерфейса, не нужно дважды проверять готовность.
@Insideus2786
@Insideus2786 5 жыл бұрын
А какие "недоработочки" для FreeRTOS Вы имеете ввиду, если это не секрет? Задержки?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Там в моей реализации библиотеки не совсем корректно прописаны timeout при ожидании записи больших обьемов данных. На момент написания библиотеки это было не принципиально, а на будущее придется переписать.
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim Жыл бұрын
я уже второй день ломаю голову над тем как подключить внешнюю флеш память так, что бы она была видна в менеджере ресурсов памяти в IDE.
@ivanrusev2270
@ivanrusev2270 25 күн бұрын
У меня вопрос чем отличается TI протокола и протокола MOTOROLA и какими битами устанавливаются?
@emmetray9703
@emmetray9703 4 жыл бұрын
Скажите пожалуйста что луще для SPI, I2C использовать CMSIS или HAL? Я спрашиваю потому что я разобрал много примеров по SPI и I2C с использованием CMSIS и везде почти одно и тоже и по мануалу STM32 все верно, НО при комуникации сразными модулями (например Gyroscope, NRF24L01) с CMSIS кодом возникают проблемы ввиде зависаний и не способность писать или читать из регистров и тд. Например сравниваю значения регистров SPI установленные HAL_ом и с значениями установленные CMSIS_ом, все идентично и отправка/прием данных вроде бы правильно, но как я сказал выше иногда зависает иногда вобше бог знает почему и что делает.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Не всегда зависания и прочие артефакты возникают по вине программного обеспечения микроконтроллера. Иногда это является следствием не качественного подключения различных внешних модулей. Иногда не совпадают частоты и прочее и прочее. Невозможно через интернет определить что у вас не так с конкретной железкой. С другой стороны если с использованием библиотеки HAL у вас все работает, а с кодом на CMSIS все сбоит я думаю косяки в коде. Что касается что лучше а что хуже... Лучше то, что работает без ошибок. По сути была взята библиотека CMSIS и обернута в абстракцию HAL. Т.к. внутри себя (если откинуть все проверки и прочее) библиотека HAL содержит CMSIS. kzfaq.info/get/bejne/q7pigdihzqmvk4E.html
@maskon78
@maskon78 5 жыл бұрын
А DMA не пробовали прикручивать и потом мерить скорость?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
От использования DMA скорость не изменяется. DMA снижает загрузку процессора за счет того, что выделенный блок памяти передает в интерфейс автоматично. Я в видео говорил почему не использовал DMA потребовалось бы вдвое увеличить видеопамять из-за 9 битного обмена.
@user-je8oz6lh6w
@user-je8oz6lh6w 2 жыл бұрын
Вопрос по эмуляции SPI. А каким образом устанавливается скорость передачи по SPI ?
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
А там же скорость любая. Нет стандарта. Сколько успеваем эмулировать столько и успеваем.
@user-je8oz6lh6w
@user-je8oz6lh6w 2 жыл бұрын
@@VladimirMedintsev У меня проблема вот какая. Неожиданно вылезла необходимость сделать программный SPI. Но я делаю не через HAL, а напрямую через регистр ODR. А процессор работает на 72 МГц. И скорость получилась слишком большой - управляемая микросхема не успевает, там 5 МГц максимум. И вот думаю как грамотно делать задержки.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Ну я бы попробовал через таймер. В его обработчике менять ODR и тормозов не будет и остальной код не тормозит.
@user-je8oz6lh6w
@user-je8oz6lh6w 2 жыл бұрын
@@VladimirMedintsev Спасибо за дельный совет. Как раз один таймер остался
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Плотно там у вас :-)
@user-yv3hu3tb2o
@user-yv3hu3tb2o 3 жыл бұрын
Можете подсказать значение DF_PAGE_BITS в функции AT45DB_getPageAddrByte0, а лучше все дефайны Спасибо!
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
нет, это демонстрационный проект которому несколько лет.
@devel-man
@devel-man 4 жыл бұрын
Подскажите пожалуйста как в DSView переключится на бинарное отображение данных из протокола?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Выбирать не 0:SPI, 1:SPI. Т.е. протокол с единичкой в начале.
@devel-man
@devel-man 4 жыл бұрын
@@VladimirMedintsev Большое спасибо!
@user-ve9xh6si1r
@user-ve9xh6si1r Жыл бұрын
Здравствуйте! Спасибо за видео. Подскажите пожалуйста есть в hal метод HAL_TransmitReceive чем он отличается от отдельно вызванных transmit receive? Я его использую для чтения регистров ethernet адаптера w5500 . Результаты отличаются от отдельно вызванных методов, исходный код смотрел не понятно почему это написано так, как это работает... Можно ли его заменить коротким методом работающим непосредственно с регистрами stm32, и как будет выглядит этот код? Для лучшего понимания хотелось бы разобраться с этими моментами
@user-je8oz6lh6w
@user-je8oz6lh6w 11 ай бұрын
Наблюдаю странное поведение SPI микроконтроллера STM32F103C8T6. Логического анализатора и осциллографа под рукой нет - поэтому по косвенным признакам. У меня в устройстве есть АЦП - ADS1220, которое, с нужной мне периодичностью, измеряет напряжение. Оно расположено за гальванической развязкой с общается с микроконтроллером через ISO7242. Так вот, сделав несколько десятков измерений, АЦП перестает запускаться (DRDY перестает дергаться). После перезагрузки микроконтроллера - опять всё работает нормально. Причем - перезагрузку делаю программно. С АЦП в этот вообще момент ничего не происходит т.к. , повторяю - она находится за гальванической развязкой и имеет собственное питание. Делаю вывод что "вешается" SPI микроконтроллера. Может ли такое быть ?
@VladimirMedintsev
@VladimirMedintsev 11 ай бұрын
Систо теоретически может быть все что угодно. Что делать? Попробовать не перезагружать МК, а передернуть SPI. Отключив/включив тактирование, переинициализировав, проверив флаги. Ну и прочитать errata
@user-hy3dd3yt2e
@user-hy3dd3yt2e 5 жыл бұрын
+
@stalkerk750
@stalkerk750 5 жыл бұрын
А можно этот код организовать на stm32f103? На нем spi 8-16 битный режим.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Конечно можно.
@stalkerk750
@stalkerk750 5 жыл бұрын
@@VladimirMedintsev Не получилось, на stm32f103c8t6 аппаратно не поддерживает 9-битный режим SPI. (
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Ну сделайте эмуляцию какие проблемы. Там всего-то несколько строчек кода. Более того, код для этой самой эмуляции даже показан в видеоролике.
@stalkerk750
@stalkerk750 5 жыл бұрын
@@VladimirMedintsev Эмуляцию я сделал, она работает очень даже хорошо, но скорость обновления экрана страдает. А можно, сделать программно-аппаратный SPI на STM32? Сначала ножками передать один бит команды, а потом 8 бит данных аппаратно?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Пробуйте все от вас зависит. Вообще просто надо выбирать нормальный процессор. Нормальный это в моем понимании не из серии F1. Просто к этой серии у меня не любовь.
@user-tg6yo7io2y
@user-tg6yo7io2y Жыл бұрын
Ох, уж эта иностранщина! Неужели нельзя по-русски было обозначить: Ведущий Вход Ведомый Выход, и для MOSI соответственно: Ведущий Выход Ведомый Вход? 🤦‍♂
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Нет, нельзя. Это не иностранщина. Инженер обязан знать английский.
@user-je8oz6lh6w
@user-je8oz6lh6w 11 ай бұрын
Сокращеноо ВВВВ и ВВВВ ;-)
@user-tg6yo7io2y
@user-tg6yo7io2y 11 ай бұрын
@@user-je8oz6lh6w Ну! 😂
STM32. Прямой доступ к памяти
17:01
ФРТК МФТИ
Рет қаралды 4,3 М.
Smart Sigma Kid #funny #sigma #comedy
00:25
CRAZY GREAPA
Рет қаралды 5 МЛН
Did you believe it was real? #tiktok
00:25
Анастасия Тарасова
Рет қаралды 6 МЛН
Can You Draw A PERFECTLY Dotted Line?
00:55
Stokes Twins
Рет қаралды 75 МЛН
DO YOU HAVE FRIENDS LIKE THIS?
00:17
dednahype
Рет қаралды 30 МЛН
EEPROM AT24Cxx. Подключаем к STM32. CRC32.
27:09
Олег Волков
Рет қаралды 8 М.
Библиотека для адресных RGB лент STM32
20:04
2. SPI- и I2C-интерфейсы
1:10:26
Электроника и наноэлектроника
Рет қаралды 3,6 М.
Will the battery emit smoke if it rotates rapidly?
0:11
Meaningful Cartoons 183
Рет қаралды 35 МЛН
Lid hologram 3d
0:32
LEDG
Рет қаралды 10 МЛН