مقدمه

تکامل برنامه های کاربردی موبایل، صنعتی و مصرفی منجر به افزایش نیاز به رابط های کاربری گرافیکی (GUI) و افزایش منابع سخت افزاری مورد نیاز می شود.
این برنامه ها به گرافیک با کیفیت بالاتر، منابع سخت افزاری و نرم افزاری بیشتر (مانند حافظه برای عناصر اصلی گرافیک یا فریم بافر) و عملکرد پردازش بالاتر نیاز دارند.

برای پاسخگویی به این تقاضای فزاینده، اغلب از واحدهای ریزپردازنده استفاده می شود که منجر به هزینه های بیشتر و طراحی های پیچیده تر با زمان طولانی تر برای بازاریابی می شود. برای مقابله با این نیازها، میکروکنترلرهای STM32 نمونه کارهای گرافیکی بزرگی را ارائه می دهند.

به لطف پریفرال کنترل کننده صفحه نمایش میکروکنترلر LCD-TFT (LTDC) ،STM32 که اجازه می دهد تا صفحه نمایش های با وضوح بالا مستقیماً بدون هیچ گونه تداخلی با پردازنده راه اندازی شوند.
علاوه بر این، LTDC می تواند به صورت خودکار به حافظه های داخلی یا حافظه های خارجی دسترسی پیدا کند تا داده های پیکسل را دریافت کند.

در این مقاله (برگردان داکیومنت ST می باشد) که در تکفورال به صورت چند پست قرار داده می شود به نحوه استفاده و پیکربندی پریفرال LTDC در میکروکنترلرهای STM32 خواهیم پرداخت.
همچنین به برخی از ملاحظات سخت افزاری، نرم افزاری برای دستیابی به بهترین عملکردهای گرافیکی اشاره خواهیم کرد.

 

اساس یک سیستم گرافیکی

شمای کلی یک سیستم گرافیکی در زیر نشان داده شده است.

 پایه اصلی یک سیستم گرافیکی از میکروکنترلر، فریم بافر، کنترلر نمایشگر و نمایشگر تشکیل شده است.

  • میکروکنترلر با جمع آوری عناصر اصلی گرافیکی مانند آیکونها یا تصاویر، تصویری را که باید نمایش داده شود را در فریم بافر محاسبه می کند. CPU این عملیات را با اجرای یک نرم افزار کتابخانه گرافیکی انجام میدهد. این فرآیند را می توان با سخت افزاری مانند DMA2D Chrom-Art Accelerator که توسط کتابخانه گرافیکی استفاده می شود سرعت داد. هر چقدر فریم بافر با سرعت بیشتر آپدیت شود، انیمیشن ها روان تر هستند.
  • framebuffer یک حافظه فرار است که برای ذخیره داده های پیکسلی تصویر جهت نمایش استفاده میشود. این حافظه معمولاً رم گرافیکی (GRAM) نامیده می شود. اندازه مورد نیاز فریم بافر به وضوح و عمق رنگ نمایشگر بستگی دارد.
  • Double buffering روشی است که با استفاده از دابل فریم بافرها از نمایش آنچه در فریم بافر نوشته می شود جلوگیری می کند
  • کنترلر صفحه نمایش به طور مداوم صفحه نمایش را رفرش می کند و محتوای فریم  بافر را 60 بار در ثانیه (60 هرتز) به نمایشگر منتقل می کند. کنترلر نمایشگر می تواند در ماژول نمایشگر یا در میکروکنترلر تعبیه شود.
  • نمایشگر توسط کنترلر صفحه نمایش راه اندازی می شود و وظیفه نمایش تصویری را دارد که از یک ماتریس پیکسل تشکیل شده است.

 

یک نمایشگر با ویژگی های زیر مشخص می شوند:

اندازه صفحه نمایش (وضوح): با تعداد پیکسل های صفحه نمایش که با افقی (تعداد پیکسل ها) x عمودی (تعداد خطوط) نشان داده می شود ، تعریف می شود.

عمق رنگ(bpp): تعداد رنگهایی را که می توان در یک پیکسل ترسیم کرد تعریف می کند. برای عمق رنگ 24 bpp (که اگر توسط RGB888 نشان داده شود) یک پیکسل را می توان در 16777216 رنگ نشان داد.

