STM32, پروژه, توصیه شده, کتابخانه برنامه نویسی

آموزش راه‌اندازی ال سی دی نوکیا 1202 – جلسه سوم – CubeIDE

راه‌اندازی ال سی دی نوکیا 1202 با stm32

بریم توی CubeIDE 🙂  تا برای سخت‌افزاری که جلسه قبل زدیم کتابخونه بنویسیم 🙂

توی این آموزش فرض بر ان است که شما به زبان C و STM32 تا حدودی مسلط هستید و خیلی از قسمت‌های مربوط به جزئیات این‌ها از توضیحات در این آموزش خارج است.

اول یک در CubeIDE پروژه ایجاد می‌کنیم و توی محیط چندتا پینی که لازمه برای ال سی دی تعریف بشن رو خروجی تعریف می‌کنیم و براشون لیبل میزاریم:

  • پین ال سی دی به اسم SCL رو به اسم N1202_scl دیفاین می‌کنم 
  • پین ال سی دی به اسم mosi رو به اسم N1202_sda دیفاین می‌کنم 
  • پین ال سی دی به اسم CS رو به اسم N1202_CS دیفاین می‌کنم 
  • پین ال سی دی به اسمRESET رو به اسم N1202_res دیفاین می‌کنم 

 

راه‌اندازی ال سی دی نوکیا 1202 با stm32

 

منطبق بر تصویر بالا در CubeIDE، البته من توی این تصویر چیزایی دیگه‌ای هم منطبق بر برد خودم تعریف کردم که شما نیازی به اون‌ها ندارید حالا کلاک میکرو رو روی کریستال خارجی قرار میدم و فرکانس رو روی PLL میزارم روی 9 تا به 72 مگ کلاک روی کور اصلی برسیم.

و توی تنظیمات پین‌ها چون سرعت 0 و 1 شدن پین‌ها برای ال سی دی بسیار حائز اهمیت هست و با سرعت ال سی دی ما رابطه مستقیم داره روی تنظیمات GPIO در کیوب ماکزیمم سرعت رو روی high قرار می‌دم و برنامه رو جنریت می‌کنم.

 

راه‌اندازی ال سی دی نوکیا 1202 با stm32

 

خب بعد از ساختن کدهای پروژه به فایل Main.h توی CubeIDE می‌ریم و می‌بینیم که کامپایلر پین‌‎های ما رو به این صورت دیفاین کرده

حالا برای نوشتن کتابخونه چند تا فایل به پروژه اضافه می‌کنیم که من اون‌ها رو اینجوری اسم میگذارم:

خب برای مقدمات کار ما اول از همه به یک فونت هم نیاز داریم من برای این کار سالیان دور یک فونت از اینترنت گرفتم که دقیقا یادم نیست کجا بوده ولی از این فونت انگلیسی توی همه کارام استفاده کرده ام فونت انگلیسی 5*8 پیکسلی هست که جدول فونتمون اینه:

خب همه اینا رو اوکی کردیم می‌ریم سراغ قسمت شیرین و اصلی برنامه 

ابتدا اینکلودهای برنامه رو تنظیم میکنیم برای این کار می‌ریم توی فایل main.c در CubeIDE و فایل کتابخونه رو اینکلود می‌کنیم. 

بعد می‌ریم به فایل N1202.h و فایل مربوط به سورس کتابخونه رو دیفاین می‌کنیم. 

و در نهایت می‌ریم به فایل N1202.c و فایل‌های زیر رو اینکلود می‌کنیم. 

و حالا برای اینکه در خیلی از موارد از سایز ال سی دی توابعی که می‌نویسم بیرون نزنن طول و عرض پیکسلی ال سی دی رو هم اینجوری دیفاین می‌کنیم. 

چون کنترل ما روی ال سی دی به صورت بایت بایت هست در صورتی که نیازه ما بتونیم یک بیت از اون بایت رو کنترل کنیم (مثلا روشن شدن و خاموش شدن 1 پیکسل)

چند تا دیفاین هم برای کنترل کردن وضعیت بیت‌ها در یک بایت تعریف می‌کنیم به این شکل: 

توضیحات این دیفاین‌ها اینجوریه که sbi میاد مقدار bit رو از بایت port برابر با یک قرار میده.

