Ili9341 и сенсорный экран

если работает на DUE по идее должна работать и на STM103F

Не, не сработало.

Установка скорости в библиотеке дисплея была таким образом:

tft.setSPISpeed(20000000)

Так тоже не работает.

// рисовалка 27 цветов
#include "Adafruit_GFX.h"     // Библиотека обработчика графики
#include "Adafruit_ILI9341.h" // Программные драйвера для дисплеев ILI9341
#include "URTouch.h"          // Библиотека для работы с сенсорным экраном

#define TFT_DC 9              // Пин подключения вывода D/C дисплея
#define TFT_CS 10             // Пин подключения вывода CS дисплея
#define TFT_RST 8             // Пин подключения вывода RESET 
// Uno Hardware SPI
//#define TFT_MISO 12           // Пин подключения вывода дисплея SDO(MISO)
//#define TFT_MOSI 11           // Пин подключения вывода дисплея SDI(MOSI)
//#define TFT_CLK 13            // Пин подключения вывода дисплея SCK

//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);  // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);//

#define t_SCK 3               // Пин подключения вывода дисплея T_CLK
#define t_CS 4                // Пин подключения вывода дисплея T_CS
#define t_MOSI 5              // Пин подключения вывода дисплея T_DIN
#define t_MISO 6              // Пин подключения вывода дисплея T_DOUT
#define t_IRQ 7               // Пин подключения вывода дисплея T_IRQ

URTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ); // Создаем объект сенсорного модуля и сообщаем библиотеке распиновку для работы с ним

int x0=0;int y0=21;//
uint16_t color=tft.color565(0,0,0);
byte flag=0;//


void setup(){
  ts.InitTouch();                   // Инициализируем сенсорный модуль дисплея 
  ts.setPrecision(PREC_EXTREME);        // Определяем необходимую точность обработки нажатий: PREC_LOW - низкая, PREC_MEDIUM - средняя, PREC_HI - высокая, PREC_EXTREME - максимальная
 tft.begin();                // Инициализируем начало работы с графическим дисплеем
 tft.setSPISpeed(3000000); 
  tft.setRotation(1);                 // Переводим дисплей в альбомную ориентацию
tft.fillScreen(color);panel();//начальная отрисовка зон экрана
}
 
void loop()
{
  int x, y;                         // Переменные для работы с координатами нажатий
 
  while(ts.dataAvailable())         // Пока имеются данные с сенсорного модуля
  {
    ts.read();                      // Считываем с него данные
    x = ts.getX();                  // Считываем координату нажатия X
    y = ts.getY();                  // Считываем координату нажатия Y
    if((x!=-1) && (y!=-1))          // Если обе координаты в положительном диапазоне (т.е. если есть нажатие) 
    {
      x += 13;                      // Корректируем координату с учетом калибровочных данных
      y += 4;                       // Корректируем координату с учетом калибровочных данных
   //   
      if(y<24&&x>290){tft.fillRect(0,21,320,240,color );x0=0,y0=21;flag=0;}//стираем рисунок
      if(y>24&&flag==2){tft.drawLine(x, y, x0, y0,color);x0=x;y0=y;}//рисуем отрезок выбранным цветом
      if(y>24&&flag==3){x0=x;y0=y;tft.fillCircle(x0, y0,5, color );}//режим стирательной резинки или толстой кисти
      if(y<24&&x>0&&x<20){flag=3;}//включаем режим стирательной резинки или толстой кисти
      if(y>24&&flag==1){flag=2;x0=x;y0=y;}//начало рисования новой серии отрезков
     for(int i=0;i<27;i++){
      if(y<24&&x>10*i+20&&x<10*i+30){flag=1;color=tft.color565(min(180*(i%3),255),min(180*((i/3)%3),255),min(180*((i/9)%3),255));tft.fillCircle(10,10,7,color);}//выбираем цвет рисования и отображаем на индикаторе выбранного цвета
        }
 
   //   
      }
  }
}
////////////////////////
void panel(){
 for(int i=0;i<27;i++){
 tft.fillRect(10*i+20,0,10,20,tft.color565(min(180*(i%3),255),min(180*((i/3)%3),255),min(180*((i/9)%3),255)));//строка кнопок - отрисовка   
 }
 tft.drawRect(290,0,20, 20,ILI9341_RED );//кнопка стирания рисунка 
  tft.drawLine(290,0,310, 20,ILI9341_RED );
  tft.drawLine(290,20,310, 0,ILI9341_RED );
}
/////////////////////////

Можно попробовать еще медленнее:
tft.begin(2000000);
и
tft.begin(1000000);

Еще видел на Гитхабе рекомендацию отредактировать Adafruit_ILI9341.cpp:
Заменить
initSPI(freq);
на
initSPI(freq, SPI_MODE3);

Если это не поможет, тогда остается попробовать библиотеку ILI9341_due
там тоже нужно затормозить хардварный SPI - в файле настроек ILI9341_due_config.h нужно выставить подходящий делитель частоты, у меня работает 8:
#define ILI9341_SPI_CLKDIVIDER SPI_CLOCK_DIV8 // for Uno, Mega,...

Можно конечно, но пока не вижу стратегической цели для УНО :slight_smile:
Ресурсов у неё маловато для работы с готовой графикой. Если бы найти код под чтение пикселей с экрана - возможности расширились бы.