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

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

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

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

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

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

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

به صورت کلی:

در میکرو های کمتر از ۱۰۰ پایه باید با GPIO این TFT رو راه بندازین.
در میکرو های ۱۰۰ پایه تا ۱۴۴ پایه با واحد کنترلر رم خارجی (FSMC) راه بندازین(ال سی دی به جای واحد sram به میکرو وصل میشه).
و در میکرو های بالای ۱۴۴ پایه یا بعضی از ۱۴۴ پایه با واحد LTDC و tft های بالای ۴٫۳ اینچ تا ۱۰٫۱ اینچ راه بندازین.

کلمه 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 که به صورت پین هدر روی برد قرار دارد (میتونید ازش سیم بگیرید به صورت شکل زیر و حتما جامپر اون (جامپر بوت ۲) رو هم بردارید. )

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

ال سی دی مورد استفاده ما هدر برد 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

تصاویری از پروژه های درحال انجام :

 

فیلم راه اندازی و سرعت ریفرش شدن lcd و نمایش عکس و اشکال هندسی و متن انگلیسی با بخش GPIO میکرو STM32f103c8t6 را در زیر مشاهده میکنید:

کد با توابع هال cube mx و کامپایلر keil نوشته شده است.

کدش رو در پایین پست جهت دریافت قرار میدم.

فیلم راه اندازی و سرعت ریفرش شدن lcd و نمایش عکس و اشکال هندسی و متن فارسی و انگلیسی با بخش GPIO میکرو STM32f103c8t6 را در زیر مشاهده میکنید:

کد با توابع هال cube mx و کامپایلر keil نوشته شده است.

کدش رو در پایین پست جهت دریافت قرار میدم.

در ادامه همانطور که میدانید سرعت gpio برای راه اندازی lcd tft بسیار کند است و اگر بخواهیم منویی ایجاد کنیم یا عکسی نمایش دهیم عکس به کندی لود میشود.

دقت کنید که حافظه فلش میکرو stm32f103c8t6 برای ذخیره یک عکس ۳۲۰ در ۲۴۰ کافی نیست برای همین در ویدئو بالا ما یک عکس با سایز کوچکتر نمایش دادیم (در ادامه عکس را از sd کارت می‌خوانیم تا مشکل حافظه نداشته باشیم) و کندی سرعت آن چندان احساس نمی شود،در زیر ما از یک میکرو stm32f103vet6 استفاده میکنیم که حافظه فلش ان ۵۱۲ کیلو بایت است و یک عکس ۳۲۰ در ۲۴۰ با فرمت bmp تقریبا ۲۵۰ کیلو بایت آن را اشغال میکند،ابتدا عکس را واحد gpio از روی فلش میکرو خوانده و روی lcd نمایش می دهیم تا سرعت ریفرش را ببینید:

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

کد با توابع هال cube mx و کامپایلر keil نوشته شده است.

کدش رو در پایین پست جهت دریافت قرار میدم.

راه اندازی lcd n96 ili9325 توسط واحد fsmc میکرو stm32f103cvet6 و توابع هال در cubeMx و keil:

کد با توابع هال cube mx و کامپایلر keil نوشته شده است.

کدش رو در پایین پست جهت دریافت قرار میدم.

مشاهده میکنید که سرعت ریفرش عکس بسیار بیشتر از حالت gpio شده است و این طبیعیه چون میکرو ۱۶ خط دیتارو همزمان و با حداکثر فرکانس کاری میکرو روی lcd منتقل می‌کند.

در ادامه lcd سایز بزرگتر با تراکم پیکسلی بیشتر و خواندن بایت به بایت عکس bmp از روی sd کارت را بررسی میکنیم

راه اندازی “lcd tft ili9341 3.2 و رزولوشن ۲۴۰×۳۲۰ با استفاده از میکروی stm32f103vet6

برنامه به زبان سی در IDE KEIL نوشته شده است و از توابع HAL و CUBE MX استفاده شده است.

 

نمایش عکس از روی sd card با واحد sdio روی lcd ili9325 توسط واحد fsmc میکرو stm32f103vet6

کد به زبان سی در ide کیل نوشته شده و از توابع هال و کیوب استفاده شده است.

در کد بالا بایت به بایت عکس bmp از روی sd کارت خوانده می شود و روی lcd نمایش داده می شود(سرعت بالاتر نیز میتوان داشت)

BMP PICTURE

تصاویر خودتان را با نرم افزار PAINT به صورت فرمت BMP 24BIT ذخیره کنید، ترجیحا ۶۰ در ۶۰ پیکسل باشد.

فرمت BMP یا بیتمپ یک نوع فایل تصویری است که در آن عمل کد کردن صورت نگرفته و به راحتی می توان رنگ هر پیکسل دست پیدا کرد. در صورتی که تصویر بیتمپ به صورت فرمت ۲۴بیتی ذخیره شود، تا بایت ۵۴ ام هدر تصویر است که یک سری توضیحات در مورد فایل قرار دارد. از بایت ۵۴ ام به بعد بایت های رنگ هر پیکسل قرار دارد. به این صورت که هر سه بایت پشت سر هم رنگ یک پیکسل را تشکیل می دهد. برای نمونه بایت ۵۵ ام رنگ آبی ، بایت ۵۶ رنگ سبز و بایت ۵۷ ام رنگ قرمز را مشخص می کند تا ترکیب رنگ RGB برای نمایش یک پیکسل درست شود.

در LCD N96 فرمت رنگ بندی به صورت ۱۶بیتی است یعنی رنگ قرمز ۵بیت ، رنگ سبز ۶بیت و رنگ آبی ۵بیت را در بر میگرد. بنابراین برای نمایش تصویر بیتمپ باید آن را از فرمت رنگ ۲۴بتی به صورت ۱۶بیتی در آوریم. بدین منظور باید رنگ قرمز را از رنج ۰ تا ۲۵۵(۸بیتی) به رنج ۰ تا ۳۱ (۵بیتی) ، رنگ سبز را از رنج ۰ تا ۲۵۵(۸بیتی)به رنج ۰ تا ۶۳ (۶بیتی) و رنگ آبی را از رنج ۰ تا ۲۵۵ به رنج ۰تا۳۱ بیت ببریم. که با یک عمل تناسب ساده این کار صورت میگیرد.

تابعی مناسب برای این کار نوشتم

uint16_t color565(uint8_t r, uint8_t g, uint8_t b)
{
return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}

SD CARD SDIO

پین اوت SD کارت به صورت شکل زیر است:

و نحوه اتصال SD کارت به میکروکنترلر STM32 در مد SDIO به صورت زیر است:

http://aimagin.com/blog/wp-content/uploads/2015/02/7.png

 

نمایش عکس از روی sd card با واحد sdio روی lcd ili9486 توسط واحد fsmc میکرو stm32f103vet6

رزولوشن LCD ILI9486  بسیار بالا و ۳۲۰ در ۴۸۰ پیکسل است با سایز ۳٫۵  اینچ که کیفیت بالایی دارد.

برنامه به زبان سی در IDE KEIL نوشته شده است و از توابع HAL و CUBE MX استفاده شده است.

سرعت اجرا و بارگذاری عکس بسیار بهینه شده است.

 

نمایش عکس از روی sd card با واحد sdio و flash توسط بخش usb host روی lcd ili9486 توسط واحد fsmc میکرو stm32f407VGTx

در این بخش علاوه بر خواندن و نوشتن فایل متنی بر روی SD CARD و FLASH نمایش عکس هم بر روی LCD انجام می شود.

کد توسط توابع هال و کیوب و کیل نوشته نوشته شده است.

بایت به بایت عکس ابتدا از روی SD CARD  خوانده می شود و روی LCD نمایش داده می شود و در ادامه کد فلش توسط میکرو مانت می شود و بایت به بایت عکس از روی حافظه فلش USB خوانده می شود و روی LCD نمایش داده می شود.

میکروی سری F407 از قابلیت USB هاست پشتیبانی میکند

نکته : دوستان من علاقه ای به برد های اماده ندارم و یک هدر برد ۱۰۰ پین  از ایران میکرو تهیه کردم به همراه انواع میکرو ها و درنهایت روی برد بورد تست ها را گرفته و با شما به اشتراک میگذارم و سپس برد مورد نظر را در التیوم طراحی میکنم.

فیلم عملکرد پروژه در در زیر قرار دارد:

همانطور که در ویدئو بالا میبینید من IC محافظی برای فلش قرار ندادم اما در تولید محصولاتتون بهتره که حتما قرار بدید .چون فلش یک دیوایس خارجی است و توسز هر کاربری میتواند به سیستم شما متصل شود تا  اگر اتصالی صورت گرفت این ای سی فلش را از مدار خارج کند،شماتیک ان به صورت زیر است:

