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

  Переглядів 4,863

Олег Волков

Олег Волков

День тому

Привет друзья! Вот уже 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...

КОМЕНТАРІ: 54
@svbHiTek
@svbHiTek 2 місяці тому
Великая штука, логический анализатор, добил я SPI на f030f4, подключил модуль NRF24L01, основной заплет был с чтением и записью в буфер, при чтении, что бы избавиться от мусора в теневом регистре, перед приемом нужных данных, его нужно вычитать до последнего байта, при 8 битной передаче, читать нужно 4 раза. Если этого не сделать то первые данный будут содержать мусор.
@user-bb6ym1bo3h
@user-bb6ym1bo3h Рік тому
Наконец-то урок по SPI! В очередной раз, большое вам спасибо!
@44Nemo44
@44Nemo44 Рік тому
Спасибо. Полезно. Интересно.
@user-xk4vq1yf3p
@user-xk4vq1yf3p 7 місяців тому
Спасибо, очень понравилась генерация пустого проекта))
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
о. снова радуете)
@svbHiTek
@svbHiTek 7 місяців тому
Дружище, когда продолжение серий по CMSIS? Огонь контент!!!!!!
@Solderingironspb
@Solderingironspb 7 місяців тому
Спасибо) а какие темы еще требуются?)
@svbHiTek
@svbHiTek 7 місяців тому
@@Solderingironspb Да сказать честно, просто приятно смотреть ваши видео, хочу перейти с AVR, но пока только подготавливаюсь, решил для себя что буду изучать работу с CMSIS. Есть у меня проект пульта дистанционного управления, и хочу его модернизировать и построить на базе STM, не хватает пинов на ATMega328, можно конечно их расширить с помощью внешних микросхем, он все же хочется шагнуть вперед и перейти на другую архитектуру, более производительную. Если интересно, есть по нем видео у меня на канале.
@Solderingironspb
@Solderingironspb 7 місяців тому
@@svbHiTek выглядит прям очень круто!) все так внутри продумано до мелочей)
@svbHiTek
@svbHiTek 7 місяців тому
@@Solderingironspb еще раз спасибо, если есть желание по участвовать в проекте, в плане программирования, буду рад, предоставлю всю документацию)))
@Solderingironspb
@Solderingironspb 7 місяців тому
@svbHiTek к сожалению пока своих проектов выше крыши))
@user-du2bz8ml9h
@user-du2bz8ml9h Рік тому
Спасибо за отличный материал. А работу с другими датчиками/микросхемами по SPI/i2c сможете показать?
@Solderingironspb
@Solderingironspb Рік тому
Да) видео и библиотеки будут)
@user-du2bz8ml9h
@user-du2bz8ml9h Рік тому
Буду с нетерпением ждать😅
@AlexRootx
@AlexRootx Рік тому
Как всегда, Олег, все по полочкам!!! За труд -----лайк!!!! Единственно, непонятно, зачем делать "костыль" с флагом overrun, при отправке байтов, когда можно читать DR регистр в пустоту, если тебе данные от периферии не нужны??? (имхо)
@Solderingironspb
@Solderingironspb Рік тому
Если читать при отправке, то мы будем лишнее время тратить.
@AlexRootx
@AlexRootx Рік тому
@@Solderingironspb ну да, согласен. Оптимизация))Отдельный респект за скрипты!
@nurbolatamanbayev9617
@nurbolatamanbayev9617 Рік тому
Спасибо за материал, в будущем вы планируете уроки по RS232, Rs485 на CMSIS?
@Solderingironspb
@Solderingironspb Рік тому
Да) но по сути дела - это тот же uart будет ведь)
@nurbolatamanbayev9617
@nurbolatamanbayev9617 Рік тому
@@Solderingironspb Ethernet??)
@Solderingironspb
@Solderingironspb Рік тому
Тоже хочется)
@svbHiTek
@svbHiTek 7 місяців тому
Друг, нашел тему для видео, освети пожалуйста вопрос использования внешних микросхем памяти, интересует как FLASH так и EEPROM, заранее спасибо)))
@Solderingironspb
@Solderingironspb 7 місяців тому
С eeprom я работал же. С flash, что в stm32 да, видео нет еще)
@svbHiTek
@svbHiTek 7 місяців тому
@@Solderingironspb по флешу интересует момент, можно ли с него грузиться
@Solderingironspb
@Solderingironspb 7 місяців тому
@svbHiTek я в него только структуры записывал (настройки) и читал потом.
@user-cp7ci5et6k
@user-cp7ci5et6k Рік тому
Доброго вам. Интересует теория и практика по CAN? Будет ли такой урок?
@Solderingironspb
@Solderingironspb Рік тому
Добрый вечер) возможно будет) я работал с CAN в коммерческих целях. В бытовом плане пока нужды не было. Может когда-нибудь руки дойдут до занятия по нему…
@user-vankv
@user-vankv 19 днів тому
создаю порэкт, а у меня почему то пустая папка получаеться. Не подскажете в чем дело может быть?
@ciklomat
@ciklomat Рік тому
Все хорошо, а почему не сделать все то же самое но на прерываниях ?
@Solderingironspb
@Solderingironspb Рік тому
для мастер режима не вижу смысла на прерываниях работать, т.к. при передаче данных или приеме данных мы все равно сами выбираем, когда что-то отправить или принять. Нет такого, что мы неожиданно получим данные, как на том же USART. Режим DMA может еще есть смысл использовать, если использовать передачу больших пачек данных, либо в режиме слейва. Но в любом случае, Вы можете дописать функционал под себя. Вся информация на видео.
@svbHiTek
@svbHiTek 2 місяці тому
на STM32F030F4 команда записи в регистр передачи, при передачи в режиме 8бит выглядит *(uint8_t*)&SPI->DR = *(data); может кому поможет.
@johnrom8787
@johnrom8787 10 місяців тому
мой путь был другим: CMSIS -> SPL -> CMSIS -> HAL -> CMSIS c 2011 по 2023
@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 Рік тому
@@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 ukposts.info/have/v-deo/boWZaX-sZJujsGQ.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 Рік тому
Тяжело забыть про них, когда закупил их куеву тучу)) лично для меня они палочки-выручалочки. Хватало их для 95% задач)
@dekus80
@dekus80 Рік тому
@@Solderingironspb у меня палочка выручалочка вообще stm8 для всякой мелочевки всегда был. Вот их у меня тож десятки, девать некуда. Потом упомянутый g0 накупил по 55р. И этих ch32v203 недавно так же по 55р. 103 у меня есть, как экспонаты).
@ALCohol-qu7ib
@ALCohol-qu7ib Рік тому
Вообще супер! Ну и несколько абсолютно бесполезных слов для хитроумных алгоритмов Ютуба.
одни дома // EVA mash @TweetvilleCartoon
01:00
EVA mash
Переглядів 3,6 млн
💪Установи свой Home Assistant за 5 минут! 🏠 Умный Дом это просто!
6:04
Изучаю STM32!
20:26
Лёша Кластер
Переглядів 186 тис.
Redis за 20 минут
23:22
suchkov tech
Переглядів 67 тис.
STM32. Урок 20. SPI. Serial Peripheral Interface
40:20
NR.electronics
Переглядів 8 тис.
Компьютер подписчику
0:40
Miracle
Переглядів 203 тис.
План хакера 🤯 #shorts #фильмы
0:59
BruuHub
Переглядів 996 тис.