• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Работа STM32F401CCU6(Black Pill) с SPI3

Хотя форум про иные модули, но возможно найдется решение моей проблемы.
Развел плату, на которую монтирую модуль STM32F401CCU6
Данный модуль позволяет использовать внешнюю FLASH память или EEPROM(не точно), и подключается путем пайки прямо на плату модуля.
EEPROM_Footprint[1].png
И правда, не совсем понимаю, везде пишут, что к "черной таблетке" подключают EEPROM, но в даташитах на сами "еепромки" написано, что "они" флешки.
Библиотеки в "интернетах" тоже путаются - работают с EEPROM, а а в коде пишут FLASH.
В общем каша уже на начальном этапе, но вопрос не в этом.
Мне удалось отыскать примеры с библиотеками, чтобы подключить флешке-еепромку 25Q16BV от WINBOND и "поиграться" с ней.
*
По умолчанию флешка подключена к чипу на плате так:
FLASH_Original.png
CS -> PA4
SCK -> PA5
MOSI -> PA7
MISO -> PB4(странно, эта нога врода для SPI3 нужна)

Когда припаял микросхему флеша на обратную сторону Black Pill то в мониторе порта(как и в терминале) на нужном порту COM все заработало.
Как писал ранее - развел плату под модуль Black Pill и флешку, только подключил флешку я иначе, как диктовал даташит, а именно:
CS -> PA15
SCK -> PB3
MOSI -> PB4
MISO -> PB5

И тут началось...во первых Black Pill флешку не видит, код внутри пилюли работает, но флеш чип не опознается.
Вначале стал менять режим SPI:
Код:
  SPI.setDataMode(SPI_MODE0);
на
  SPI.setDataMode(SPI_MODE3);
Менял даже в библиотеке SPI.h но безрезультатно.
Запустил CubeMX и посмотрел, какие "ноги" задействованы для SPI3 - и тут первое подозрение, для CS нужна нога PA4
SPI3.png
Но у меня пины с PA0-PA7 заняты интерфейсом motorola 8080 для подключения дисплея по параллельному 8-битному интерфейсу.
Собственно поэтому флешку внешнюю и перекинул на SPI3 и т.к. плату нужно было заказывать к Китае, не проверял на макетке работу интерфейса SPI3.
Развел плату как описал выше и платы через месяц приехали.
Вообще кто-нибудь сталкивался с работой с множественными SPI интерфейсами у Black Pill или большинство людей только лампочками мигают на Black Pill или STM32F4 дискавери?:)
Шутка, или не совсем!
Чтобы использовать у STM32 два или три SPI интерфейса одновременно - для вывода на дисплей, для общения с флешкой и еще для чего нибудь.
По итогу пока не знаю, куда "копать".
Резать дорожки на плате, и переносить контакт 1 у флеш микросхемы с PA15 на PA4...
А дальше больше, для подключения дисплея, по 8-битному интерфейсу, использую библиотеку eSPI_TFT от Bodmer'а.
Еще добавил себе работы тем, что работаю из под ардуино IDE, а это тоже свои особенности.
В интернете масса примеров для кода в Cube IDE и Keil.
Да и HAL и LL "получше" с настройкой SPI справляются, чем адаптированная библиотека от STmicroelectronic под ардуино IDE.
В общем прошу помощи, если кто сможет.
 

Вложения

nikolz

Well-known member
а Вы это проверяли?
Оригинальная плата Black Pill претерпела несколько изменений, которые могут немного сбить с толку. Во всех случаях плата подключена к SPI1, но важно заметить, что на некоторых платах вывод DO (MISO) W25Qxx подключен к PA6, а на некоторых - к PB4. Обязательно проверьте, какой из них используется на самом деле.
 
Нашел решение, как использовать SPI 1,2,3 на ядрах rogerclarc и stm32duino ... остальные не проверял.
Добавил строки
Код:
  SPI.setMOSI(PB5);
  SPI.setMISO(PB4);
  SPI.setSCLK(PB3);
В функцию
SPIFlash::initialize()
По итогу, SPI1 и SP3 работают.

Код:
SPI1(PA7/MOSI, PA6/MISO, PA5/SCLK, PA4/NSS)
SPI3(PB5/MOSI, PB4/MISO, PB3/SCLK, PA15/NSS)
Но, странное явление - раньше думал, что если использовать два или более SPI одновременно для разных устройств, то данные по протоколу будут переданы независимо.
Но согласно анализу данных с помощью logic analiser - например, осуществляется передача данных по SPI1, т.е. CS/NSS/PA4 пин "прижат" к земле.
Скриншот 29-05-2023 08.01.19.png
Данные выходят с MISO1 и успешно принимаются анализатором, но стоит только у SPI3 прижать ногу PA15 к земле, как сразу же пин CS/NSS/PA4 от земли "отжимается", уходит в состояние HIGH и после небольшой паузы(около 281 микросекунд)
начинается передача SPI3, а SPI1 в этот момент не передает.
Возможно я не верно интерпретировал код, либо "физически" так и работают протоколы SPI у одного микроконтроллера?
 
Сверху Снизу