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

Поделиться
HTML-код
  • Опубликовано: 10 дек 2024

Комментарии • 71

  • @motoday3580
    @motoday3580 5 лет назад +3

    Отличный урок , пожелания : работа с adc (во всех режимах), usb custom hid (прием и передача), подключение vga камеры (не по usb) .. Спасибо больше за Ваш труд.

  • @grinvich2304
    @grinvich2304 8 месяцев назад

    когда сам смотришь даташиты и код - это белиберда непонятная. Смотрю здесь видео, складываются ощущения будто бы я это знаю. У вас талант объяснять.

  • @Ironziz
    @Ironziz 5 лет назад +2

    Хороший урок , толковое объяснение , так держать 👍

  • @2222-s8x
    @2222-s8x 2 года назад +1

    Моём дисплейчике ssd1306 есть дополнительные отдельные "порты" как для CS, так и для D/C. Если кто столкнулся с тем же - на данном этапе обучения я решил раздельно запитить их низким логическим сигналом с ног микроконтроллера, не связанных с SPI. Таким образом мы без проблем передаём команды/данные лишь в 8-битности.

  • @korpus8481
    @korpus8481 5 лет назад +3

    Хороший урок - обстоятельный. Не могли бы вы показать работу с м\сх AT45... на примере
    записи звука с АЦП на флэш память AT45 и последующее воспроизведение по нажатию кнопки

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Могу но не буду тратить на это время. Т.к. Про AT45 я уже рассказал, АЦП и ЦАП это отдельные и весьма обьемные видеоролики и показывать их работу на примере плеера ну никому не интересно.

  • @ДимаДима-к1н
    @ДимаДима-к1н 4 года назад

    ВОТ это ПРИМЕР, так пример..... выбирай что нравится.! СПС.

  • @sergatmel8242
    @sergatmel8242 5 лет назад +1

    Здорово ! 👍

  • @zsony2215
    @zsony2215 3 года назад +2

    Спасибо понятные объяснения. Очень помогает. Вопрос по схемам почему у вас микрофарады mf? Обычно же uf?

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +2

      Как хочу так и пишу.

    • @zsony2215
      @zsony2215 3 года назад +3

      @@VladimirMedintsev это конечно верно. Но есть же стандарты. И как ваши коллеги, которые ваши схемы читают, обозначают номиналы?
      Я уж не говорю о начинающих которые будут искать в магазине конденсатор на 10 mf.

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +1

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

    • @zsony2215
      @zsony2215 3 года назад

      Спасибо за ответ, хоть он мне и не совсем понятен. И еще раз спасибо за ваши видео. Мне как начинающему очень помогает.

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +1

      Всегда пожалуйста.

  • @DmitriyMelnik
    @DmitriyMelnik 4 года назад

    Отличная работа!

  • @AlexAlex-vq6yg
    @AlexAlex-vq6yg 2 года назад +1

    Не могли бы вы подсказать как реализовать spi в режиме daisy-chain? к сожалению очень мало информации в интернете, как теоретической так и практической реализации этого протокола.

  • @AndreiRomanovGrif
    @AndreiRomanovGrif 3 года назад +1

    Владимир, добрый день! Начал разбираться с SPI и обнаружилась следующая проблема: При попытке передачи данных на линии MOSI видны импульсы передаваемых данных, но на выходе SCLK нет импульсов. Этот выход в момент начала передачи данных переходит из высокого в низкий уровень и все. После окончания передачи так и остаётся в низком уровне. Может подскажете в какую сторону копать, я уже в ступоре.

  • @bubuii
    @bubuii 5 лет назад +1

    Качественно

  • @ivanrusev2270
    @ivanrusev2270 6 месяцев назад

    У меня вопрос чем отличается TI протокола и протокола MOTOROLA и какими битами устанавливаются?

  • @ГеоргийКолосов-ю8р
    @ГеоргийКолосов-ю8р 8 месяцев назад

    Спасибо большое

  • @masjanja11
    @masjanja11 5 лет назад +1

    Владимир, здравствуйте. Я позаимствовал вашу библиотеку и совсем немного её модифицировал, добавив возможность работы с библиотекой LL, ибо HAL и SPI вместе это лютый тормоз. Плюс добавил возможность выбора режима работы SPI. разрешите ли опубликовать её на гитхаб, конечно же с указанием первоисточника.
    P.S. не являюсь профессиональным программистом, программирование - это моё хоби, так что изяществом кода не блещу.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +1

      Можете публиковать где хотите в любом удобном для вас виде. Я совсем не претендую даже на указание своего имени. Для меня это совсем не важный вопрос. Так что с моей стороны нет ни возражений ни пожеланий.

    • @lesharom2405
      @lesharom2405 4 года назад

      Здравствуйте!Можно задать Вам вопрос?

  • @lesharom2405
    @lesharom2405 4 года назад

    Здравствуйте Владимир!Очень хорошее видео у вас получилось по этой теме.Извините за длинный пост,не смог выразить короче и так же точно.
    Скажите,я правильно понял что на всех выводах микросхемы памяти напряжение по SPI не должно превышать 3,6 вольта по даташиту микросхем?
    Заранее Вам большое спасибо!Прежде чем задать вам вопрос искал информацию сколько же вольт должно быть на CS MOSI MISO линиях.)
    Прикупил я как то себе китайский программатор на CH341A.Когда пришёл,проверил его на только чтение микросхемы из старой материнки,прошивка считалась,ну я его и положил до момента когда понадобится.И вот такой момент настал,ТВ приставка зависла на одном канале и не переключалась.Я методом исключения проверил пульт,работает,заменил инфракрасный датчик,(благо заведомо исправный с другой приставки был) не помогло.
    Ну естественно остался самый логичный вариант,прошивка(микросхема 25 серии).Установил я её на программатор,попытался считать,не считалось ничего.Попробовал стереть,стирание было долгим но прошло,попытался прошить,не вышло.Чип после этого вообще не стал определяться.
    Притом чип с той самой материнки при установке снова прочитался.Я грешил на флешку с приставки.Но потом решил померять напряжения на линиях программатора и там оказалось на CS MISO MOSI CLK линиях,везде по 4,8 вольта.И стало быть мне "повезло" и мне попался брак...(

  • @BarVados
    @BarVados Год назад

    Подскажите, по поводу HAL_SPI_TransmitReceive Вы не знаете или я не совсем понятно сформулировал вопрос?
    Очень часто этот метод используется для чтения регистров различных модулей напр. enc28j60, но почему не используются просто HAL_SPI_Transmit и HAL_SPI_Receive?
    Каков принцип работы HAL_SPI_TransmitReceive ?

    • @VladimirMedintsev
      @VladimirMedintsev  Год назад +1

      Принципе работы любой функции прекрасно становится понятен при чтении ее кода. Т.е. на полном серьезе вы можете просто сравнить код этих функций и увидеть разницу.
      На самом деле почему используют TransmitReceive - да из-за удобстве. Не нужно как в случае с двумя функциями тратить время на проверку блокировки интерфейса, не нужно дважды проверять готовность.

  • @ДмитроПерший
    @ДмитроПерший 5 лет назад

    Хотя сейчас ещё раз "нырнул" в даташит дисплея и там на странице 65 указано, что данные цвета передаются всё таки двумя байтами. Но при этом указано, что биты DBI[2:0] регистра 3Ah должны быть выставлены в "101". Нужно будет проверить. Может у меня по умолчанию выставлены в "110" и передача должна быть тремя битами (для 18-ти битного цвета). Дааа... не зря опытные программисты говорят, что работать с графикой и дисплеями - это уже достаточно сложно. Наскоком разобраться не получится.

  • @panigo63
    @panigo63 5 лет назад

    Спасибо за уроки! Где можно посмотреть текстовую версию? Заранее благодарен.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Вот под этим видео в описании ссылка на проект - ruclips.net/video/DX3xb50HMaI/видео.html

  • @Insideus2786
    @Insideus2786 5 лет назад

    А какие "недоработочки" для FreeRTOS Вы имеете ввиду, если это не секрет? Задержки?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Там в моей реализации библиотеки не совсем корректно прописаны timeout при ожидании записи больших обьемов данных. На момент написания библиотеки это было не принципиально, а на будущее придется переписать.

  • @МихаилТиунов-с7д
    @МихаилТиунов-с7д 2 года назад +1

    Вопрос по эмуляции SPI. А каким образом устанавливается скорость передачи по SPI ?

    • @VladimirMedintsev
      @VladimirMedintsev  2 года назад +1

      А там же скорость любая. Нет стандарта. Сколько успеваем эмулировать столько и успеваем.

    • @МихаилТиунов-с7д
      @МихаилТиунов-с7д 2 года назад +1

      @@VladimirMedintsev У меня проблема вот какая. Неожиданно вылезла необходимость сделать программный SPI. Но я делаю не через HAL, а напрямую через регистр ODR. А процессор работает на 72 МГц. И скорость получилась слишком большой - управляемая микросхема не успевает, там 5 МГц максимум. И вот думаю как грамотно делать задержки.

    • @VladimirMedintsev
      @VladimirMedintsev  2 года назад +1

      Ну я бы попробовал через таймер. В его обработчике менять ODR и тормозов не будет и остальной код не тормозит.

    • @МихаилТиунов-с7д
      @МихаилТиунов-с7д 2 года назад +1

      @@VladimirMedintsev Спасибо за дельный совет. Как раз один таймер остался

    • @VladimirMedintsev
      @VladimirMedintsev  2 года назад +1

      Плотно там у вас :-)

  • @ДмитроПерший
    @ДмитроПерший 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 и особенно автомобильную электронику.

  • @tupoy_ytub_uberi_psevdonim
    @tupoy_ytub_uberi_psevdonim 2 года назад +1

    я уже второй день ломаю голову над тем как подключить внешнюю флеш память так, что бы она была видна в менеджере ресурсов памяти в IDE.

  • @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. ruclips.net/video/uT2NupiCKcM/видео.html

  • @devel-man
    @devel-man 5 лет назад

    Подскажите пожалуйста как в DSView переключится на бинарное отображение данных из протокола?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +1

      Выбирать не 0:SPI, 1:SPI. Т.е. протокол с единичкой в начале.

    • @devel-man
      @devel-man 5 лет назад

      @@VladimirMedintsev Большое спасибо!

  • @МитяЯрков-ц1п
    @МитяЯрков-ц1п 4 года назад

    Можете подсказать значение DF_PAGE_BITS в функции AT45DB_getPageAddrByte0, а лучше все дефайны Спасибо!

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад +1

      нет, это демонстрационный проект которому несколько лет.

  • @maskon78
    @maskon78 5 лет назад

    А DMA не пробовали прикручивать и потом мерить скорость?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      От использования DMA скорость не изменяется. DMA снижает загрузку процессора за счет того, что выделенный блок памяти передает в интерфейс автоматично. Я в видео говорил почему не использовал DMA потребовалось бы вдвое увеличить видеопамять из-за 9 битного обмена.

  • @BarVados
    @BarVados Год назад

    Здравствуйте! Спасибо за видео. Подскажите пожалуйста есть в hal метод HAL_TransmitReceive чем он отличается от отдельно вызванных transmit receive? Я его использую для чтения регистров ethernet адаптера w5500 . Результаты отличаются от отдельно вызванных методов, исходный код смотрел не понятно почему это написано так, как это работает... Можно ли его заменить коротким методом работающим непосредственно с регистрами stm32, и как будет выглядит этот код? Для лучшего понимания хотелось бы разобраться с этими моментами

  • @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. Просто к этой серии у меня не любовь.

  • @МихаилТиунов-с7д

    Наблюдаю странное поведение SPI микроконтроллера STM32F103C8T6. Логического анализатора и осциллографа под рукой нет - поэтому по косвенным признакам. У меня в устройстве есть АЦП - ADS1220, которое, с нужной мне периодичностью, измеряет напряжение. Оно расположено за гальванической развязкой с общается с микроконтроллером через ISO7242. Так вот, сделав несколько десятков измерений, АЦП перестает запускаться (DRDY перестает дергаться). После перезагрузки микроконтроллера - опять всё работает нормально. Причем - перезагрузку делаю программно. С АЦП в этот вообще момент ничего не происходит т.к. , повторяю - она находится за гальванической развязкой и имеет собственное питание. Делаю вывод что "вешается" SPI микроконтроллера. Может ли такое быть ?

    • @VladimirMedintsev
      @VladimirMedintsev  Год назад

      Систо теоретически может быть все что угодно.
      Что делать? Попробовать не перезагружать МК, а передернуть SPI. Отключив/включив тактирование, переинициализировав, проверив флаги. Ну и прочитать errata

  • @КинобийОбиван
    @КинобийОбиван 5 лет назад

    +

  • @СергейМоскалёв-с3ь

    Ох, уж эта иностранщина! Неужели нельзя по-русски было обозначить: Ведущий Вход Ведомый Выход, и для MOSI соответственно: Ведущий Выход Ведомый Вход? 🤦‍♂