0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
1 | |
STM32F103 + TFT 240x320 + SD = медленный вывод картинок31.07.2013, 02:04. Показов 87311. Ответов 137
Метки нет Все метки)
(
Есть МК STM32F103VCT6, к нему при помощи FSMC подключен TFT дисплей 240х320 и SD карта по SPI. На этот самый дисплей выводятся картинки. При выводе из внутренней памяти МК на глаз задержка не заметна, а вот при чтении с SD карты, картинка 320х200 выводится около 1,5 сек. При этом задержка заметна даже на маленьких картинках 100х100, а от "веса" изображения вообще не зависит. Картинки в формате JPG. Для декодирования использую библиотеку от Чена. Для работы с SD картой - FstFs. Как я понял, после декодирования получается готовый массив для вывода, почему тогда такой медленный вывод? Или я что-то недопонимаю? В чем может быть проблема?
Да, еще заметил, что если выводить попиксельно: Код
void point(uint16_t x, uint16_t y, uint16_t color) { LCD_SetCursor(y, 319-x); LCD_WriteROM_Prepare(); LCD_WriteROM(color); } Код
void LCD_WriteBMP ( uint16_t x1, uint8_t y1, uint16_t Width, uint8_t Height, uint16_t *bitmap) { uint32_t index, size; uint16_t *bitmap_ptr = (uint16_t *)bitmap; uint16_t x2, y2; y2 = y1 + Height; x2 = 319 - x1 + Width; LCD_SetDysplayWymdow ( 319 - x1, y1, x2, y2 ); LCD_WriteROM_Prepare ( ); size = Height * Width - 1; for ( index = 0; index < size; index ++ ) LCD_WriteROM ( bitmap_ptr [ index ] ); LCD_SetDysplayWymdow ( 0, 0, 319, 239 ); } void LCD_SetDysplayWymdow(uint16_t Ypos, uint16_t Xpos, uint16_t Width, uint8_t Height) { Height --; Width --; LCD_WriteReg ( 0x44, ( Height << 8 ) | Xpos ); LCD_WriteReg ( 0x45, Ypos ); // Vertical ROM address stort position LCD_WriteReg ( 0x46, Width ); // Vertical ROM address end position LCD_WriteReg ( 0x4e, Xpos ); // Set GDDROM X address counter LCD_WriteReg ( 0x4f, Ypos ); // Set GDDROM Y address counter } [11.16 Кб]
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
31.07.2013, 02:04 | |
Ответы с готовыми решениями:
137
Вывод текста на tft.lcd 2.4 Медленный ввод в текстовые поля / медленный отклик в google chrome? Вывод информации на TFT через SPI Демодулятор SSB сигнала и вывод панорамы на TFT |
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
|
|
31.07.2013, 07:54 | 2 |
Для работы с картой лучше использовать SDIO. Будет быстрее выводится. Но для JPG не настолько быстро чтобы совсем не заметить отрисовку.
0
|
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
|
|
31.07.2013, 10:12 | 3 |
![]() Насчёт скорости - по-моему Ваша SD карта на SPI не тянет, либо плохо написано. У меня F407 (плата F4Dyscovery), я тяну картинки с обычной USB флэшки (407 такое умеет) - картинка 320x240 выводится на глаз где-то за 0.5 сек. По таймеру не засекал. Если хотите, положу свой пример на кокосе. А SDIO - гляньте, если Ваш проц это умеет, используйте ...
0
|
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 446
|
|
31.07.2013, 11:57 | 4 |
Потому что привыкли жрать готовое, пусть и малосъедобное, потому что лень думать и разбираться, ардуинщики, мля.
0
|
Oxford
|
|
31.07.2013, 12:57 | 5 |
Да уж если скорости надо придется основательно с кодом работать. Копипаст не поканает.
|
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
31.07.2013, 14:17 | 6 |
Да я абсолютно не против переделывать код, библиотека для дисплея была написана практически с 0, а библиотеку от Чена советовали как одну из лучших. Тем более еще ни одна библиотека, скопированная из инета с первого раза не завелась... Другой вопрос что именно переделать? Подключать по SDIO это понятно, просто плата пока сделана под SPI, поэтому копаюсь в нем, потом буду переделывать. Кстати, использование DMA что-нибудь даст в моем случае? Скорости чтения вроде хватает, картинки размером 10Кб и 25Кб, с одинаковым разрешением, выводятся практически одно и то же время.
Да, выводить JPG не критично, можно и BMP, они ведь являются практически готовым массивом для вывода, только в начале 64 байта служебной информации. Вывод же должен получиться быстрее?
0
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|
31.07.2013, 14:28 | 7 |
вывод будет однозначно быстрее, т.к. не будет декодирования jpeg. Минус в том, что картинки весят много) 320х240 24 бит цвета весит 230кбайт. И там 54 первых байта - заголовок, потом чистые данные.
0
|
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
31.07.2013, 14:34 | 8 |
Хм, интересно, что будет происходить быстрее, чтение BMP или декодирование JPG?
0
|
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
|
|
31.07.2013, 14:52 | 9 |
Зачем это сравнивать то? У твоего дисплея шина данных сколько разрядов имеет?
0
|
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
31.07.2013, 14:56 | 10 |
16-битная шина, подключена через FSMC.
P.S. Это мой первый опыт работы с подобными вещами, так что сильно не пинайте))
0
|
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
|
|
31.07.2013, 15:01 | 11 |
![]()
0
|
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
31.07.2013, 15:04 | 12 |
Точного времени не скажу, но на глаз вообще на заметно. Заливку делал так:
Код
void LCD_Clear(uint16_t Color) { uint32_t index = 0; LCD_SetCursor(0x00, 0x013F); LCD_WriteROM_Prepare(); for(index = 0; index < 76800; index++) { LCD_ROM = Color; } }
0
|
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
|
|
31.07.2013, 15:09 | 13 |
Я так понимаю картинка в памяти состоит из 16-битных данных. При выводе картинки из bmp нужно будет делать еще преобразование R8G8B8 -> R5G6B5. На это тоже время надо.
0
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
|
|
31.07.2013, 15:16 | 14 |
Да фигня это время...
0
|
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
31.07.2013, 15:18 | 15 |
Да, как-то я об этом не подумал... Так есть какой-то вариант быстрого вывода картинки с SD карточки? Больших изображений будет немного, штуки 3-4...
0
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
|
|
31.07.2013, 15:24 | 16 |
![]()
0
|
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
|
|
31.07.2013, 15:27 | 17 |
Смотря насколько быстро. Если чтоб было на глаз не заметно, то нету.
0
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
|
|
31.07.2013, 15:27 | 18 |
![]()
0
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
|
|
31.07.2013, 15:30 | 19 |
![]()
0
|
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
|
|
31.07.2013, 15:38 | 20 |
![]() О, а можно подробнее? Насколько я понимаю, надо найти на SD картинку, получить адрес начала файла, прочитать размер, после этого начать читать саму картинку (при этом читать по секторам диска, а не функцией f_open()), преобразовывать цвета и выводить. Все верно, или еще что-то упустил? Да, FatFS использовал стандартную. ![]() А как сделать прямое чтение, надо же еще преобразовывать по ходу дела? Ну можно не совсем мгновенно, а с небольшой задержкой, но перед выводом картинки, а не во время него. А то сейчас картинка постепенно выползает на экран... ![]()
0
|
31.07.2013, 15:38 | |
Помогаю со студенческими работами здесь
20
Замена 2,8 TFT на 2,4 TFT Вывод картинок Вывод картинок из бд Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |