STM32. CMSIS. Урок#07: SPI. Теория. Мастер режим. Отправка и прием данных.

Поделиться
HTML-код
  • Опубликовано: 3 авг 2024
  • Привет друзья! Вот уже 2 года, как я изучаю STM32.
    Самое время, после опыта работы с библиотекой HAL, когда мы уже более менее ознакомились с периферией микроконтроллера, начать осваивать его на низкоуровневой библиотеке CMSIS.
    В восьмом уроке мы поработаем с SPI. Научимся настраивать его. Разберемся, как принимать и отправлять данные. Как бы не был страшен CMSIS - работа с дисплеями по SPI лучше делать только на CMSIS.
    00:00 Введение
    00:53 CMSIS Project Creator
    02:58 Теория по SPI
    13:49 Регистры.
    19:09 Настройка SPI.
    27:50 Функция передачи данных
    33:02 Пример скорости работы SPI на CMSIS и HAL
    33:46 Функция приема данных
    37:37 Пример работы по SPI с MAX31865
    41:10 Пример работы по SPI с MAX6675
    Материалы из урока: github.com/Solderingironspb/S...
    CMSIS Project Creator: github.com/Solderingironspb/C...
    Библиотека для MAX6675: github.com/Solderingironspb/M...
    Библиотека для MAX31865: github.com/Solderingironspb/M...
    GMG12864_CMSIS: github.com/Solderingironspb/S...
    Мои заметки по CMSIS:github.com/Solderingironspb/S...
    Группа вконтакте: solderingiron.stm32
    ЯндексДзен: dzen.ru/id/622208eed2eb4c6d0c...
  • НаукаНаука

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

  • @user-bb6ym1bo3h
    @user-bb6ym1bo3h Год назад +2

    Наконец-то урок по SPI! В очередной раз, большое вам спасибо!

  • @svbHiTek
    @svbHiTek 5 месяцев назад

    Великая штука, логический анализатор, добил я SPI на f030f4, подключил модуль NRF24L01, основной заплет был с чтением и записью в буфер, при чтении, что бы избавиться от мусора в теневом регистре, перед приемом нужных данных, его нужно вычитать до последнего байта, при 8 битной передаче, читать нужно 4 раза. Если этого не сделать то первые данный будут содержать мусор.

  • @user-xk4vq1yf3p
    @user-xk4vq1yf3p 10 месяцев назад

    Спасибо, очень понравилась генерация пустого проекта))

  • @44Nemo44
    @44Nemo44 Год назад

    Спасибо. Полезно. Интересно.

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

    о. снова радуете)

  • @svbHiTek
    @svbHiTek День назад

    Скрипт шикарен, сейчас хочу перейти на VisualGDB, и ваша разработка как нельзя кстати, спасибо. Кстати Олег, вам часто приходится паять?

    • @Solderingironspb
      @Solderingironspb  День назад

      Очень часто. На работе пальник в руках держу. Почти каждый день)

    • @svbHiTek
      @svbHiTek День назад

      @@Solderingironspb Я не стал здесь писать и оставлять ссылку, поэтому все изложил в сообщении вашей группы в VK

  • @user-du2bz8ml9h
    @user-du2bz8ml9h Год назад +1

    Спасибо за отличный материал. А работу с другими датчиками/микросхемами по SPI/i2c сможете показать?

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

      Да) видео и библиотеки будут)

    • @user-du2bz8ml9h
      @user-du2bz8ml9h Год назад

      Буду с нетерпением ждать😅

  • @svbHiTek
    @svbHiTek 10 месяцев назад

    Дружище, когда продолжение серий по CMSIS?
    Огонь контент!!!!!!

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад

      Спасибо) а какие темы еще требуются?)

    • @svbHiTek
      @svbHiTek 10 месяцев назад

      @@Solderingironspb Да сказать честно, просто приятно смотреть ваши видео, хочу перейти с AVR, но пока только подготавливаюсь, решил для себя что буду изучать работу с CMSIS. Есть у меня проект пульта дистанционного управления, и хочу его модернизировать и построить на базе STM, не хватает пинов на ATMega328, можно конечно их расширить с помощью внешних микросхем, он все же хочется шагнуть вперед и перейти на другую архитектуру, более производительную. Если интересно, есть по нем видео у меня на канале.

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад +1

      @@svbHiTek выглядит прям очень круто!) все так внутри продумано до мелочей)

    • @svbHiTek
      @svbHiTek 10 месяцев назад

      @@Solderingironspb еще раз спасибо, если есть желание по участвовать в проекте, в плане программирования, буду рад, предоставлю всю документацию)))

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад

      @svbHiTek к сожалению пока своих проектов выше крыши))

  • @ALCohol-qu7ib
    @ALCohol-qu7ib Год назад

    Вообще супер!
    Ну и несколько абсолютно бесполезных слов для хитроумных алгоритмов Ютуба.

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

    Как всегда, Олег, все по полочкам!!! За труд -----лайк!!!! Единственно, непонятно, зачем делать "костыль" с флагом overrun, при отправке байтов, когда можно читать DR регистр в пустоту, если тебе данные от периферии не нужны??? (имхо)

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

      Если читать при отправке, то мы будем лишнее время тратить.

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

      @@Solderingironspb ну да, согласен. Оптимизация))Отдельный респект за скрипты!

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

    мой путь был другим: CMSIS -> SPL -> CMSIS -> HAL -> CMSIS c 2011 по 2023

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

    Спасибо за материал, в будущем вы планируете уроки по RS232, Rs485 на CMSIS?

  • @user-vankv
    @user-vankv 3 месяца назад

    создаю порэкт, а у меня почему то пустая папка получаеться. Не подскажете в чем дело может быть?

  • @svbHiTek
    @svbHiTek 5 месяцев назад

    на STM32F030F4 команда записи в регистр передачи, при передачи в режиме 8бит выглядит *(uint8_t*)&SPI->DR = *(data); может кому поможет.

  • @bzd-shuryp1988
    @bzd-shuryp1988 Год назад

    Доброго вам. Интересует теория и практика по CAN?
    Будет ли такой урок?

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

      Добрый вечер) возможно будет) я работал с CAN в коммерческих целях. В бытовом плане пока нужды не было. Может когда-нибудь руки дойдут до занятия по нему…

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

    Все хорошо, а почему не сделать все то же самое но на прерываниях ?

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

      для мастер режима не вижу смысла на прерываниях работать, т.к. при передаче данных или приеме данных мы все равно сами выбираем, когда что-то отправить или принять. Нет такого, что мы неожиданно получим данные, как на том же USART. Режим DMA может еще есть смысл использовать, если использовать передачу больших пачек данных, либо в режиме слейва. Но в любом случае, Вы можете дописать функционал под себя. Вся информация на видео.

  • @svbHiTek
    @svbHiTek 10 месяцев назад

    Друг, нашел тему для видео, освети пожалуйста вопрос использования внешних микросхем памяти, интересует как FLASH так и EEPROM, заранее спасибо)))

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад

      С eeprom я работал же. С flash, что в stm32 да, видео нет еще)

    • @svbHiTek
      @svbHiTek 10 месяцев назад

      @@Solderingironspb по флешу интересует момент, можно ли с него грузиться

    • @Solderingironspb
      @Solderingironspb  10 месяцев назад

      @svbHiTek я в него только структуры записывал (настройки) и читал потом.

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

    единственное я не понял от куда взялся SPI1 в функции отправки(

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

      bool CMSIS_SPI_Data_Transmit_8BIT(SPI_TypeDef* SPI, uint8_t* data, uint16_t Size_data, uint32_t Timeout_ms);
      *SPI - шина SPI.
      Ну и соответственно, каким SPI будете пользоваться, тот и вводите) Мы настраивали SPI1. Вот, я с ним и работал.

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

      @@Solderingironspb так я про это и говорю. где мы объявили SPI_TypeDef. вот этого не вижу(

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

      @@OpenFrimeTVcom Если работаете в VisualGDB, то наведите на SPI_TypeDef и нажмите на F12(в CubeIDE на F3). Вас перенесет в файл stm32f103xb.h (Драйвера CMSIS)
      ну и структура там будет прописана:
      typedef struct
      {
      __IO uint32_t CR1;
      __IO uint32_t CR2;
      __IO uint32_t SR;
      __IO uint32_t DR;
      __IO uint32_t CRCPR;
      __IO uint32_t RXCRCR;
      __IO uint32_t TXCRCR;
      __IO uint32_t I2SCFGR;
      } SPI_TypeDef;
      там же и макросы прописаны:
      #define SPI1 ((SPI_TypeDef *)SPI1_BASE)
      #define SPI2 ((SPI_TypeDef *)SPI2_BASE)
      #define SPI1_BASE (APB2PERIPH_BASE + 0x00003000UL)
      #define SPI2_BASE (APB1PERIPH_BASE + 0x00003800UL)
      ну и т.д.)

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

      @@Solderingironspb аа, понял. спасибо

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

    16:00 А вы проверяли может все таки заведется на 36Мбит?
    Я почему спрашиваю тут один товарищ вроде как заводил на 36Мбит , по крайней мере так он в исходниках пишет с гитхаба . Вся та дребудень написана для ардуины и кажись ни у одного не компилится. Ну и у меня тоже. там толи с библиотеками что то либо сей товарищь лукавит.
    cbm80amiga
    ruclips.net/video/6Uh5Iu-erO0/видео.html

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

      Пробовал. Лог. анализатор показывает полную ерунду. Линия тактирования с ума сходит. Можно конечно было бы списать на то, что лог. анализатор просто не успевает....но...CS при 18 MBits/s имеет длительность 5,2 мкс (при передаче 6 байт), а при настройке на уловные 36 MBits/s имеет длительность 5,42 мкс (при передаче 6 байт), но там на захвате вообще дичь.
      Приложу скрины:
      Вот 18 MBits/s: user-images.githubusercontent.com/68805120/216789716-0fc306cb-8cac-4c04-bd61-2c86314f5693.PNG
      Вот 36 MBits/s: user-images.githubusercontent.com/68805120/216789717-30662bb8-b30f-4602-b815-a16726a74d08.PNG

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

      Да 103 cortex m3 устаревший камень.

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

      Я вообще советую забыть про stm32f103 и клоны с 103 в названии и брать его копию в виде ch32v203 по 60р на riscv. Они работают до 144Мц и потребляют в 6 раз меньше всяких 103.

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

      Тяжело забыть про них, когда закупил их куеву тучу)) лично для меня они палочки-выручалочки. Хватало их для 95% задач)

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

      @@Solderingironspb у меня палочка выручалочка вообще stm8 для всякой мелочевки всегда был. Вот их у меня тож десятки, девать некуда. Потом упомянутый g0 накупил по 55р. И этих ch32v203 недавно так же по 55р. 103 у меня есть, как экспонаты).