نرخ رفرش (در هرتز): تعداد دفعاتی است که صفحه نمایش در ثانیه نمایش داده میشود.
رفرش شدن یک نمایشگر باید 60 بار در هر ثانیه (60 هرتز) انجام شود زیرا سرعت رفرش کم،  جلوه های بصری بدی ایجاد می کند.

 

پیاده سازی یک برنامه نمونه LTDC

به لطف SRAM داخلی، می توان از میکروکنترلرهای STM32 برای برنامه های گرافیکی استفاده کرد، بدون اینکه نیازی به حافظه SDRAM/SRAM خارجی برای فریم بافر باشد. همچنین، به لطف فلش داخلی تا 2 مگابایت، عناصر اصلی گرافیکی را می توان در این حافظه ها ذخیره کرد. استفاده از حافظه های داخلی باعث کاهش تعداد پین های استفاده شده، طراحی آسان PCB و صرفه جویی در هزینه می شود.

جهت استفاده از میکروکنترلرهای تک تراشه ای برای یک برنامه گرافیکی، می توان از پیکربندی سخت افزار زیر استفاده کرد:

- فلش داخلی تا 2 مگابایت، کد برنامه کاربر و گرافیک اصلی را ذخیره می کند.
- فریم بافر واقع در SRAM داخلی بسته به اندازه داخلی SRAM برای هر میکروکنترلر STM32، کاربر می تواند با اندازه نمایشگر و عمق رنگ مربوط به آن اینترفیس کند که در زیر نشان داده شده است:

– STM32F7x7: use SRAM1 (368 Kbytes) to support resolutions 400 x 400 16 bpp
(313 Kbytes) or 480 x 272 16 bpp (255 Kbytes)
– STM32F7x6: use SRAM1 (240 Kbytes) to support 320 x 320 resolution with
16 bpp (200 Kbytes)
– STM32F469/F479: use SRAM1 (160 Kbytes) to support 320 x 240 resolution with
16 bpp (154 Kbytes)
– STM32F429/F439: use SRAM1 (112 Kbytes) to support 320 x 240 resolution with
8 bpp (75 Kbytes).
– STM32 MCU packages: LQFP100 or TFBGA100

 

شکل زیر یک نمونه از پیاده سازی گرافیکی را نشان می دهد، با یک تراشه و بدون استفاده از حافظه خارجی.

 

پیاده سازی برنامه گرافیکی با حافظه خارجی در میکروکنترلر STM32

به منظور ارتباط با نمایشگرهای با وضوح بالاتر، یک حافظه خارجی متصل به FMC برای فریم بافر مورد نیاز است. برای ذخیره عناصر اصلی گرافیک می توان از یک حافظه فلش Quad-SPI خارجی استفاده کرد.

برای برنامه های گرافیکی میان رده یا پیشرفته، می توان از مثال پیکربندی سخت افزار زیر استفاده کرد:

• حافظه فلش Quad-SPI خارجی با حداکثر 256 مگابایت حافظه آدرس پذیر نگاشت شده، برای ذخیره عناصر اصلی گرافیکی استفاده می شود
• حافظه 32 بیتی SDRAM خارجی که برای فریم بافر استفاده می شود
• پکیج های میکروکنترلر STM32:

UFBGA169 ، UFBGA176 ، LQFP176 ، LQFP208 ، TFBGA216 ، WLCSP168 و WLCSP180

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

 

 

جدول زیر نمونه ای از پیاده سازی های گرافیکی در پیکربندی های مختلف سخت افزاری STM32 را نشان میدهد.

    1. Package availability of STM32 MCUs embedding LTDC is summarized in Table 17 
    2. 400x400 and 320 x 320 are specific display resolutions commonly used for smart watches

 

ایجاد یک برنامه گرافیکی پایه

این بخش مثالی را ارائه می دهد که بر اساس برد STM32F746G-DISCO توضیح داده شده است و مراحل مورد نیاز برای ایجاد یک برنامه گرافیکی پایه را شرح می دهد.

 

توضیحات سخت افزار

