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