Вассилис
Чт, 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)
Например, если вы хотите создать проект так же, как мой игр 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. А также создавать новую либера!
Я понимаю, что в последнее время было проведено много расширенных работ по 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. А также создавать новую либера!
как сейчас требуется. Конечно, синтаксический сахар, но это делает более лаконичный (и читаемый) код IMHO. А также создавать новую либера!
пико
Пн июня 08, 2015, 16:11
Mrburnette написал:Leaflabs застряли в до-1.0 Arduino World.
Mrburnette
Пн июня 08, 2015, 16:29
Пико написал:
<...>
На самом деле, Leaflabs всегда были светообразными впереди мира Arduino, и во многих отношениях все еще сейчас. И я не просто говорю об их оборудовании. Если вы копаетесь в основных файлах, вы увидите, что они выбросили почти все, что Ардуино, и переписали вещи в гораздо более высоком стандарте. <...>
На самом деле, 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
Библиотека 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.
Вы пробовали это?
Пример здесь (Используя SPI_2 (2)) должен работать без каких -либо модификаций LIB.
Вы пробовали это?
Рекснанет
Чт 14 июля 2016 г., 16:33
Стивестронг написал:@Rexnanet
Пример здесь (Используя SPI_2 (2)) должен работать без каких -либо модификаций LIB.
Вы пробовали это?
Пример здесь (Используя 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 и т. Д