STM32 проблемы при подключении дисплея по LTDC.
В одной из прошлых статей описывал, как подключить дисплей к микроконтроллеру семейства STM32, используя интерфейс LTDC. Статья оканчивалась видеороликом, в котором на встроенный в DISCOVERY дисплей, выводилось изображение. Конечно же следующим желанием было запустить, что-то побольше и подключить это самостоятельно, чтобы в голове сложилась полная картина. С Китая был заказан 7-дюймовый дисплей с RGB интерфейсом и емкостным тачскрином.
Пока он шел я изучал документацию на драйвер, который им управляет, а на форумах все чаще встречал вопрос типа "Если STM32 имеет встроенный контроллер дисплея, то для чего нужен драйвер?". Все дело в том, для управления жидкими кристаллами, а точнее затворами полевиков, которые ими управляют, необходимо два напряжения VGH и VGL, 19V и -5.5V соответственно. Сам МК такие напряжения выдать не может, он лишь посылает сигналы драйверу согласно интерфейсу RGB, а драйвер дублирует их с необходимым напряжением.
Дисплей пришел, при подключении вопросов не возникло. Запустить дисплей тоже не составило труда, но нормально работать он не хотел. Суть проблемы заключалась в том, что при использовании двух слоев, изображение на дисплее периодически дергалось. Еще раз перечитав AN4861 понял, что проблема в пиксельной частоте.
Дело в том, что дисплей, купленный в Китае имеет разрешение 1024x600, и для того, чтобы изображение на дисплее обновлялось 60 раз в секунду пиксельная частота должна быть в диапазоне от 45 до 63 MHz.
В тоже время в AN4861 на странице 37 есть таблица, из которой понятно, что при использовании SDRAM 16-bit, а именно такая установлена на DISCOVERY и двух слоев дисплея, когда каждый цвет кодируется 16 битами, максимальная пиксельная частота равна 39MHz.
Я же ориентируясь на даташит дисплея, задрал пиксельную частоту до максиму. После того как пиксельная частота дисплея была опущена до 37МHz и размер второго слоя уменьшен до размера 320x320, дисплей заработал без артефактов. При увеличении размера второго слоя артефакты снова появлялись и да, забыл упомянуть, первый слой при это занимает всю видимую область.
Из сложившей ситуации существует три выхода, либо использовать один слой с цветностью от 8 до 24 бит, либо два слоя с меньшей цветностью, таким образом можно добиться необходимой пиксельной частоты дисплей, либо заменить операвтику на 32-битную.
А вывод из сложившейся ситуации можно сделать следующий, перед покупкой дисплея надо разобраться хватит ли пропускной способности оперативки для работы с ним.
Пока он шел я изучал документацию на драйвер, который им управляет, а на форумах все чаще встречал вопрос типа "Если STM32 имеет встроенный контроллер дисплея, то для чего нужен драйвер?". Все дело в том, для управления жидкими кристаллами, а точнее затворами полевиков, которые ими управляют, необходимо два напряжения VGH и VGL, 19V и -5.5V соответственно. Сам МК такие напряжения выдать не может, он лишь посылает сигналы драйверу согласно интерфейсу RGB, а драйвер дублирует их с необходимым напряжением.
Дисплей пришел, при подключении вопросов не возникло. Запустить дисплей тоже не составило труда, но нормально работать он не хотел. Суть проблемы заключалась в том, что при использовании двух слоев, изображение на дисплее периодически дергалось. Еще раз перечитав AN4861 понял, что проблема в пиксельной частоте.
Дело в том, что дисплей, купленный в Китае имеет разрешение 1024x600, и для того, чтобы изображение на дисплее обновлялось 60 раз в секунду пиксельная частота должна быть в диапазоне от 45 до 63 MHz.
В тоже время в AN4861 на странице 37 есть таблица, из которой понятно, что при использовании SDRAM 16-bit, а именно такая установлена на DISCOVERY и двух слоев дисплея, когда каждый цвет кодируется 16 битами, максимальная пиксельная частота равна 39MHz.
Я же ориентируясь на даташит дисплея, задрал пиксельную частоту до максиму. После того как пиксельная частота дисплея была опущена до 37МHz и размер второго слоя уменьшен до размера 320x320, дисплей заработал без артефактов. При увеличении размера второго слоя артефакты снова появлялись и да, забыл упомянуть, первый слой при это занимает всю видимую область.
Из сложившей ситуации существует три выхода, либо использовать один слой с цветностью от 8 до 24 бит, либо два слоя с меньшей цветностью, таким образом можно добиться необходимой пиксельной частоты дисплей, либо заменить операвтику на 32-битную.
А вывод из сложившейся ситуации можно сделать следующий, перед покупкой дисплея надо разобраться хватит ли пропускной способности оперативки для работы с ним.
Похожие статьи