Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

STM32F4. Урок 20 - Отображение изображения с SD-карты

Данная библиотека используется для отображения изображений, хранящихся на SD-карте.
Сейчас поддерживаются 3 формата изображений:

  1. 16-битные (RGB565) - Графические файлы (* .img)
  2. растровые файлы (BMP, 24bpp, без сжатия) (* .bmp)
  3. JPG файлы (* .jpg)

Для формата №1 автор написал программу "ImageGenerator" которая превращает любые файлы BMP в формат RGB565.

Скорость:

  • Image изображение с разрешением 240 × 320 пикселя (16 бит) прорисовывается примерно 100 мс
  • BMP изображение с разрешением 240 × 320 пикселей (24pbb) прорисовывается примерно 165 мс
  • JPG изображение с разрешением 240 × 320 пикселей прорисовывается примерно 580 мс

Потребление памяти:

  • Image изображение с разрешением 240 × 320 пикселей изображения требует примерно 153 600 байт
  • BMP изображение с разрешением 240 × 320 пикселей нужно 230454 байт
  • JPG изображение с разрешением 240 × 320 пикселей занимает около 15 323 байт

Для работы также необходимы следующие библиотеки: "STM32_UB_LCD_ST7783" и "STM32_UB_FATFS".

Демонстрация работы:

Требования:

   Подключаемые модули CooCox-IDE: отсутствуют.
   Поддерживаемые библиотеки: STM32_UB_LCD_ST7783, STM32_UB_FATFS.

Перечисления:

typedef enum {
  PICTURE_OK =0,
  PICTURE_MEDIA_ERR,
  PICTURE_FILE_ERR,
  PICTURE_SIZE_ERR,
  PICTURE_ID_ERR,
  PICTURE_HEAD_ERR,
  PICTURE_WIDTH_ERR,
  PICTURE_HEIGHT_ERR,
  PICTURE_BPP_ERR,
  PICTURE_COMPR_ERR,
}PICTURE_ERR_t;

Функции:

PICTURE_ERR_t UB_Picture_DrawImage(const char* name, uint16_t xpos, uint16_t ypos); // нарисовать Image-файл из SD-карты
PICTURE_ERR_t UB_Picture_DrawBmp(const char* name, uint16_t xpos, uint16_t ypos);   // нарисовать BMP-файл из SD-карты
PICTURE_ERR_t UB_Picture_DrawJpg(const char* name, uint16_t xpos, uint16_t ypos);   // нарисовать JPG-файл из SD-карты

Пример использования:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 06.04.2013
// Version  : 1.1
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der Picture Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_picture.h"

int main(void)
{
  FATFS_t check_fat;

  SystemInit(); // инициализация настроек кварца

  // инициализация LCD
  UB_LCD_Init();
  UB_LCD_FillScreen(RGB_COL_GREEN);

  // инициализация FATFS-библиотеки
  UB_Fatfs_Init();

  // монтирование SD карты
  check_fat=UB_Fatfs_Mount(MMC_0);
  if(check_fat==FATFS_OK) {
	  // загрузить BMP-изображение с SD-карты
	  // и вывести его на дисплей
	  UB_Picture_DrawBmp("emo2.bmp",50,20);

	  // загрузить JPG-изображение с SD-карты
	  // и вывести его на дисплей
	  UB_Picture_DrawJpg("emo2.jpg",20,180);

	  UB_Fatfs_UnMount(MMC_0);
  }


  while(1)
  {

  }
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах, а также программы для конвертирования графических файлов. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (9) | Я собрал (0) | Подписаться

0
Андрей #
Я, извиняюсь, ВЫ сами то этот пример у себя проверяли? Скачал проект, купил плату и расширение к ней. Загрузил проект в МК (без каких ли бы то изменений) и ничего. Даже дисплей не инициализируется.
Прикрепленный файл: P1020806.JPG
Ответить
0
Андрей #
Запустил. Переключил перемычки как на фото. Заработало. Правда не так как в примере. Проверку ID дисплея нужно отключить в файле STM32_UB_LCD_ST7783.С. Иначе дисплей не запускается. Сделал так:
// Зачитать ID LCD
lcdid = P_LCD7783_ReadReg(LCD_ST7783_REG_00);
//if(lcdid==LCD_ST7783_ID) {
// Дисплей найден
ret_wert=SUCCESS;
// Инициализация ЖК-дисплея(портретный режим)
P_LCD7783_InitChip(LCD_ST7783_PORTRAIT);
LCD_DISPLAY_MODE=PORTRAIT;
// Включение подсветки
UB_LCD_Backlight_On();
//}
Пример на фото:
Прикрепленный файл: P1020808.JPG
Ответить
0
Андрей #
Схема платы расширения - ниже. Нужно мне было сразу поискать.
Прикрепленный файл: STM32F4Discovery motherboard Schematic.pdf
Ответить
0
Андрей #
Автору статьи огромное спасибо! Я давно искал подобный пример.
Ответить
0
main-enot #
Как масштабировать изображение? При выводе большого кадра отображается только фрагмент.
Ответить
0
Андрей #
Нет там никакого масштабирования. Преобразуйте нужную картинку в формат 320х240, для этого есть специальные программы, или можно непосредственно на специальном сайте (задайте поиск в И-нете). Введите ее имя с расширением файла, и не забудьте уточнить в каком виде будете выводить, портретная или альбомная делается в настройках внутри программы. Если я не забыл по умолчанию стоит Портретный вид. И не забудьте координаты указать обязательно 0,0. Если картинка по каким-то причинам выходит за размер экрана, то она не выведется. Все проверенно мной заранее и работает.
P.S. Я не автор статьи, а такой же как и вы читатель.
Ответить
0
Наталья #
Какой экран приобрести к плате stm32f4? Чтобы подошел и данный проект работал на нем?
Ответить
0
Андрей #
Нужна плата расширения, она уже "идет" с дисплеем ST7783. Поищите на Aliexpress, стоит около 3500 руб. Этот пример рассчитан именно под нее. Но если переписать функции дисплея и его инициализацию, то пример работает с абсолютно любым дисплеем.
Ответить
0
Шкитун Павел #
С DMA быстрее будет.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Конструктор для сборки: предусилитель на лампе 6N3 200 Вт усилитель класса D на IRS2092
вверх