Пытаюсь от 3d принтера flying bear ghost 5 запустить штатные материнскую плату и дисплей с помощью Arduino Ide. На плате стоит МК STM32F103VET6, на дисплее ILI9488, соединение параллельное FSMC 16 линий.
Плату можно использовать для своих проектов. На плате есть все, кто имеет 3д принтер , знает: 4 выхода с мосфетами, 5 выходов для шаговиков с гнёздами для драйверов, входа для датчиков и тп, гнездо для Wi-Fi модуля, слот для sd карты и тп. Прошивается просто с помощью stlink, разъёмы для него есть.
Никто не не пробовал запускать данную плату с дисплеем через Ардуино иде?
Код мой компилируется, загружается, только нет изображения, светодиоды дисплея только горят, пытался вывести цветные полосы.
`
/* Подключение:
ILI9488 STM32 (FSMC)
D0-D15 PD14, PD15, PD0, PD1, PE7-PE15, PD8-PD10
RS (A0) PD11 (FSMC_A0)
WR PD5 (FSMC_NWE)
RD PD4 (FSMC_NOE)
RESET PC6
LED PWM (PD13)
*/
#include <Arduino.h>
// Настройка адресов FSMC для ILI9488
#define FSMC_BASE ((uint32_t)0x60000000) // Bank1 NOR/PSRAM
#define CMD_ADDRESS (FSMC_BASE) // Команда (RS=0)
#define DATA_ADDRESS (FSMC_BASE | 0x00008000) // Данные (RS=1, A16=1)
#define TFT_RST_PIN PC6
#define TFT_BL_PIN PD13
// Цвета в формате RGB565
#define RGB565(r,g,b) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | ((b) >> 3))
#define ILI9486_BLACK RGB565(0, 0, 0)
#define ILI9486_WHITE RGB565(255, 255, 255)
#define ILI9486_RED RGB565(255, 0, 0)
#define ILI9486_GREEN RGB565(0, 255, 0)
#define ILI9486_BLUE RGB565(0, 0, 255)
void init_FSMC();
void init_ILI9488();
void write_command(uint8_t cmd);
void write_data(uint16_t data);
void set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
void setup() {
pinMode(TFT_RST_PIN, OUTPUT);
// Сброс дисплея
digitalWrite(TFT_RST_PIN, LOW);
delay(100);
digitalWrite(TFT_RST_PIN, HIGH);
delay(100);
// Инициализация FSMC и дисплея
init_FSMC();
init_ILI9488();
// Включение подсветки
pinMode(TFT_BL_PIN, OUTPUT);
digitalWrite(TFT_BL_PIN, HIGH);
set_window(0, 0, 479, 319);
for (uint16_t y = 0; y < 320; y++) {
for (uint16_t x = 0; x < 480; x++) {
uint16_t color;
if (x < 160) color = RGB565(255, 0, 0); // Красный
else if (x < 320) color = RGB565(0, 255, 0); // Зеленый
else color = RGB565(0, 0, 255); // Синий
write_data(color);
}
}
}
void loop() {
}
// Инициализация FSMC
void init_FSMC() {
// Включаем тактирование FSMC и GPIO
RCC->AHBENR |= RCC_AHBENR_FSMCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPDEN | RCC_APB2ENR_IOPEEN | RCC_APB2ENR_IOPCEN;
// Настройка GPIO для данных (D0-D15)
// PD0, PD1, PD8-D10, PD14-D15, PE7-PE15
GPIOD->CRL = 0x44444444; // PD0, PD1 как альтернативная функция
GPIOD->CRH = 0xBBBB444B; // PD8-PD10, PD14-PD15 как альтернативная функция
GPIOE->CRH = 0xBBBBBBBB; // PE8-PE15 как альтернативная функция
GPIOE->CRL = 0xB0000000; // PE7 как альтернативная функция
// Управляющие сигналы
// PD4: NOE (RD), PD5: NWE (WR), PD7: NE4 (CS)
GPIOD->CRL &= ~(GPIO_CRL_MODE4 | GPIO_CRL_MODE5 | GPIO_CRL_MODE7);
GPIOD->CRL |= (0x0B << (4 * 4)) | (0x0B << (5 * 4)) | (0x0B << (7 * 4)); // AF push-pull 50MHz
// Адресная линия A0 (RS) - PD11
GPIOD->CRH &= ~GPIO_CRH_CNF11;
GPIOD->CRH |= GPIO_CRH_CNF11_1; // AF push-pull
GPIOD->CRH |= GPIO_CRH_MODE11; // 50MHz
// Настройка FSMC Bank1 для NE4 (PD7)
FSMC_Bank1->BTCR[4] = 0x00001091; // FSMC_BCR1_MBKEN | FSMC_BCR1_MWID_0 | FSMC_BCR1_WREN | FSMC_BCR1_EXTMOD
FSMC_Bank1->BTCR[5] = 0x00100B00; // FSMC_BTR1_ADDSET(1) | FSMC_BTR1_DATAST(11)
FSMC_Bank1E->BWTR[4] = 0x00100B00; // Extended timing
}
// Инициализация дисплея ILI9488
void init_ILI9488() {
delay(120); // Ждем после сброса
//----- Gamma Correction -----
write_command(0xE0); // Positive Gamma
write_data(0x00);
write_data(0x03);
write_data(0x09);
write_data(0x08);
write_data(0x16);
write_data(0x0A);
write_data(0x3F);
write_data(0x78);
write_data(0x4C);
write_data(0x09);
write_data(0x0A);
write_data(0x08);
write_data(0x16);
write_data(0x1A);
write_data(0x0F);
write_command(0xE1); // Negative Gamma
write_data(0x00);
write_data(0x16);
write_data(0x19);
write_data(0x03);
write_data(0x0F);
write_data(0x05);
write_data(0x32);
write_data(0x45);
write_data(0x46);
write_data(0x04);
write_data(0x0E);
write_data(0x0D);
write_data(0x35);
write_data(0x37);
write_data(0x0F);
//----- Power Control -----
write_command(0xC0); // Power Control 1
write_data(0x17); // Vreg1out
write_data(0x15); // Vreg2out
write_command(0xC1); // Power Control 2
write_data(0x41); // VGH/VGL
write_command(0xC5); // VCOM Control
write_data(0x00);
write_data(0x12); // VCOM
write_data(0x80);
//----- Display Settings -----
write_command(0x36); // Memory Access Control
write_data(0x48); // BGR order, landscape (попробуйте 0xE8 если не работает)
write_command(0x3A); // Pixel Format
write_data(0x55); // 16-bit RGB565
write_command(0xB0); // Interface Mode
write_data(0x00); // SDO not used
write_command(0xB1); // Frame Rate
write_data(0xA0); // 60Hz
write_command(0xB4); // Display Inversion
write_data(0x02); // 2-dot inversion
write_command(0xB6); // Display Function
write_data(0x02); // Scan direction: top to bottom
write_data(0x02); // 320 lines
write_data(0x3B); //
write_command(0xE9); // Set Image Function
write_data(0x00); // Disable 24-bit data
//----- Exit Sleep Mode -----
write_command(0x11); // Sleep Out
delay(150); // Обязательная задержка!
//----- Display On -----
write_command(0x29); // Display On
delay(25);
}
// Запись команды
void write_command(uint8_t cmd) {
(volatile uint16_t)CMD_ADDRESS = cmd;
}
// Запись данных
void write_data(uint16_t data) {
(volatile uint16_t)DATA_ADDRESS = data;
}
// Установка окна
void set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
write_command(0x2A);
write_data(x0 >> 8);
write_data(x0 & 0xFF);
write_data(x1 >> 8);
write_data(x1 & 0xFF);
write_command(0x2B);
write_data(y0 >> 8);
write_data(y0 & 0xFF);
write_data(y1 >> 8);
write_data(y1 & 0xFF);
write_command(0x2C);
}
`