Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32 + FSMC + CubeMX

Вс янв 19, 2020 17:42:51

Доброго времени суток)

Столкнулся с проблемой во время подключения своей STM32F412REG к дисплею ILI9481 через fsmc по 8 битной шине.
В CubeMX вроде бы всё выставил, написал код, прошил контроллер и в итоге на дисплее видно только помехи - вертикальные линии по всему экрану.
Предполагаю, что не не правильно инициализирую дисплей, либо указал неверные тайминги в fsmc.
В итоге хотелось бы просто залить экран цветом.
Буду благодарен если кто-нибудь поможет, а то уже 4 вечера бьюсь с этой задачей и никак не выходит.

Прилагаю архив с проектом а также схему подключения дисплея к контроллеру.
Если будут вопросы - пишите, постараюсь ответить в течение 10 минут
Вложения
Schematics.pdf
Схема подключения
(841.63 KiB) Скачиваний: 138
Led_Blink.rar
(561.45 KiB) Скачиваний: 195

Re: STM32 + FSMC + CubeMX

Вс янв 19, 2020 18:17:42

Код:
#define LCD_DATA (*(uint8_t*)0x6C000001)
#define LCD_REG  (*(uint8_t*)0x6C000000)

Тут везде должно быть (volatile uint8_t*), потому что когда встречается код типа такого:
Код:
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x42);
LCD_WR_DATA(0x18);

при включенной оптимизации компилятор может записать только последнее значение.

Код:
void Set_Cursor(uint16_t x_kur, uint16_t y_kur)
{
   LCD_WR_REG(0x004e); LCD_WR_DATA(x_kur);
   LCD_WR_REG(0x004f); LCD_WR_DATA(y_kur);
   LCD_WR_REG(0x0022);
}

Что за 0x22? Я такой команды у ILI9481 не вижу вообще, тут должно быть 0x2C. Хотя это и 0x4E/0x4F касается, не удивительно, что ничего не работает...

Re: STM32 + FSMC + CubeMX

Вс янв 19, 2020 22:27:13

Спасибо большое!!!
Поменял как вы сказали и всё заработало, даже дисплей получается окрашивать в разные цвета))
Осталось только мне разобраться как настроить разрешение в 320x480, а то заливка на пол дисплея получается.

Еще раз огромное спасибо!)))

Re: STM32 + FSMC + CubeMX

Вс янв 19, 2020 22:48:00

Осталось только мне разобраться как настроить разрешение в 320x480, а то заливка на пол дисплея получается.

У этого дисплея нет установки курсора, фактически там установка окна(0x2A/0x2B):
Код:
LCD_WR_REG(0x2A);
LCD_WR_DATA(x1 >> 8);
LCD_WR_DATA(x1);
LCD_WR_DATA(x2 >> 8);
LCD_WR_DATA(x2);

и то же самое по другой оси...
Ответить