راه اندازی واحد LTDC با استفاده از نرم افزار STM32CubeMX

0

راه اندازی واحد LTDC با استفاده از نرم افزار STM32CubeMX

در بخش­های قبل نمایشگرهای گرافیکی و مطالب پیرامون با آن بطور کامل بیان شد. در این قسمت نحوه راه­اندازی و نمایش تصویر با استفاده از واحد LTDC بیان شده است. در این پروژه از بورد STM32F746Discovery که دارای نمایشگر RK043FN48H-CT672B که یک نمایشگر RGB888 است، استفاده شده است. این نمایشگر دارای ابعاد 272×480 پیکسل است.

نحوه تنظیم واحد LDTC

برای فعال نمودن واحد LTDC ابتدا در نرم افزار STM32CubeMX ابتدا از قسمت Display Type نوع آن را مشخص کنید. نرم افزار بطور پیشفرض برخی از پایه­های میکروکنترلر را به این واحد اختصاص می­دهد که ممکن است با سخت افزار موردنظر انطباق نداشته باشد. لذا با توجه به سخت افزار خود پایه­هایی که نمایشگر متصل شده است را تنظیم کنید.

در سربرگ Parameter Settings مشخصات نمایشگر تنظیم می­شود که مقادیر آن را باید از دیتاشیت نمایشگر استخراج نمود. در شکل زیر نحوه تنظیم این سربرگ نشان داده شده است.

حوه تنظیم واحد LTDC سربرگ Parameter Settings
حوه تنظیم واحد LTDC سربرگ Parameter Settings

در سربرگ Layer Settings تنظیمات مربوط به لایه­های LTDC انجام می­شود. در این سربرگ فیلد Window Position موقعیت تصویر را بر روی نمایشگر مشخص می­کند. فیلد Pixel Parameters نیز نوع تصویر از لحاظ تعداد بیت­های هر مولفه تصویر را مشخص می­کند. فیلد Blending نیز میزان ترکیب تصویر با تصویر پیش زمینه را تنظیم می­کند. همچنین فیلد Frame Buffer تصویر مورد نظر را مشخص می­کند. نهایتا در فیلد Background Color نیز رنگ پس زمینه را تنظیم می­شود.

در این مثال از LTDC بصورت یک لایه استفاده شده و اندازه آن برابر ابعاد نمایشگر را در تنظیم شده است.

در شکل زیر نحوه تنظیم این سربرگ نشان داده شده است.

حوه تنظیم واحد LTDC سربرگ Layer Settings
حوه تنظیم واحد LTDC سربرگ Layer Settings

نحوه تنظیم کلاک LTDC

تنظیم نرخ کلاک LTDC براساس مشخصات نمایشگر نظیر طول، عرض (شامل ناحیه­های فعال و غیرفعال) و نرخ refresh انجام می­شود. در این پروژه ابعاد نمایشگر 531×297 است. این اعداد از دیتاشیت نمایشگر استخراج شده­اند. با فرض نرخ Refresh برابر 60 Hz داریم:

clk rate=531x297x69.5Mhz

کلاک ورودی این واحد از PLLSAI1 تامین می­شود

نحوه تنظیم کلاک میکروکنترلر
نحوه تنظیم کلاک میکروکنترلر

بعد از انجام تنظیمات فوق به سربرگ Project Manager رفته و مسیر و نام و مسیر ذخیره پروژه را انتخاب کنید و در نهایت بر روی دکمه GENERATE CODE کلیک کنید تا پروژه ایجاد شود.

نحوه تبدیل عکس به فایل باینری

برای نمایش تصویر ابتدا باید به یک فایل که توسط کامپایلر قابل خواندن باشد، تبدیل شود. در این پروژه از نرم افزار LCD Image Converter استفاده شده است. این نرم افزار دارای رابط کاربری بسیار راحتی است که تصویر را به فایل .c و یا .h تبدیل می­کند. سپس این فایل را می­توان به پروژه اضافه نمود. در شکل 15 محیط این نرم افزار نشان داده شده است.

محیط نرم افزار LCD Image Converter
محیط نرم افزار LCD Image Converter

برای این منظور ابتدا از قسمت Image گزینه Import را انتخاب کنید و سپس فایل تصویر موردنظر را انتخاب کنید. سپس برای تغییر اندازه تصویر و …  از منوی Image گزینه Resize و … انتخاب کنید. برای انتخاب فرمت تصویر از منوی Option گزینه Conversion را انتخاب کنید. سپس در سربرگ Image تنظیمات تصویر را مطابق شکل 16 انجام دهید و در فیلد Present فرمت تصویر دلخواه را انتخاب کنید و بر روی دکمه OK کلیک کنید تا تغییرات اعمال شود.

نحوه تنظیم فرمت فایل خروجی در نرم افزار LCD Image Converter
نحوه تنظیم فرمت فایل خروجی در نرم افزار LCD Image Converter

در نهایت از منوی File گزینه Convert را انتخاب کرده و مسیر و نام ذخیره فایل خروجی را مشخص کنید.

نرم افزار سیستم

برای نمایش تصویر ابتدا باید فایل باینری که بوسیله LCD Image Converter (و یا هر نرم افزار مشابه) ایجاد شده را به پروژه اضافه کنید. سپس باید در تابع MX_LTDC_Init که نرم افزار STM32CubeMX به پروژه اضافه کرده است آدرس تصویر را تنظیم کنید. آدرس تصویر در خط

 pLayerCfg.FBStartAdress = (uint32_t) image_data_Blue_sky;

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

static void MX_LTDC_Init(void)
{
  LTDC_LayerCfgTypeDef pLayerCfg = {0};

  hltdc.Instance = LTDC;
  hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  hltdc.Init.HorizontalSync = 40;
  hltdc.Init.VerticalSync = 9;
  hltdc.Init.AccumulatedHBP = 53;
  hltdc.Init.AccumulatedVBP = 11;
  hltdc.Init.AccumulatedActiveW = 533;
  hltdc.Init.AccumulatedActiveH = 283;
  hltdc.Init.TotalWidth = 565;
  hltdc.Init.TotalHeigh = 285;
  hltdc.Init.Backcolor.Blue = 0;
  hltdc.Init.Backcolor.Green = 0;
  hltdc.Init.Backcolor.Red = 0;
  if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  {
    Error_Handler();
  }
  pLayerCfg.WindowX0 = 0;
  pLayerCfg.WindowX1 = 480;
  pLayerCfg.WindowY0 = 0;
  pLayerCfg.WindowY1 = 272;
  pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
  pLayerCfg.Alpha = 255;
  pLayerCfg.Alpha0 = 0;
  pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
  pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
  pLayerCfg.FBStartAdress = (uint32_t) image_data_Blue_sky;
  pLayerCfg.ImageWidth = 480;
  pLayerCfg.ImageHeight = 272;
  pLayerCfg.Backcolor.Blue = 0;
  pLayerCfg.Backcolor.Green = 0;
  pLayerCfg.Backcolor.Red = 0;
  if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  {
    Error_Handler();
  }
}
 

بعد از انجام تنظیمات فوق برنامه را کامپایل کرده و میکروکنترلر را پروگرم کنید.

خروجی برنامه

در صورتی که کلیه گام­های فوق را به درستی انجام شده باشد، باید تصویر مورد نظر بر روی LCD نمایش داده شود. در شکل زیر خروجی این برنامه نشان داده شده است.

خروجی برنامه
خروجی برنامه
Choose your Reaction!
دیدگاه خود را بنویسید

آدرس ایمیل شما منتشر نخواهد شد.

redronic.com