STM32F4 LTDC и дисплеи подходящие для этого интерфейса.

j777
Offline
Зарегистрирован: 20.08.2018

Всем привет! Кто-нибудь знает какие дисплеи работают по интерфейсу LTDC? Вот к примеру у меня есть дисплей на драйвере ILI9486 разрешением 480х320, шина 16 бит. Его реально подключить к STM по LTDC? Подключал его по FSMC с максимально возможной скоростью STMки F407, но получилось разогнаться до частоты обновления экрана(ни одним цветом, а именно вывод картинки) 10Гц. И вот никак не могу найти инфу какие дисплеи жуют LTDC. Читая RM на мой камень толком ничего по своему вопросу не понял(

mixail844
Offline
Зарегистрирован: 30.04.2012

проблема не в дисплее , а в том что в stm32f407 нет LTDC.

судя по даташиту контроллера экрана , скорость обращения при записи , может быть до 20 MHz , 

при такой частоте обновление экрана разрешением 480х320 может происходить до 130 раз в секунду  , а шина FSMC мозжет фунционировать на частоте больсшей чем 20 MHz (сколько точно ,не скажу ибо надо лезть в Reference manual MCU)

какой у вас модуль экрана , на какой интерфейс сконфигурирован "из коробки"(RGB565 ,8080-8 , 8080-16 ,SPI ...) и может ли он быть перегонфигурирован известно только вам и китайцу который вам его прислал.

j777
Offline
Зарегистрирован: 20.08.2018

Да, про отсутствие LTDC на F407 я узнал после того как купил отладочную плату) как в поговорке - "Сначала сделал, потом подумал!"). Дисплей подключен по 8080-16бит. Все делители, множители частоты выставил так, чтобы получить максимально возможные скорости на шинах. Проект написал на CMSIS, вродь все правильно. Но единственное смутило то что, когда писал инициализацию системы тактирования, увидел что флешь память на борту микроконтроллера, способна работать без ошибок на частоте не выше 24МГц. Т.е. пришлось выбрать латентность флешь 6 тактов при частоте шины AHB 168МГц. Ну поэтому и смог выжать 10Гц при обновлении экрана. А 130Гц очень даже заманчивое число)

j777
Offline
Зарегистрирован: 20.08.2018

Еще про возможные 130кадров/секунду. Это получается что FSMC на F407 способна выдать - 320пикселей * 480пикселей * 2байта(цвет 16бит) * 130Гц = 39,9Мбайт/секунду?

mixail844
Offline
Зарегистрирован: 30.04.2012
я тут нашел Aplication Note AN2790 от STM и там есть такая табличка на странице 34 : 
 
 
да ,указанный микроконтроллер   серии STM32F10xxx , его частота 72 МГц , а разрешение экрана ниже ,  но частота обновления экрана выше в нескольно раз . 
значит вы что то настроили нетак , или нетак измеряли в вашем случае . 
я бы на вашем месте ,взял пример из репозиториев STM для вашего камня , с библиотекой STemWin и попробывал бы адаптировать под ваш модуль экрана.
 
mixail844
Offline
Зарегистрирован: 30.04.2012

j777 пишет:
Еще про возможные 130кадров/секунду. Это получается что FSMC на F407 способна выдать - 320пикселей * 480пикселей * 2байта(цвет 16бит) * 130Гц = 39,9Мбайт/секунду?

 

если честно ,без понятия .
"гладко было на бумаге"  - до 130 это в теории , на практике может быть что пиксели матрицы небудут успевать обновиться с такой частотой .или графическая библиотека не держит в памяти МК весь фрейм ( 2  х 320 х 480 Байт) а обсчитывает его "кусками" что требует время
j777
Offline
Зарегистрирован: 20.08.2018

Спасибо большое, Mixail! Попробую Cubom сгенерить поект и протестировать частоту обновления дисплея. Может и правда у меня руки от пятой точки затактированы). А частоту обновления дисплея измерял логическим анализатором. В цикле крутились: инверсия одного разряда порта ВВ и заполнение дисплея пикселями(прорисовка картинки). И только сейчас дошло, что за две итерации этого цикла вывод порта переходил в одно логическое состояние, потом отрисовка картинки, опять изменение состояния вывода, но в противоположное состояние и снова отрисовка картинки. Получается ж 20Гц частота обновления! Как протестю все с Cubom отпишусь, но это не сегодня. Завтра вечером или в субботу утром.

j777
Offline
Зарегистрирован: 20.08.2018

Получилось разогнать FSMC до 60Гц! Лол я(, когда инициализировал систему тактирования не использовал оператор присвоения значения(ну "="). Писал так(строка кода которая тормозила микроконтроллер) "RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC;", ну и дальнейшая запись битов в регистр. Нужно было так: "RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC;", либо "RCC->PLLCFGR = 0;", ну суть в целом такая. Надеялся, что регистры имеют нулевое значение после сброса, а на деле нет! И вот какой-то бит(или несколько бит) мозги мне выносили) Да уж, STM далеко не AVR!