در این مثال از منابع سخت افزاری روی برد STM32F746G DISCO استفاده شده است. شکل زیر منابع سخت افزاری گرافیکی مورد استفاده را توصیف می کند:

 

  1. The pink arrow shows the pixel data path to the display

 

برد STM32F746G DISCO یک پنل RGB888 LCD TFT با رزولوشن 480x272 را در خود دارد.
برای جزئیات بیشتر در مورد برد STM32F746G DISCO، به کتابچه راهنمای کیت دیسکاوری برای سری STM32F7 با STM32F746NG MCU (UM1907) مراجعه کنید.

شکل زیر نحوه اتصال پنل ROCKTECH RK043FN48H (RGB888) را به میکروکنترلر STM32F746 نشان میدهد.

 

 

ماژول نمایشگر از طریق دو گروه مختلف پین به میکروکنترلر متصل می شود:
• پین های رابط LTDC:
- رابط 24 بیتی RGB
- سیگنال های زمان بندی: LCD_HSYNC ، LCD_VSYNC ، LCD_DE و LCD_CLK
• سایر پین های خاص:
- LCD_DISP برای فعال/غیرفعال کردن حالت آماده به کار نمایش
- خط وقفه INT: اجازه می دهد تا سنسور لمسی وقفه ایجاد کند
- رابط I2C برای کنترل سنسور لمسی
- پین تنظیم مجدد LCD_RST: امکان تنظیم مجدد LCD-TFT را دارد. این پایه به پایه تنظیم مجدد میکروکنترلر (NRST) متصل است.
- پین های LCD_BL_A و LCD_BL_K برای کنترل نور پس زمینه LED: نور پس زمینه توسط مدار STLD40DPUR کنترل می شود.

کنترلر نور پس زمینه: مدار STLD40DPUR که در شکل زیر توضیح داده شده است، یک مبدل تقویت کننده است که از 3.0 ولت تا 5.5 ولت کار می کند. این می تواند ولتاژ خروجی تا 37 ولت را فراهم کند و می تواند تا ده LED سفید را به صورت سری هدایت کند. برای اطلاعات بیشتر در مورد کنترلر نور پس زمینه به دیتاشیت STLD40D مراجعه کنید. high level در سیگنال LCD_BL_CTRL (PK3) نور پس زمینه را روشن می کند، در حالی که  low level آن را خاموش می کند.

نکته : با اعمال سیگنال PWM با فرکانس پایین (1 تا 10 کیلوهرتز) در پین 7 (EN) مدار STLD40D میتوان روشنایی نمایشگر را تغییر داد (شدت نور پس زمینه را کم تر کرد). این عمل نیاز به یک کار مجدد دارد زیرا هیچ  خروجی تایمر PWM output alternate در پین PK3 وجود ندارد. طراح باید مقاومت R81 را برداشته و پین GPIO دیگری را با عملکرد PWM output alternate متصل کند.

 

چگونه بررسی کنیم که اندازه نمایشگر با پیکربندی سخت افزار مطابقت دارد یا خیر؟

این بخش فرض می کند که در این مرحله، اندازه صفحه نمایش کاربر 480x272 @ 60Hz و با عمق رنگ 24 bpp است و مرحله بعدی انتخاب پیکربندی سخت افزار مناسب است.

نمایشگر مورد نظر، نمایشگر ROCKTECH RK043FN48H-CT672B است:
• وضوح صفحه نمایش: 480x272 پیکسل با LED نور پس زمینه و صفحه لمسی خازنی
• رابط نمایشگر: 24 بیتی RGB888 (در کل 28 سیگنال)

 

تعیین اندازه و مکان فریم بافر

بسته به اندازه آن و به اندازه داخلی SRAM موجود، فریم بافر را می توان در SRAM داخلی یا SDRAM خارجی قرار داد. اندازه کل SRAM تعبیه شده برای میکروکنترلر STM32F746NGH6 برابر با 320 کیلوبایت است که در آن می توان از SRAM1 (240 کیلوبایت) استفاده کرد.

اندازه فریم بافر به روش زیر محاسبه می شود:

