Перейти к содержанию
    

STemWin v5.44 и TFT3.97 с NT35510

Сначала у меня был дисплей на ILI9486 и мне удалось довольно быстро его настроить в STemWin, видимо потому, что он поддерживается библиотекой. Но при подключении было обнаружено, что кристаллы "потекли" (с момента покупки не проверялся и не подключался) и в конечном устройстве использовать его невозможно.

Вскоре получил дисплей на NT35510, который довольно быстро удалось инициализировать и проверить на тестовых программах до подключения STemWin. Все работает без замечаний. Однако после подключения STemWin дисплей не работает, при этом инициализация его проходит нормально.

Наверное, дело в том что команды NT35510 хотя в целом и похожи на ILI9486 имеют отличие - 16битный формат. Например, сброс дисплея для ILI9486: TFT_WriteCmd(01); а для NT35510: TFT_WriteCmd(0100); Возможно, дело именно в этом, но моих знаний STemWin пока не хватает, чтобы что-то поправить в библиотеке.

Скорее всего, ошибка в этой функции:

void LCD_X_Config(void) {
  GUI_DEVICE * pDevice;
  CONFIG_FLEXCOLOR Config = {0};
  GUI_PORT_API PortAPI = {0};

  // Set display driver and color conversion
  pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR,GUICC_565,0,0);
  // Orientation
  //Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
  Config.Orientation = GUI_SWAP_XY;
  //Config.Orientation = GUI_ROTATION_CW;
  //Config.RegEntryMode = 0x6E30;
  LCD_SetSizeEx(0, YSIZE_PHYS, XSIZE_PHYS);
  GUIDRV_FlexColor_Config(pDevice,&Config);
  // Set controller and operation mode
  PortAPI.pfWrite16_A0  = LcdWriteReg;
  PortAPI.pfWrite16_A1  = LcdWriteData;
  PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
  PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
  GUIDRV_FlexColor_SetFunc(pDevice,&PortAPI,GUIDRV_FLEXCOLOR_F66709,GUIDRV_FLEXCOLOR_M16C0B16);
}

Я ее не изменял с момента использования ILI9486. Подскажите, что не так...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отвечу сам себе (.

Судя по мануалу, NT35510 не поддерживается.
Тем не менее, я попробовал это оспорить. Система команд очень похожа, для ввода/вывода используются [в основном] команды ILI9486 0x36,2A,2B,2C,2E. NT35510 должен получить: 0x3600,0x2A00 и так далее. Причем параметры всегда однобайтовые и перед ними должна всегда выводится "инкрементированная" команда. Короче, вот функции LCDConf_FlexColor.c, которые я переписал:

/********************************************************************
*
*       LcdWriteReg
*
* Function description:
*   Sets display register
*/
uint16_t cmd; // текущая команда
uint8_t i;    // текущий параметр команды
static void LcdWriteReg(U16 Data) {
  // ... TBD by user
  Data <<= 8;cmd = Data;i=0;
  *(uint16_t *)ADR_CMD = Data;
}
	/********************************************************************
*
*       LcdWriteData
*
* Function description:
*   Writes a value to a display register
*/
static void LcdWriteData(U16 Data) {
  // ... TBD by user
  if (i == 0){// первый параметр команды
    *(uint16_t *)ADR_DAT = Data;
  }else{// команда и последующий параметр команды
    *(uint16_t *)ADR_CMD = cmd+i;*(uint16_t *)ADR_DAT = Data;
  }
  i++;
}
	/********************************************************************


И это работает!!!
Дисплей: http://www.lcdwiki.com/3.97inch_16BIT_Module_NT35510_SKU:MRB3973
Подключение: STM32F103VET6, FSMC.

Но счастье длилось недолго ибо обнаружил странный глюк при выводе текста. Взял кусок кода из UM01003 v6.18 стр 215:

  // пример вывода текста из UM03001_v6.18.pdf стр. 215
  // вывод должен соответствовать картинке в UM03001_v6.18.pdf
  GUI_SetFont(&GUI_Font8x16);
  GUI_SetBkColor(GUI_BLUE);
  GUI_Clear();
  GUI_SetPenSize(10);
  GUI_SetColor(GUI_RED);
  GUI_DrawLine(80, 10, 240, 90);
  GUI_DrawLine(80, 90, 240, 10);
  GUI_SetBkColor(GUI_BLACK);
  GUI_SetColor(GUI_WHITE);
  GUI_SetTextMode(GUI_TM_NORMAL);
  GUI_DispStringHCenterAt("GUI_TM_NORMAL", 160, 20);
  GUI_SetTextMode(GUI_TM_REV);
  GUI_DispStringHCenterAt("GUI_TM_REV", 160, 36);
  GUI_SetTextMode(GUI_TM_TRANS);
  GUI_DispStringHCenterAt("GUI_TM_TRANS", 160, 52);
  GUI_SetTextMode(GUI_TM_XOR);
  GUI_DispStringHCenterAt("GUI_TM_XOR", 160, 68);
  GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
  GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 84);


К сожалению, через функции GUI_ текст выводится иногда с  ошибками и пока нельзя сказать, что это из-за криво поддержанного контроллера NT35510. Текст внутри виджетов всегда выводится корректно.
 

STemWin_TextNT35510.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, не работает вывод текста именно в режимах GUI_SetTextMode(GUI_TM_NORMAL) и GUI_SetTextMode(GUI_TM_REV). Скорее это не связано с "поддержкой" нового контроллера, я проверил какие команды посылает библиотека в контроллер при выводе текста в этих режимах. Оказалось, что ничего особенного - те же команды 2A,2B,2C. Пробовал увеличивать тайминги по FSMC - не помогло. Удивительно, что не работают только два режима вывода из пяти. Особенно жаль NORMAL, поле EDIT использует для своей инициализации именно этот режим...
Что же делать?... Попробую еще поиграться с инициализацией самого контроллера, если не поможет, значит все дело в библиотеке, будем как-то жить с урезанным текстовым выводом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29.05.2021 в 21:25, ivainc1789 сказал:

дисплей на NT35510, который довольно быстро удалось инициализировать и проверить на тестовых программах

Приветствую. Начинающий. Уже месяц воюю с дисплеем на контроллере nt35510 ( https://aliexpress.ru/item/32807629460.html?spm=2114.13010708.0.0.569733edJNysPx&_ga=2.47249639.1993953292.1638739180-727815846.1636284356&_gac=1.118971899.1637884514.Cj0KCQiAhf2MBhDNARIsAKXU5GT8Rd1LAvk8bi2aPEsVIE99cwpb-QdUmqa6IU76QJLtIRwXg8I5wn0aApfVEALw_wcB ), удалось запустить его только на ESP32 в режиме 8b на модифицированной библиотеке ( https://github.com/Mike120Git/TFT_eSPI ). Не могли бы Вы помочь с инициализацией дисплея на STM32 ? Или "пнуть" в нужную сторону )))...

Примеры от "Вавешаре" или "ЛСДвики" - "Кеил" купить - пока смысла нет (мигрировать не получается), программировать не умею вообще. А код от СТ - не смог даже запустить инициализацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...