Мадиас
Солнце 17 апреля 2016 г., 19:03
Привет,
Потому что мне нужен был TFT на SPI2, я переписал библиотеку и переименовал ее в ADAFRIT_ILI9341_STM_SPI2, чтобы она мог легко сосуществовать со стандартной LIB, поэтому, если вам это нужно, вы можете запустить два независимых ILI9341. Лучшим примером будет использование с другим устройством на SPI1, например NRF24 (как и я) или SD-карта. Преимущество - использовать оба канала DMA для SPI. Другое преимущество - вы не позаботитесь о том, какой SPI вы принимаете в эскизе, все функции ILI9341 автоматически на SPI2.
Использование просто: просто поместите линии SPI модуля TFT в SPI2, остальные выводы могут быть изменены программным обеспечением.
Все примеры должны включать "#include <Adafruit_ili9341_stm_spi2.час>", DMA успешно проверилась (мне не нужно было ничего менять« DMA », связанный в коде, из -за библиотеки Smart SPI, надеюсь, что это правильно), поэтому он заканчивается из коробки.
Потому что мне нужен был TFT на SPI2, я переписал библиотеку и переименовал ее в ADAFRIT_ILI9341_STM_SPI2, чтобы она мог легко сосуществовать со стандартной LIB, поэтому, если вам это нужно, вы можете запустить два независимых ILI9341. Лучшим примером будет использование с другим устройством на SPI1, например NRF24 (как и я) или SD-карта. Преимущество - использовать оба канала DMA для SPI. Другое преимущество - вы не позаботитесь о том, какой SPI вы принимаете в эскизе, все функции ILI9341 автоматически на SPI2.
Использование просто: просто поместите линии SPI модуля TFT в SPI2, остальные выводы могут быть изменены программным обеспечением.
Все примеры должны включать "#include <Adafruit_ili9341_stm_spi2.час>", DMA успешно проверилась (мне не нужно было ничего менять« DMA », связанный в коде, из -за библиотеки Smart SPI, надеюсь, что это правильно), поэтому он заканчивается из коробки.
Werecatf
Солнце 17 апреля 2016 г., 19:40
Это довольно неуклюжий подход. Почему бы просто не добавить еще один конструктор класса в исходный ADAFRIT_ILI9341_STM, который позволяет указать SPI-BUS для использования? Как e.глин. Adafruit_ili9341_stm (uint8_t _spibus, int8_t _cs, int8_t _dc, int8_t _rst = -1)? Это гораздо более чистый подход и не требует нескольких копий библиотеки.
Mrburnette
Солнце 17 апреля 2016 г., 21:48
WereCatf написал:Это довольно неуклюжий подход. <...>
Werecatf
Солнце 17 апреля 2016 г., 22:05
Mrburnette написал:Играть хорошо.
Mrburnette
Солнце 17 апреля 2016 г. 22:10
WereCatf написал:Mrburnette написал:Играть хорошо.
Мадиас
Пн 18 апреля 2016 г. 16:16
Хорошо, игнорируя приведенные выше комментарии, я понял, что DMA на SPI2 не работает, как следует. Похоже, это только «нормальная» передача. На первых тестах я только видел, что все в порядке, но это медленнее, чем на SPI1. У меня был быстрый взгляд в библиотеку SPI, и кажется, как все каналы DMA активны с момента начала реализации. Нужно проверить это дважды, или мне нужен вход.
Рэй: Реализация DMA была сделана Виктором, я только перенес библиотеку (как я помню).
Кстати: установка разных портов SPI для меня немного размыт:
http: // www.STM32duino.com/viewtopic.PHP ... SPI2#P3923
Я думаю
Рэй: Реализация DMA была сделана Виктором, я только перенес библиотеку (как я помню).
Кстати: установка разных портов SPI для меня немного размыт:
http: // www.STM32duino.com/viewtopic.PHP ... SPI2#P3923
Я думаю
SPIClass SecondSPI(2);
SecondSPI.setClockDivider(SPI_CLOCK_DIV32);
Mrburnette
Пн 18 апреля 2016 г., 16:25
Мадиас написал:
<...>
Рэй: Реализация DMA была сделана Виктором, я только перенес библиотеку (как я помню).
Рэй: Реализация DMA была сделана Виктором, я только перенес библиотеку (как я помню).
Martinayotte
Пн 18 апреля 2016 г. 16:27
Это заставляет меня думать, что мы не слышали что -то от Виктора с некоторое время ...
Mrburnette
Пн 18 апреля 2016 г., 16:35
Martinayotte написал:Это заставляет меня думать, что мы не слышали что -то от Виктора с некоторое время ...
Werecatf
Пн 18 апреля 2016 г., 16:35
Мадиас написал:Хорошо, игнорируя приведенные выше комментарии, я понял, что DMA на SPI2 не работает, как следует. Похоже, это только «нормальная» передача. На первых тестах я только видел, что все в порядке, но это медленнее, чем на SPI1.
Racemaniac
Пн 18 апреля 2016 г., 17:46
WereCatf написал:Мадиас написал:Хорошо, игнорируя приведенные выше комментарии, я понял, что DMA на SPI2 не работает, как следует. Похоже, это только «нормальная» передача. На первых тестах я только видел, что все в порядке, но это медленнее, чем на SPI1.
Werecatf
Пн 18 апреля 2016 г., 17:58
Реданьяк написал:WereCatf написал:Мадиас написал:Хорошо, игнорируя приведенные выше комментарии, я понял, что DMA на SPI2 не работает, как следует. Похоже, это только «нормальная» передача. На первых тестах я только видел, что все в порядке, но это медленнее, чем на SPI1.
Мадиас
Вт 19 апреля 2016 г. 6:16
Спасибо за совет с более медленным SPI2, я постараюсь опустить разделитель.
Я пришел к другой проблеме, но это принадлежит почти каждой библиотеке с SPI:
Предположим, что у вас есть два устройства SPI на одном порту:
Сенсорный контроллер (xpt2046 в качестве примера)
ILI9341
ILI9341 работает с низким перегородкой (SetClockDivider (2))
XPT2046 нуждается в по крайней мере SetClockDivider (4) (если не 8)
Таким образом, в обеих библиотеках вам нужна строка setclockdivider () перед каждым выполнением SPI.
(Приведенный выше пример является плохим примером, потому что я не использую библиотеку SPI XPT2046, но Utouch -> http: // www.rinkydinkelectronics.com/библиотека.PHP?ID = 55 Эта либера
Я пришел к другой проблеме, но это принадлежит почти каждой библиотеке с SPI:
Предположим, что у вас есть два устройства SPI на одном порту:
Сенсорный контроллер (xpt2046 в качестве примера)
ILI9341
ILI9341 работает с низким перегородкой (SetClockDivider (2))
XPT2046 нуждается в по крайней мере SetClockDivider (4) (если не 8)
Таким образом, в обеих библиотеках вам нужна строка setclockdivider () перед каждым выполнением SPI.
(Приведенный выше пример является плохим примером, потому что я не использую библиотеку SPI XPT2046, но Utouch -> http: // www.rinkydinkelectronics.com/библиотека.PHP?ID = 55 Эта либера
Rogerclark
Вт 19 апреля 2016 г., 9:52 утра
У меня есть проблемы с NRF905, а также на SPI с Div2, поэтому, поскольку у меня есть доска с NRF905 и ILI9341, мне просто нужно изменить разделитель SPI до и после того Div4)
Добавление призыва к изменению разделителя в каждом из кода ILI9341 (или LIB) NRF905, вероятно, немного замедлит ситуацию.
Пока вы знаете ограничения устройства, вы, вероятно, можете более эффективно кодировать в своем собственном коде (в эскизе), вместо того, чтобы добавлять код для установки разделителя в каждом из вызовов библиотеки.
Добавление призыва к изменению разделителя в каждом из кода ILI9341 (или LIB) NRF905, вероятно, немного замедлит ситуацию.
Пока вы знаете ограничения устройства, вы, вероятно, можете более эффективно кодировать в своем собственном коде (в эскизе), вместо того, чтобы добавлять код для установки разделителя в каждом из вызовов библиотеки.
Мадиас
Вторник 19 апреля 2016 г., 10:30 утра
Поэтому я думаю, что это мудрый идея «объединить» устройства SPI с одним и тем же перегородом на определенной SPI:
Например: NRF и/или XPT2046 на SPI1 и ILI9341, SD-CARD, Winbond EEPROM'S ON SPI2
Наверняка было бы лучше использовать «высокоскоростные устройства SPI» на SPI1, но я не буду переписать библиотеку Radiohead (если кто -то код этого LIB код, знайте, что я имею в виду...)
Например: NRF и/или XPT2046 на SPI1 и ILI9341, SD-CARD, Winbond EEPROM'S ON SPI2
Наверняка было бы лучше использовать «высокоскоростные устройства SPI» на SPI1, но я не буду переписать библиотеку Radiohead (если кто -то код этого LIB код, знайте, что я имею в виду...)
Rogerclark
Вт 19 апреля 2016 г. 10:38 утра
Привет, Матиас
Я избегал использования Radiohead, так как он выглядит как огромное количество кода. Это, вероятно, займет годы до порта, и я только в конечном итоге использовал его 10%.
Я нашел простую библиотеку NRF905 и много взломал ее, чтобы заставить ее работать на STM32 (но, как это взлом, я не добавляю ее в качестве библиотеки, так как код теперь довольно грязный)
Но это работает нормально
Я избегал использования Radiohead, так как он выглядит как огромное количество кода. Это, вероятно, займет годы до порта, и я только в конечном итоге использовал его 10%.
Я нашел простую библиотеку NRF905 и много взломал ее, чтобы заставить ее работать на STM32 (но, как это взлом, я не добавляю ее в качестве библиотеки, так как код теперь довольно грязный)
Но это работает нормально
Мадиас
Вторник 19 апреля 2016 12:25
Я также использую библиотеку Manicbug NRF24, кто -то разместил здесь время назад... Но это также черт "#ifdef" из -за сопутствующего (тоже) многих платформ. Я фанат легких отдельных библиотек для каждой платформы, я не вижу смысла в «поддержке всего» в одной либе.
Mrburnette
Вт 19 апреля 2016 г. 13:03
Мадиас написал:
<...>
Я не вижу смысла в «поддержке всего» в одной либе.
Я не вижу смысла в «поддержке всего» в одной либе.
STM32USER
Чт 18 января 2018 г., 7:04
@madias
Прежде всего, спасибо за библиотеку.
Я не мог отображать изображения на экране со следующими подключениями.
SPI работает на канале 1.
Я проверял соединения снова и снова, и экран остается белым.
Прежде всего, спасибо за библиотеку.
Я не мог отображать изображения на экране со следующими подключениями.
SPI работает на канале 1.
Я проверял соединения снова и снова, и экран остается белым.
#include "SPI.h"
#include
#include // STM32 DMA Hardware-specific library
#define TFT_CS PB4
#define TFT_DC PA15
#define TFT_RST PB3
Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST); // Use hardware SPI
Стивестронг
Чт 18 января 2018 г., 7:27 утра
@stm32user
Вы можете использовать библиотеку по умолчанию из репо Роджера (или моего), это была реализована возможность передать экземпляр SPI в качестве входного параметра в библиотеку.
Таким образом, вы можете определить, какой интерфейс SPI вы хотели бы использовать, а также частоту, если она отличается от 36 МГц:
Вы можете использовать библиотеку по умолчанию из репо Роджера (или моего), это была реализована возможность передать экземпляр SPI в качестве входного параметра в библиотеку.
Таким образом, вы можете определить, какой интерфейс SPI вы хотели бы использовать, а также частоту, если она отличается от 36 МГц:
#include // no need to include SPI.h
SPIClass mySPI(2); // use SPI2
Adafruit_ILI9341_STM tft(TFT_CS, TFT_DC, TFT_RST);
void setup()
{
...
tft.begin(mySPI); // this will set the SPI clock to 36MHz.
/* alternative:
uint32_t frequency = 18000000;
tft.begin(mySPI, frequency);
*/
...
}
STM32USER
Чт 18 января 2018 г. 11:19
@stevestrong Спасибо за ответ.
STM32USER
Чт 18 января 2018 г. 11:56 утра
#include "SPI.h"
#include
#include // STM32 DMA Hardware-specific library
#define TFT_CS PB4
#define TFT_DC PA15
#define TFT_RST PB3
SPIClass mySPI(2); // use SPI2
Adafruit_ILI9341_STM tft(TFT_CS, TFT_DC, TFT_RST);
void Setup(){
tft.begin(mySPI);
tft.fillScreen(ILI9341_BLACK);
}
Стивестронг
Чт 18 января 2018 12:17
Попробуйте это:
#include
#include
#include
#define TFT_CS PB4
#define TFT_DC PA15
#define TFT_RST PB3
SPIClass mySPI(2); // use SPI2
Adafruit_ILI9341_STM tft(TFT_CS, TFT_DC, TFT_RST);
void setup()
{
Serial.begin(9600);
while ( !Serial );
delay(1000);
Serial.println("ILI9341 Test!");
tft.begin();
}
void loop()
{
tft.fillScreen(ILI9341_BLACK);
delay(1000);
tft.fillScreen(ILI9341_RED);
delay(1000);
tft.fillScreen(ILI9341_GREEN);
delay(1000);
tft.fillScreen(ILI9341_BLUE);
}
STM32USER
Чт 18 января 2018 12:21
Я использую Stlink
Этот код не сработал !
тфу.начать (myspi);
Я также пытался сделать
Этот код не сработал !
тфу.начать (myspi);
Я также пытался сделать
Стивестронг
Чт 18 января 2018 г. 13:45
Понятно, что он не работает, если вы используете Stlink и не определяете serial_usb.
Сколько лет вашей репозитории локальная копия?
Поскольку PB3/PB4/PA15 используются интерфейсом отладки, они ранее были зарезервированы для отладки и не доступны в качестве обычных выводов ввода -вывода.
С этот патч Эта проблема была решена, поэтому вы должны обновить локальную копию от GitHub.
А потом попробуйте это:
Сколько лет вашей репозитории локальная копия?
Поскольку PB3/PB4/PA15 используются интерфейсом отладки, они ранее были зарезервированы для отладки и не доступны в качестве обычных выводов ввода -вывода.
С этот патч Эта проблема была решена, поэтому вы должны обновить локальную копию от GitHub.
А потом попробуйте это:
#include
#include
#include
#define TFT_CS PB4
#define TFT_DC PA15
#define TFT_RST PB3
SPIClass mySPI(2); // use SPI2
Adafruit_ILI9341_STM tft(TFT_CS, TFT_DC, TFT_RST);
void setup()
{
tft.begin();
}
void loop()
{
tft.fillScreen(ILI9341_BLACK);
delay(1000);
tft.fillScreen(ILI9341_RED);
delay(1000);
tft.fillScreen(ILI9341_GREEN);
delay(1000);
tft.fillScreen(ILI9341_BLUE);
delay(1000);
}
STM32USER
Чт 18 января 2018 г. 14:13
my @file wirish/stm32f1/wirish_debug.cpp
void enableDebugPorts(void) {
afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY);
}
Стивестронг
Пн 22 января 2018 г., 9:48
Что если вы используете другие булавки в качестве контрольных булавок? Вы пробовали?
минимальный
Солнце 03 июня 2018 11:33
STM32USER
Кстати, вы работали ?.
Кстати, вы работали ?.
минимальный
Пн 18 июня 2018 г., 4:51 утра
Я использую до даты официального репо с Arduino 1.85
// spi2
#define TFT_CS PB12
#define TFT_DC PB11
#define TFT_RST PB10
HardwareTimer pwmtimer(1);
const int pwmOutPin = PA8;
/*----------------ROTARY_ENCODER2 ----------------*/
// timer4 as encoder 1
#define CLK1 PB6
#define DT1 PB7
#define SW1 PB11
/*----------------ROTARY_ENCODER2 ----------------*/
// timer3 as encoder 2
#define CLK2 PA7
#define DT2 PA6
#define SW2 PB12
Стивестронг
Пн 18 июня 2018 г. 8:24 утра
Вы сопоставляете как TFT_CS, так и SW2 с PB12.
И TFT_DC и SW1 до PB11.
Проверьте еще раз, какие булавки вы наносите на карту, для какой функции.
РЕДАКТИРОВАТЬ
Это работает над моим чертежом:
И TFT_DC и SW1 до PB11.
Проверьте еще раз, какие булавки вы наносите на карту, для какой функции.
РЕДАКТИРОВАТЬ
Это работает над моим чертежом:
// spi2
#define TFT_CS PB12
#define TFT_DC PB11
#define TFT_RST PB10
//SPIClass SPI_2(2); // use SPI2
Adafruit_ILI9341_STM tft(TFT_CS, TFT_DC, TFT_RST);
void blink(void)
{
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin();
while (!Serial); delay(10);
SPI.setModule(2); // use SPI2
tft.begin(SPI, 9000000); // set direct frequency value in MHz
}
void loop()
{
Serial.println(millis());
blink();
tft.fillScreen(ILI9341_BLACK);
delay(250);
tft.fillScreen(ILI9341_RED);
delay(250);
tft.fillScreen(ILI9341_GREEN);
delay(250);
tft.fillScreen(ILI9341_BLUE);
delay(250);
}
минимальный
Вт 19 июня 2018 г. 3:25 утра
Стивестронг
Большое спасибо, это сработало очень хорошо, я хотел бы просто желать, чтобы остальные мужчины «скорее всего, как я узнал здесь, в течение 2 лет, я сомневаюсь, что они когда -либо узнают, что дает», просто узнайте у своего великого Замечательный ум. Еще раз спасибо.
Большое спасибо, это сработало очень хорошо, я хотел бы просто желать, чтобы остальные мужчины «скорее всего, как я узнал здесь, в течение 2 лет, я сомневаюсь, что они когда -либо узнают, что дает», просто узнайте у своего великого Замечательный ум. Еще раз спасибо.
Я работаю над проектом, где у меня есть Lora SX1276 на SPI 1 и TFT ILI9341 на SPI2. с 2 линиями ввода/вывода для CS.
Когда я запускаю код на одном SPI, он работает, но когда я инициализации оба нет.
Есть ли способ, которым могут работать SPI ?