• for 24 bpp, framebuffer (Kbyte) = 480 x 272 x 3 / 1024 = 382.5
• for 16 bpp, framebuffer (Kbyte) = 480 x 272 x 2 / 1024 = 255
• for 8 bpp, framebuffer (Kbyte) = 480 x 272 / 1024 = 128

بر اساس این نتایج، اندازه فریم بافر مورد نیاز در حدود 128 کیلوبایت برای 8 bpp است. در این صورت، فریم بافر می تواند در SRAM1 داخلی (240 کیلوبایت) قرار داشته باشد. این مورد برای دابل فریم بافر معتبر نیست زیرا اندازه 128x2 کیلوبایت از اندازه داخلی SRAM بیشتر است.

برای عمق رنگ 16 bpp و در پیکربندی دابل فریم بافر، اندازه فریم بافر مورد نیاز (2x255 کیلوبایت) از اندازه SRAM داخلی بیشتر است، بنابراین استفاده از SRAM خارجی یا SDRAM برای این پیکربندی ضروری است. برای عمق رنگ 24 bpp و در پیکربندی دابل فریم بافر، اندازه فریم بافر مورد نیاز از اندازه SRAM داخلی (2x382.5 کیلوبایت) بیشتر است، بنابراین استفاده از SRAM خارجی یا SDRAM برای این پیکربندی نیز ضروری است. گام بعدی این است که بررسی کنید آیا عرض باس 16 بیتی SDRAM می تواند وضوح و عمق رنگ مورد نظر را حفظ کند.

 

بررسی تناسب رزولوشن 480x272 با 24bpp با پیکربندی 16 بیتی SDRAM

در این مرحله، کاربر تصمیم گرفت از SDRAM خارجی استفاده کند اما هنوز باید بررسی کند که آیا عرض باس 16 بیتی SDRAM (پیاده سازی سخت افزاری در برد دیسکاوری) با اندازه صفحه نمایش 480x272 @ 60 Hz و عمق رنگ 24bpp مطابقت دارد. برای نتیجه گیری اینکه آیا چنین پیکربندی سخت افزاری می تواند اندازه نمایشگر و عمق رنگ مورد نظر را پشتیبانی کند یا خیر، کاربر ابتدا باید pixelclock را محاسبه کند. LCD_CLK محاسبه شده حدود 9.5 مگاهرتز است (محاسبه pixelclock در مقاله بعدی بررسی خواهیم کرد).

سپس کاربر باید بر اساس پارامترهای زیر بررسی کند که آیا pixelclock محاسبه شده از حداکثر LCD_CLK نشان داده شده در جدول زیر بالاتر نیست:
• تعداد لایه های LTDC استفاده شده: در این مثال، فقط یک لایه استفاده شده است
• سرعت کلاک سیستم HCLK و سرعت حافظه فریم بافر: HCLK @ 200 مگاهرتز و SDRAM @ 100 مگاهرتز
• عرض باس حافظه فریم بافر با عرض 16 بیتی SDRAM
• تعداد AHB masters که همزمان به SDRAM خارجی دسترسی دارند: دو masters (DMA2D و LTDC)

با توجه به جدول زیر در ستون LTDC + DMA2D و ردیف یک لایه، pixelclock می تواند برای SDRAM شانزده بیتی به 34 مگاهرتز برسد.

بنابراین عرض باس SDRAM شانزده بیتی کافی است، تا بتواند رزولوشن 480x272 @ 60 Hz (LCD_CLK = 9.5 مگاهرتز) با عمق رنگ 24 bpp را حفظ کند.

در مقاله بعدی به نحوه پیکربندی پریفرال LTDC در میکروکنترلرهای STM32 خواهیم پرداخت.

منابع : st.com

lcdtft display controller ltdc on stm32 mcus stmicroelectronics.pdf

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

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

راهنمای استفاده از کد در کامنت
````
insert your code
``
محسن محبی نژاد
جمعه 16 دی 1401 ,02:03 ب.ظ

سلام. با تشکر از مطالب بسیار مفید سایت ، مخصوصا مطالب این صفحه که در جهت راه اندازی مانیتورهای RGB بسیار کارآمد است.

مهدی ادهم
شنبه 1 بهمن 1401 ,04:28 ب.ظ

خیلی ممنون

جهت ثبت پاسخ وارد سایت شوید