نمایش تصویری از حافظه فلش داخلی STM32

در ادامه این سری از آموزش های پریفرال LTDC در STM32 به نمایش تصویری از حافظه فلش داخلی در نمایشگر خواهیم پرداخت. برای اطمینان از پیکربندی صحیح LTDC با رعایت مشخصات نمایشگر، مهم است که یک تصویر از فلش داخلی نمایش داده شود. برای انجام این کار، ابتدا باید تصویر را به فایل C یا یک فایل هدر تبدیل کنید و آن را به پروژه اضافه کند.

 

تبدیل تصویر به یک فایل هدر با استفاده از ابزار تبدیل تصویر LCD

حالا با توجه به فرمت ورودی پیکسل پیکربندی شده LTDC لایه RGB565، فایل هدر را ایجاد میکنیم.

در این مثال از ابزار LCD-Image-Converter-20161012 استفاده شده است.

برای تبدیل یک تصویر، ابتدا باید ابزار LCD-Image-Converter را اجرا کند، سپس در صفحه اصلی نشان داده شده در شکل زیر، روی File-> Open کلیک کرده و فایل تصویری را که باید تبدیل شود انتخاب کنید.
اندازه تصویر استفاده شده باید با پیکربندی LTDC Layer1 (480x272) مطابقت داشته باشد.

اگر اندازه تصویر استفاده شده با پیکربندی LTDC Layer1 مطابقت نداشته باشد، کاربر می تواند با رفتن به Image-> Resize یا تغییر تصویر دیگری با اندازه صحیح، اندازه تصویر را تغییر دهد.
برای این مثال، اندازه تصویر مورد استفاده 480x272 است و آرم ST را نشان می دهد.

 

 

سپس تصویر در صفحه اصلی ابزار LCD-Image-Converter نمایش داده می شود، همانطور که در شکل زیر نمایش داده شده است.

برای تبدیل تصویر به یک فایل هدر، باید ابزار را برای تبدیل تصویر به داده های 32 بیتی پیکربندی کنید. برای انجام این کار، در منوی صفحه اصلی، بر روی Options->Conversion کلیک کنید، همانطور که در شکل زیر نشان داده شده است.

 

در پنجره Options که در شکل زیر نشان داده شده است، تب Image را انتخاب کرده و سپس رنگ RGB565 را در قسمت Preset_field انتخاب کنید. قسمت Block size را روی 32 بیتی تنظیم کنید و بر روی دکمه OK کلیک کنید.

نکته: همچنین می توانید تصویر را به جدول بایت تبدیل کنید، اما در این صورت باید رنگ های قرمز و آبی را در تب Matrix پنجره Conversion تغییر دهد.

 

 

برای تولید فایل هدر، روی File-> Convert کلیک کنید. در پنجره نمایش داده شده در شکل زیر، نوع فایل را روی C/C++ headers (.h)  تنظیم کنید، سپس با کلیک بر روی Save فایل h.* را در دایرکتوری Inc\ (همان جایی که فایل main.h قرار دارد) ذخیره کنید.

 

 

فایل هدر تولید شده باید در فایل main.c برنامه include شود. که شامل جدول داده های 32 بیتی است که در آن هر داده نمایانگر دو پیکسل است.

در این فایل هدر، باید تعریف ساختار را درست بعد از جدول داده قرار دهید و تعریف جدول مانند آنچه در زیر آمده باشد:

/* Converted image: image_data_STLogo definition */
const uint32_t image_data_STLogo[65280] = {0xffffffff, 0xffffffff,
........}; 

 

تنظیم آدرس شروع فریم بافر LTDC Layer1 در حافظه فلش داخلی (آدرس تصویر در حافظه فلش)

در پروژه تولید شده توسط STM32CubeMX باید تابع ()MX_LTDC_Init را در فایل main.c فراخوانی کنید تا پیکربندی پریفرال LTDC انجام شود.

برای نمایش تصویر، باید آدرس شروع فریم بافر LTDC Layer1 را به آدرس تصویر در Flash داخلی تنظیم کنید.

تابع MX_LTDC_Init  با تنظیم آدرس شروع فریم بافر در زیر ارائه شده است.

/* LTDC configuration function generated by STM32CubeMX tool */
static void MX_LTDC_Init(void)
{
 LTDC_LayerCfgTypeDef pLayerCfg;
 hltdc.Instance = LTDC;
 /* LTDC control signals polarity setting */
 hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
 hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
 hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
 hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
 /* Timings configuration */
 hltdc.Init.HorizontalSync = 0;
 hltdc.Init.VerticalSync = 9;
 hltdc.Init.AccumulatedHBP = 43;
 hltdc.Init.AccumulatedVBP = 21;
 hltdc.Init.AccumulatedActiveW = 523;
 hltdc.Init.AccumulatedActiveH = 293;
 hltdc.Init.TotalWidth = 531;
 hltdc.Init.TotalHeigh = 297;
 /* Background color */
 hltdc.Init.Backcolor.Blue = 0;
 hltdc.Init.Backcolor.Green = 0;
 hltdc.Init.Backcolor.Red = 0x0;
 if (HAL_LTDC_Init(&hltdc) != HAL_OK)
 {
 Error_Handler();
 }
 /* Layer1 Window size and position setting */
 pLayerCfg.WindowX0 = 0;
 pLayerCfg.WindowX1 = 480;
 pLayerCfg.WindowY0 = 0;
 pLayerCfg.WindowY1 = 272;
 /* Layer1 Pixel Input Format setting */
 pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
/* Layer1 constant Alpha setting 100% opaque */
 pLayerCfg.Alpha = 255;
 /* Layer1 Blending factors setting */
 pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
 pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
 /* User should set the framebuffer start address (can be 0xC0000000 if
external SDRAM is used)*/
 pLayerCfg.FBStartAdress = (uint32_t)&image_data_STLogo;
 pLayerCfg.ImageWidth = 480;
 pLayerCfg.ImageHeight = 272;
 /* Layer1 Default color setting */
 pLayerCfg.Alpha0 = 0;
 pLayerCfg.Backcolor.Blue = 0;
 pLayerCfg.Backcolor.Green = 0;
 pLayerCfg.Backcolor.Red = 0;
 if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
 {
 Error_Handler();
 }
}

هنگامی که LTDC به درستی در پروژه پیکربندی شد، پروژه را بیلد و سپس آن را اجرا کنید.

منابع: st.com

lcdtft display controller ltdc on stm32 mcus stmicroelectronics.pdf

  برچسب ها
  نظرات

جهت ثبت نظر وارد سایت شوید

راهنمای استفاده از کد در کامنت
````
insert your code
``