Подключение st7735 дисплея к lgt8f328p

Кто нибудь работал с такой конфигурацией? Проблема следующая: дисплей подключен через хардварный spi, распиновка 100% верная, питание и лог. уровни 3.3 вольта, библиотека adafruit st7735. Заливаю скетч в stm32f103c8t6 все работает. В lgt скетч также заливается без проблем, но экран белый и ничего не происходит. Перелопатил кучу сайтов, решения так и не нашел. Пишут что spi у lgt физически отличается от атмег и некоторые библиотеки не умеют с ним работать, но решения этой проблемы нет. Пробовал вносить изменения в библиотеку spi, а также в adafruit gfx- толку ноль. Пробовал менять частоту контроллера, также ноль. Пробовал другие библиотеки, но и тут тупик. Варианты у меня закончились к сожалению.

Вот код, который использовал:

#include <Adafruit_GFX.h>    
#include <Adafruit_ST7735.h> 
#include <SPI.h>

#define TFT_CS        3
#define TFT_DC        2
#define TFT_RST       4
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void) {
 tft.initR(INITR_BLACKTAB);     
 uint16_t time = millis();
 tft.fillScreen(ST77XX_BLACK);
 time = millis() - time;
 delay(500);
 tftPrintTest();}

void loop() {}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.setRotation(3);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(15, 0);
  tft.setTextColor(ST77XX_RED);
  tft.setTextSize(1);
  tft.println(utf8rus("Наименование дисплея "));
  tft.setCursor(25, 15);
  tft.setTextSize(1,2);
  tft.println("YFY177NPQQ906-С");
  tft.setTextColor(ST77XX_YELLOW);
  tft.setCursor(35, 30);
  tft.setTextSize(1);
  tft.println(utf8rus("Контроллер"));
  tft.setCursor(40, 45);
  tft.setTextSize(1,2);
  tft.println("ST7735S");
  tft.setTextColor(ST77XX_GREEN);
  tft.setCursor(35, 60);
  tft.setTextSize(1);
  tft.println(utf8rus("Биюлиотека"));
  tft.setCursor(25, 75);
    tft.setTextSize(1,2);
  tft.println("Adafruit st7735.h");
  tft.setCursor(5, 95);
  tft.setTextSize(1);
  tft.println(utf8rus("Подключение по SPI шине"));
}
String utf8rus(String source){
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xBF){
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;}}}
m[0] = n; target = target + String(m);}
return target;}

На STM код работает вот так:

запусти на софтовом на тех же пинах

Для лгбт же какое-то ядро нужно ставить в IDE.

Пробовал, изображения также нет.

Ну это само-собой. Ядро стоит.

не может быть! покажи строку инициализации

Конкретно в этом скетче выводится просто статическая картинка, Я пробовал заливать grafictest из примера к библиотеке. В этом случае на экране время от времени проскакивает цветная рябь, затем исчезает и снова белый экран.

полную строку

Работал с SPI и LGT - без замечаний.
Ты бы код научился сначала вставлять.

1 лайк

у адафрута не для всех дисплеев строки инициализации одинаковые почему-то

Да я первый раз на форуме пишу, не до конца разобрался еще.

Да, но точно такой же скетч, без каких либо изменений на stm ядре запускается без нареканий.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>

#define TFT_CS        3
#define TFT_DC        2
#define TFT_RST       4
//#define TFT_MOSI 11  // Data out
//#define TFT_SCLK 13  
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);


void setup(void) {
 SPI.begin();
 tft.initR(INITR_BLACKTAB);      
  uint16_t time = millis();
  tft.fillScreen(ST77XX_BLACK);
  time = millis() - time;
  delay(500);
    tftPrintTest();}

это ты на хардовый инициируешь, на софтовый строка выше и выбор кристалла не на том пине

#if defined(__LGT8F_SSOP20__)
#define PIN_SPI_SS    (9)          // Redirected in main.cpp at line 77
#else
#define PIN_SPI_SS    (10)
#endif
#define PIN_SPI_MOSI  (11)
#define PIN_SPI_MISO  (12)
#define PIN_SPI_SCK   (13)

За строку знаю. Пробовал с ней, MOSI и SCK оставлял так же на 11 и 13 пинах, потом пробовал с MOSI и SCK на других пинах ничего. А насчет CS, Я перекинул его конечно на 9 пин, результата нет, но вроде и в описании к библиотеке было написано что cs можно назначить любой цифровой пин. Или ли не понял чего то?

Меня очень сильно сбивает с толку отказ работать именно с этим камнем, непонятно где искать ошибку.

на 10 надо, тут минимум у двоих этот дисплей на этом камне работал, перетащи на пины как тут