پروژه راه اندازی TFT LCD توسط STM32

پروژه های stm32

Iبه نام خدا و با سلام خدمت همه دوستان

در این مطلب قصد دارم اموزشی جامع از  راه اندازی انواع  lcd tft  ها با انواع stm32 هارو خدمتتون عرض کنم.

در ابتدا یک دید کلی بهتون بدم که ما دو نوع lcd داریم

1-lcd tft  ها با درایور داخلی (ای سی های درایور lcd مثل ili9325 , ili9341,ILI9486 ,ST7789V  ,HX8352B , SSD1963  و …)

این مدل از lcd ها با درایور داخلی(گاها درایور داخل lcd است و در ظاهر ای سی آن دیده نمی شود)با هر میکرویی میتوان انها را راه اندازی کرد توسط gpio  که دارای 16خط دیتا و چند پایه کنترلی هستند.حال اگر سرعت بیشتری از lcd بخواین هنگام ریفرش و … میتوانید اینlcd رو واحد fsmc میکرو stm 32 نیز راه اندازی کنید.

2-lcd tft های بدون درایور داخلی و خام که این lcd عموما سایزشون بیشتر و گرون تر و با کابل fpc موجود هستند و برای راه اندازی انها از میکروهایی باید استفاده کنید که واحد کنترلر lcd داشته باشن مثل میکرو lpc1788 و stm32f429 که دارای واحد ltdc هستش.

به صورت کلی:

در میکرو های کمتر از 100 پایه باید با GPIO این TFT رو راه بندازین.
در میکرو های 100 پایه تا 144 پایه با واحد کنترلر رم خارجی (FSMC) راه بندازین(ال سی دی به جای واحد sram به میکرو وصل میشه).
و در میکرو های بالای 144 پایه یا بعضی از 144 پایه ها هم با واحد LTDC و tft های بالای 4.3 اینچ تا 10.1 اینچ راه بندازین.

کلمه fsmc مخفف flexible static memory controller هستش که به انواع حافظه‌های NOR – sram و کنترلرهای ال سی دی که عملا یه sram هستند و … متصل میشود، واحد fsmc در واقع باس داخلی میکرو هستش که اوردنش روی پینهای میکرو .

این‌قابلیت رو هم داره که با dma بشه‌نقل و انتقالات دیتا رو انجام داد، ابته اگر بخواهید ال‌سی‌دی رو به واحد fsmc وصل کنید باید یه کنترلر ال سی دی این‌ وسط باشه مثل ssd1963 و یا ili9325 و… یا اینکه خود میکرو واحد ltdc داشته باشه که سری ۱۰۳ فکر کنم نداره و از سری ۴ شروع میشه و اون میکرو ها دیگه fsmc ندارن … اونا fmc دارن که sdram رو ساپورت میکنه مثل سری ۴۲۹.

راه اندازی lcd n96 توسط GPIO میکرو stm32f103c8t6 و توابع هال در cubeMx و keil:

در ابتدا ما قصد داریم توسط میکروی stm32f103c8t6 ال سی دی با درایور ili9325 ( معروف به N96) را توسط gpio  راه اندازی کنیم.

برای استفاده از حداکثر سرعت تمام پین های دیتای lcd را مستقیما به پورت B بدهید(کل پورت B در کیوب خروجی شده است)

اگر از هدر برد زیر استفاده میکنید تمام پین های پورت B روی برد بیرون کشیده شده اند به جز پین B.2 که به صورت پین هدر روی برد قرار دارد (میتونید ازش سیم بگیرید به صورت شکل زیر و حتما جامپر اون (جامپر بوت 2) رو هم بردارید. )

به صورت شکل زیر:

ال سی دی مورد استفاده ما هدر برد ECA می باشد که به LCD N96 با درایور ILI9325 معروف است:

 

کانکشن پین های دیتا به صورت زیر باشند:

LCD D1-D8 => MICRO B0-B7

LCD D10-D17=>MICRO B8-B15

و پین های کنترلی هم به صورت زیر متصل می شوند:

#define RST_LOW HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin,0)
#define RST_HIGH HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin,1)
#define RS_LOW HAL_GPIO_WritePin(LCD_RS_GPIO_Port,LCD_RS_Pin,0)
#define RS_HIGH HAL_GPIO_WritePin(LCD_RS_GPIO_Port,LCD_RS_Pin,1)
#define CS_LOW HAL_GPIO_WritePin(LCD_CS_GPIO_Port,LCD_CS_Pin,0)
#define CS_HIGH HAL_GPIO_WritePin(LCD_CS_GPIO_Port,LCD_CS_Pin,1)
#define RD_LOW HAL_GPIO_WritePin(LCD_RD_GPIO_Port,LCD_RD_Pin,0)
#define RD_HIGH HAL_GPIO_WritePin(LCD_RD_GPIO_Port,LCD_RD_Pin,1)
#define WR_LOW HAL_GPIO_WritePin(LCD_WR_GPIO_Port,LCD_WR_Pin,0)
#define WR_HIGH HAL_GPIO_WritePin(LCD_WR_GPIO_Port,LCD_WR_Pin,1)

به راحتی میتوانید عکس روی LCD نمایش بدهید که برای این کار ابتدا باید عکس را به فرمت BMP 24 بیت تبدیل کنید بعد با نرم افزار زیر به ارایه تبدیل کنید و بعد نمایش بدهید.

عکس مورد نظرتون را لود کنید(تنظیمات سمت راست رو تغییر ندید)

در مرحله بعد عبارت short را به int  تغییر بدهید و طول و عرض تصویر را به خاطر بسپارید و در نهایت روی جنریت کلیک کنید تا فایل h. برای شما تولید شود،در ادامه فایل دات اچ را با نوت پد باز کنید و مقدار طول و عرض تصویر را به واحد پیکسل در ابتدای ارایه مانند شکل زیر وارد کنید:

 

فایل h. را ذخیره کنید  و آن را به پوشه پروژه خود اضافه کنید و در برنامه اینکلود کنید

با دستور زیر میتوانید عکس را روی lcd در مختصات دلخواه نمایش دهید:

lcd_write_pic(x,y,name);

توسط تابع زیر میتوانید رنگ پس زمینه دلخواه ایجاد کنید:

lcd_background_color(RED);

با استفاده از دیفاین زیر میتوانید مشخص کنید که lcd  به صورت افقی اجرا شود یا عمودی:

#define LANDSCAPE OR #define PORTRAIT

این مطلب رو ادامه میدم و کاملش میکنم…

سوال و مشکلی داشتین تلگرام در خدمتم…

 

دیدگاه بگذارید

avatar