در تصویر بالا محل اعداد ۱ و ۲ به پین های مخصوص usb میکرو متصل میشوند. و ic محافظ بالا دو کانالست یعنی دوتا محافظ در یک Ic قرار دارند و وقتی اتصالی رخ بده جریان فلش قطع میشه پین flag برای شما صفر میش که توسط میکرو میتونید بفهمید که جریان کشی رخ داده و با صفر کردن پین enable فلش رو از مدار خارج کنید تا به برد و میکروی شما در اثر اتصال و جریان کشی آسیبی نرسد. و پین pa9 هم اختیاری هستش که توسط میکرو میتونید بفهمید ولتاژ روی باس usb هست یا نه برای مواقعی که دستگاه با باتری کار میکنه به درد میخوره.پیشنهاد میکنم داکیومنت های st برای بخش usb رو مطالعه بفرمایید.

میتونید هم از این ای سی بالا استفاده نکنید و دوتا پین میکرو رو مستقیم به دوتا پین D+ و D- فلش بزنید اما  :

  • در حالت USB هاست پین D+ با مقاومت ۱٫۵ کیلو به زمین متصل شود.
  • در حالت USB دیوایس پین D+ با مقاومت ۱٫۵ کیلو به ۳٫۳ متصل شود.

پین های اتصال LCD به واحد FSMC به صورت زیر است:

این هم پین های واحد SDIO که طبق شماتیکی که در بالا گذاشتم باید  SD CARD رو به میکرو متصلش کنید(پول اپ یادتون نره)

PC8 ——> SDIO_D0
PC9 ——> SDIO_D1
PC10 ——> SDIO_D2
PC11 ——> SDIO_D3
PC12 ——> SDIO_CK
PD2 ——> SDIO_CMD

دوستان عزیز به جای توضیحات کامل ویژگی های پروژه کلمات کلیدی ویژگی هر پروژه رو مینویسم:

En:کد ال سی دی زبان انگلیسی پشتیبانی میکند.

Pe:کد دارای فونت فارسی است

fsmc:برای راه اندازی ال سی دی از واحد fsmc میکرو استفاده شده است.

gpio : برای راه اندازی ال سی دی از پین io استفاده شده است.

sdio:واحد اتصال کارت sd راه اندازی شده است و عکس و تصویر از روی مموری روی lcd نمایش داده می شود.

تمامی بخش ها تست شده هستند که ویدویی جهت مقایسه قرار دادم.

جهت تهیه میتوانید اقدام کنید و همچنین سوالی داشتید تلگرام در خدمتم.

 

 

 

 

 

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

Subscribe
Notify of
guest

15 نظرات
Inline Feedbacks
View all comments
پوریا
پوریا
3 years ago

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

yaser fathi
yaser fathi
3 years ago

سلام خسته نباشین میخاستم ببینم ili9488 هم راه اندازی میکنین؟؟

محمد مهدی محمدی
محمد مهدی محمدی
3 years ago

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

محمد مهدی محمدی
محمد مهدی محمدی
3 years ago

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

چون که من به کتابخانه ها هم خیلی نیاز دارم و اینکه آیا فایل های پروژه هم موجود می باشند

محمد مهدی محمدی
محمد مهدی محمدی
3 years ago
Reply to  mehdi sehati

ممنون

شاید باورتون نشه که من ۱۳ سالم هست و یک کتابخانه ال سی دی کاراکتری به صورت ۸ بیتی با تمام امکانات و بسیار عالی نوشتنم

‏stm۳۲ با کامپایلر کیل و iar منظورم هست فکر نکنید که آردوینو😌

محمد
محمد
2 years ago

سلام خیلی مفید بود
فقط یک سوال این پروژه رو با lcd رزولیشن پایین تر ولی رنگی میشه با stm32f03xxx یا stm8sxxxx راه انداخت در حد ننایش اشکال گرافیکی مثلا نمایش یک مربع؟؟؟

محسن
محسن
2 years ago

سلام. lcd n96 با درایور ili9325 رو با میکرو ST و واحد SPI هم کار کردین؟ سرعتش خیلی پایین میشه؟

مجید رحیمی
مجید رحیمی
1 year ago

سلام آقای مهندس صحتی. برای پرداخت به درگاه بانک وصل نمیشه و مشکل داره

15
0
Would love your thoughts, please comment.x