Как первоначально установить два порта SPI STM32

Вассилис
Чт, 04 июня 2015 г. 8:18 утра
Если вы хотите использовать два устройства SPI одновременно для достижения максимальной скорости, вы можете подключить первое устройство к порту SPI-1 и второе устройство к порту SPI2.

Например, если вы хотите создать проект так же, как мой игр Webradio, который использует два модуля SPI (модуль Enc28J60 Ethernet и VS1053B MP3 декодер), тогда лучше подключить порт ENC28J60 к SPI-1 и VS1053B к порту SPI-2 к порту SPI-2 к SPI-2-. Это соединение будет максимизировать передачу данных от ENC28J60 в VS1053B.

Кроме того, ENC28J60 работает с максимальной скоростью SPI 20 МГц и VS1053B на 7.8 МГц (макс). Итак, вы можете установить только один раз скорость каждого порта SPI (SPI.SetclockDivider).

С большой помощью Роджера, наконец, мне удалось использовать второй порт SPI моей платы STM32F103C8T.
Я хотел бы представить вам два маленьких примере кода.

Использование первого порта SPI (SPI)
SS<-->PA4
SCK<-->ПА5
Мисо<-->PA6
Моси<-->ПА7
#include byte data; void setup() { SPI.begin(); //Initiallize the SPI 1 port. //SPI.setBitOrder(MSBFIRST); // Set the SPI-1 bit order (*) //SPI.setDataMode(SPI_MODE0); //Set the SPI-1 data mode (**) //Set the SPI speed SPI.setClockDivider(SPI_CLOCK_DIV16); // Slow speed (72 / 16 = 4.5 MHz SPI speed) } void loop() { data = SPI.transfer(0x55); //Send the HEX data 0x55 over SPI-1 port and store the received byte to the variable. delayMicroseconds(10); //Delay 10 micro seconds. }

пико
Солнце 07 июня 2015 г., 4:42
Версия этого примера, вероятно, должна найти путь в папку «Пример». Полезные вещи - я прибегнул, начал смотреть на источник LIB, чтобы попытаться выяснить, что было показано в нескольких линиях здесь.

Я понимаю, что в последнее время было проведено много расширенных работ по SPI с DMA - все должны быть добавлены некоторые примеры программ, когда пыль устроилась.

Пара предложений о обратной совместимости с оригинальной Libmaple Lib:

а) вернуть определения, такие как «spi_4_5mhz» как эквиваленты "spi_baud_pclk_div_16" и т. Д., Просто так старые эскизы скомпилируются. Нет вреда в возможности использовать тоже! Точно так же определить более старый "spi_mode_0", а также "spi_mode0".

б) было возможно передать все параметры конфигурации в методе begin () следующим образом:

SPI.begin (spi_4_5mhz, msbfirst, spi_mode_0);

вместо:

SPI.начинать();
SPI.setbitOder (msbfirst);
SPI.setDatamode (spi_mode0);
SPI.SetClockDivider (SPI_BAUD_PCLK_DIV_16); // 72/16 = 4.5 МГц скорость

как сейчас требуется. Конечно, синтаксический сахар, но это делает более лаконичный (и читаемый) код IMHO. А также создавать новую либера!

Mrburnette
Солнце 07 июня 2015 г. 15:17
Пико написал:<...>
как сейчас требуется. Конечно, синтаксический сахар, но это делает более лаконичный (и читаемый) код IMHO. А также создавать новую либера!

пико
Пн июня 08, 2015, 16:11
Mrburnette написал:Leaflabs застряли в до-1.0 Arduino World.

Mrburnette
Пн июня 08, 2015, 16:29
Пико написал: <...>
На самом деле, Leaflabs всегда были светообразными впереди мира Arduino, и во многих отношениях все еще сейчас. И я не просто говорю об их оборудовании. Если вы копаетесь в основных файлах, вы увидите, что они выбросили почти все, что Ардуино, и переписали вещи в гораздо более высоком стандарте. <...>

пико
Вт, 09 июня 2015 г., 13:01
Mrburnette написал: Я думаю, что вы упустили мою точку зрения: использование «застрявшего» было предназначено для значения, которое они взяли с открытым исходным кодом Arduino Gui, и полностью переписали его в соответствии с их собственными целями: это был доардуино 1.0 графический интерфейс.

Рекснанет
Ср 22 июня 2016 12:57
SPIClass SPI_2(2); //Create an SPI2 object.

Rogerclark
Ср 22 июня 2016 г. 22:02
Вы уже можете сделать это.

Библиотека SPI автоматически создает только один экземпляр SPI, который по умолчанию находится на SPI1.

Вы можете создать экземпляр другого экземпляра SPI в вашем коде и назначить его в конструкторе SPI 2

Проблема в том, что большинство библиотек не позволяют вам передавать SPI, и это жестко закодировано для использования, тогда экземпляр класса «SPI» I.e spi1
Отсюда и необходимость в SetModule

Рекснанет
Ср 29 июня 2016 г., 9:05
Rogerclark написал:Вы уже можете сделать это.

Рекснанет
Чт 14 июля 2016 г. 12:57
Мне удалось сделать это, но только путем изменения класса SPI библиотеки на SPI_2 (Spiclass SPI_2 (2);).

Спасибо.

Стивестронг
Чт 14 июля 2016 г. 13:48
@Rexnanet
Пример здесь (Используя SPI_2 (2)) должен работать без каких -либо модификаций LIB.
Вы пробовали это?

Рекснанет
Чт 14 июля 2016 г., 16:33
Стивестронг написал:@Rexnanet
Пример здесь (Используя SPI_2 (2)) должен работать без каких -либо модификаций LIB.
Вы пробовали это?

Rogerclark
Чт 14 июля 2016 г., 21:49
Функция SetModule - это метод, который мы добавили, чтобы позволить старым библиотекам работать над SPI2 и т. Д

Стивестронг
Пт 15 июля 2016 г., 11:00 утра
Rogerclark написал:Функция SetModule - это метод, который мы добавили, чтобы позволить старым библиотекам работать над SPI2 и т. Д

Рекснанет
Пт 15 июля 2016 г. 12:46
Стивестронг написал:Rogerclark написал:Функция SetModule - это метод, который мы добавили, чтобы позволить старым библиотекам работать над SPI2 и т. Д

Измерение задержки прерывания