توضیحات این دیفاین‌ها اینجوریه که cbi میاد مقدار bit رو از بایت port برابر با صفر قرار میده.

توضیحات این دیفاین‌ها اینجوریه که inv_bit میاد مقدار bit رو از بایت port مخالف وضعیت قبلی خود همون بیت قرار میده (در روایتی از خودم هست که بیت رو تاگل میکنه یا XOR می‌کنه) خود ^ که در دیفاین تعریف شده XOR هست در زبان C.

و اینکه مجدد توضیح بدم تمام این توابع می‌تونن خیلی ساده‌تر نوشته بشن و کتابخونه رو بهینه‌تر کنن ولی من این توضیحات رو در اینجا نمیگذارم بر هر حال یوزر هم باید برای بدست آوردن اون چیزی که نیاز داره یک زحمتی بکشه و این مبحث فقط آموزش نوشتن کتابخونه یک ال سی دی هست منطبق بر خط خط دیتاشیت.

خب حالا توی دیتاشیت نوشته شما می‌تونید دیتاها رو از رم ال سی دی بخونید ولی ما اون پینی که قرار باشه دیتا رو ازش بخونیم رو سخت ‌افزار ال سی دی مون نداریم یعنی بیرون نیومده پس ما نمیتونیم بخونیم 🙂 برای اینکه اینجا دستمون بستس باید یک رم مجازی با همون حجم رم ال سی دی توی میکرو تعریف کنیم و یک نسخه دوم از اطلاعات رم ال سی دی رو توی میکرو نگه داریم برای این کار هم چون به متغیری که بیتی باشه دسترسی نداریم متغیر بایتی برای در نظر می‌گیرم و بیت اولش و استفاده میکنیم (خود این مبحث برای ران شدن روی میکروکنترلرهای با رم کم نیاز به بهینه‌سازی داره) 

خب من این آرایه رو اینجوری تعریف می‌کنم:

توی طول برنامه اول دیتا رو بعد از پردازش وارد این آرایه می‌کنم و بعد از این آرایه منتقل می‌کنم به رم ال سی دی.

یکی دیگه از توابعی که من می‌نویسم (باز این مبحث هم نیاز به بهینه‌سازی داره) اینه که دو تا بایت در ورودی بگیره یکی به اسم دیتا و یکی هم سلکت بعد بیت سلکت شده از دیتا رو تو خروجی به ما بده پس این تابع رو هم اینجوری می‌نویسم: 

حالا چون این مطلب باید به صورتی باشه که قشر زیادی بتونن ازش استفاده کنن من تابع ارسال دیتا رو به دو شکل می‌نویسم که توی یکی از حالت‌ها برای اینکه سرعت بیشتری رو بگیرم در CubeIDE از توابع hal استفاده نکردم و خود ریجیسترهای مربوطه رو توی تابع خودم نوشتم و این تنها بهینه‌سازی‌ای هست که توی کل کتابخونه بروز میدم 😐

و ما الان تمام پیش‌نیازهای ال سی دی رو توی کدمون تعریف کردیم برای اینکه دسته‌بندی این مطالب درست باشد جلسه بعد می‌ریم سراغ ارسال دیتا به رم ال سی دی و اینشیال اولیه ال سی دی و یکم بازی با کامندهای ال سی دی که توی دیتاشیت گفته شده 🙂

و اینکه انشالله تا 3 جلسه دیگه شما هم ال سی دی رو راه انداختید هم روش نوشتید هم توابع دایره کشیدن و رسم مستطیل و … براش نوشتید البته این توابع یکبار نیاز به نوشتن دارن بقیش میشه همینارو یکم دستکاری کرد و جاهای دیگه استفاده کرد 🙂

به امید داشتن ایرانی آبادتر و آرزوی موفقیت برای شما.

Mahdi Zamani

درباره mahdi zamani

متنفر از کلیشه های تکراری یک نفری که الکترونیک رو دوست داره و هیچی هم نمیدونه ... انجام پروژه های الکترونیکی در حد توان (محدودیت وقت خودم و توانایی خودم ) پذیرفته میشود ای دی تلگرام :STM32F@

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *