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... Наука
Наконец-то урок по SPI! В очередной раз, большое вам спасибо!
Великая штука, логический анализатор, добил я SPI на f030f4, подключил модуль NRF24L01, основной заплет был с чтением и записью в буфер, при чтении, что бы избавиться от мусора в теневом регистре, перед приемом нужных данных, его нужно вычитать до последнего байта, при 8 битной передаче, читать нужно 4 раза. Если этого не сделать то первые данный будут содержать мусор.
Спасибо, очень понравилась генерация пустого проекта))
Спасибо. Полезно. Интересно.
о. снова радуете)
Скрипт шикарен, сейчас хочу перейти на VisualGDB, и ваша разработка как нельзя кстати, спасибо. Кстати Олег, вам часто приходится паять?
Очень часто. На работе пальник в руках держу. Почти каждый день)
@@Solderingironspb Я не стал здесь писать и оставлять ссылку, поэтому все изложил в сообщении вашей группы в VK
Спасибо за отличный материал. А работу с другими датчиками/микросхемами по SPI/i2c сможете показать?
Да) видео и библиотеки будут)
Буду с нетерпением ждать😅
Дружище, когда продолжение серий по CMSIS?
Огонь контент!!!!!!
Спасибо) а какие темы еще требуются?)
@@Solderingironspb Да сказать честно, просто приятно смотреть ваши видео, хочу перейти с AVR, но пока только подготавливаюсь, решил для себя что буду изучать работу с CMSIS. Есть у меня проект пульта дистанционного управления, и хочу его модернизировать и построить на базе STM, не хватает пинов на ATMega328, можно конечно их расширить с помощью внешних микросхем, он все же хочется шагнуть вперед и перейти на другую архитектуру, более производительную. Если интересно, есть по нем видео у меня на канале.
@@svbHiTek выглядит прям очень круто!) все так внутри продумано до мелочей)
@@Solderingironspb еще раз спасибо, если есть желание по участвовать в проекте, в плане программирования, буду рад, предоставлю всю документацию)))
@svbHiTek к сожалению пока своих проектов выше крыши))
Вообще супер!
Ну и несколько абсолютно бесполезных слов для хитроумных алгоритмов Ютуба.
Как всегда, Олег, все по полочкам!!! За труд -----лайк!!!! Единственно, непонятно, зачем делать "костыль" с флагом overrun, при отправке байтов, когда можно читать DR регистр в пустоту, если тебе данные от периферии не нужны??? (имхо)
Если читать при отправке, то мы будем лишнее время тратить.
@@Solderingironspb ну да, согласен. Оптимизация))Отдельный респект за скрипты!
мой путь был другим: CMSIS -> SPL -> CMSIS -> HAL -> CMSIS c 2011 по 2023
Спасибо за материал, в будущем вы планируете уроки по RS232, Rs485 на CMSIS?
Да) но по сути дела - это тот же uart будет ведь)
@@Solderingironspb Ethernet??)
Тоже хочется)
создаю порэкт, а у меня почему то пустая папка получаеться. Не подскажете в чем дело может быть?
на STM32F030F4 команда записи в регистр передачи, при передачи в режиме 8бит выглядит *(uint8_t*)&SPI->DR = *(data); может кому поможет.
Доброго вам. Интересует теория и практика по CAN?
Будет ли такой урок?
Добрый вечер) возможно будет) я работал с CAN в коммерческих целях. В бытовом плане пока нужды не было. Может когда-нибудь руки дойдут до занятия по нему…
Все хорошо, а почему не сделать все то же самое но на прерываниях ?
для мастер режима не вижу смысла на прерываниях работать, т.к. при передаче данных или приеме данных мы все равно сами выбираем, когда что-то отправить или принять. Нет такого, что мы неожиданно получим данные, как на том же USART. Режим DMA может еще есть смысл использовать, если использовать передачу больших пачек данных, либо в режиме слейва. Но в любом случае, Вы можете дописать функционал под себя. Вся информация на видео.
Друг, нашел тему для видео, освети пожалуйста вопрос использования внешних микросхем памяти, интересует как FLASH так и EEPROM, заранее спасибо)))
С eeprom я работал же. С flash, что в stm32 да, видео нет еще)
@@Solderingironspb по флешу интересует момент, можно ли с него грузиться
@svbHiTek я в него только структуры записывал (настройки) и читал потом.
единственное я не понял от куда взялся SPI1 в функции отправки(
bool CMSIS_SPI_Data_Transmit_8BIT(SPI_TypeDef* SPI, uint8_t* data, uint16_t Size_data, uint32_t Timeout_ms);
*SPI - шина SPI.
Ну и соответственно, каким SPI будете пользоваться, тот и вводите) Мы настраивали SPI1. Вот, я с ним и работал.
@@Solderingironspb так я про это и говорю. где мы объявили SPI_TypeDef. вот этого не вижу(
@@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)
ну и т.д.)
@@Solderingironspb аа, понял. спасибо
16:00 А вы проверяли может все таки заведется на 36Мбит?
Я почему спрашиваю тут один товарищ вроде как заводил на 36Мбит , по крайней мере так он в исходниках пишет с гитхаба . Вся та дребудень написана для ардуины и кажись ни у одного не компилится. Ну и у меня тоже. там толи с библиотеками что то либо сей товарищь лукавит.
cbm80amiga
ruclips.net/video/6Uh5Iu-erO0/видео.html
Пробовал. Лог. анализатор показывает полную ерунду. Линия тактирования с ума сходит. Можно конечно было бы списать на то, что лог. анализатор просто не успевает....но...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
Да 103 cortex m3 устаревший камень.
Я вообще советую забыть про stm32f103 и клоны с 103 в названии и брать его копию в виде ch32v203 по 60р на riscv. Они работают до 144Мц и потребляют в 6 раз меньше всяких 103.
Тяжело забыть про них, когда закупил их куеву тучу)) лично для меня они палочки-выручалочки. Хватало их для 95% задач)
@@Solderingironspb у меня палочка выручалочка вообще stm8 для всякой мелочевки всегда был. Вот их у меня тож десятки, девать некуда. Потом упомянутый g0 накупил по 55р. И этих ch32v203 недавно так же по 55р. 103 у меня есть, как экспонаты).