آموزش راه‌اندازی LCD گرافیکی در stm32

اموزش راه اندازی ال سی دی گرافیکی با stm32

بصری‌سازی کدها و نمایش اطلاعات بر روی صفحه نمایش‌های گرافیکی از مهمترین بخش‌های برنامه‌نویسی میکروکنترلرهایی مشابه با میکروکنترلرهای stm32 است. راه‌اندازی این صفحه  LCD گرافیکی در stm32 روش‌های خاصی دارد که در ادامه به آن می‌پردازیم.

برد stm32 چیست؟

میکروکنترلرهای خانواده st از سری میکروهای ARM و بر مبنای هسته cortex-m3 است. دلیل طراحی این هسته، توسعه میکروکنترلری با قیمت ارزان و انجام پروژه‌هایی است که توان مصرفی پایینی دارند. در این میکروکنترلر تعداد پین‌‌ها کاهش و سیستم پردازش وقفه ارتقا یافته است. همچنین قابلیت انجام عملیات محاسباتی با دقت بسیار بالا را دارد.

این خانواده تعداد زیادی از انواع میکرو‌ها را در خود جای داده است که در ویژگیهای مختلف مانند تعداد پین و یا حافظه و… با یکدیگر تفاوت دارند.

Stm32 همانطور که از نامش پیداست ۳۲ بینتی هستند و نام های مختلفی از آن‌ها می‌شنوید مانند STM32F103RET6. نحوه نامگذاری آن به این صورت است که ابتدا نام اختصاری شرکت (stm) و سپس ۳۲ که نمایش دهنده ۳۲ بیتی و یا ۸ بیتی بودن برد است. بعد از آن یک حرف قرار می‌گیرد که کلاس کاری آن را نمایش می‌دهد نام‌هایی که ممکن است مشاهده کنید در وب‌سایت شرکت قابل مشاهده است. قسمت بعدی عدد سه رقمی مانند ۱۰۳ است که میزان قابلیت و کارایی برد را نشان می‌دهد. بخش آخر نیز  RET6 : تعداد پایه ها، امکانات دیگر مانند تایمر و تعداد پین و … را مشخص می‌کند. جزئیات این نام ‌ها نیز در وبسایت شرکت ST قابل مشاهده است.

stm32

برد STM32

صفحه نمایش گرافیکی و انواع آن

ال سی دی ها به دو دسته ی اصلی ال سی دی گرافیکی و ال سی دی کاراکتری تقسیم می‌شوند. LCD های کاراکتری ساختار ساده‌تر و عملکرد پایه‌ای تری دارند و قابلیت نمایش عکس یا تصاویر گرافیکی را در اختیار کاربر نمی‌گذارند.

این LCD ‌ها میتواند ساخت شرکت‌های مختلف و دارای کنترلر‌های متفاوتی باشد. از انواع این GLCD‌ها می‌توان به  KS0108 و ST7920 اشاره کرد. استفاده از این LCD ‌ها بر اساس پیکسل های آن انجام می‌شود. LCD هایی که ما در اینجا استفاده می‌کنیم ۱۲۸*۶۴ هستند که ۱۲۸ پیکسل عرض و ۶۸ پیکسل طول دارند.

تنظیمات اولیه برای استفاده از LCD گرافیکی در stm32

تنظیمات مربوط به LCD در برنامه ی STM32CubeMX انجام می‌شود. تمام تنظیمات اولیه در این نرم افزار انجام خواهد شد. این نرم‌افزار همچنین وضعیت پایه‌‌ها و نوع ورودی یا خروجی، مشخص کردن کلاک و محاسبه توان مصرفی را انجام می‌دهد. تعداد پایه های این LCD 20 عدد است که اتصالات آن به میکروکنترلر به صورت زیر است.

stm32-with-graphic-lcd-connections

برد STM32 نحوه اتصال به ال سی دی گرافیکی

بسته به کاربرد می‌توانید LCD را در دو مدل متن و گرافیک راه‌اندازی کنید. در عکس زیر نحوه تنظیمات و مورد نظر برای فعالسازی  LCD گرافیکی در stm32 را مشاهده می‌کنید.

نحوه تنظیمات برای فعالسازی LCD گرافیکی در stm32

اگر تمایل به راه‌اندازی در حالت گرافیک دارید و قصد دارید عکس خاصی را نمایش بدهید ابتدا باید عکس را به سایز مناسب برای LCD یعنی ۱۲۸ در ۶۴ تبدیل و سپس آن را نمایش دهید. برای نمایش عکس نیاز به کد هگز آن دارید که با استفاده از نرم‌افزار  LCD Assistant قابل انجام است.

راه اندازی ال سی دی TFT با میکرونترلر AVR
خواندن این مقاله

ارسال دستورات متنی و داده‌ها به صفحه نمایش گرافیکی

در آخرین مرحله شما نیاز به نوشتن کد در محیط‌های برنامه‌نویسی مربوط به STM32 دارید. از جمله محیط‌هایی که می‌توانید در آن کدهای مربوط را وارد و از آن خروجی بگیرید محیط keil است که به راحتی می‌توانید آن را دانلود و استفاده کنید. البته محیط ‌ها و IDEهای مختلفی برای استفاده قرار می‌گیرند. برای مثال با انجام تنظیمات از محیط برنامه‌نویسی آردوینو نیز می‌توانید برای این کار استفاده کنید.

ارسال بایت

(void SendByteSPI(uint8_t byte

با استفاده از این دستور یک بایت به پین های MOSI / SID  ارسال می‌شود. دقیقا مشابه با ارسال داده از طریق پین سریال SPI  است.

ارسال توضیحات

(void ST7920_SendCmd (uint8_t cmd

}

                HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET);  // PUll the CS high

                SendByteSPI(0xf8+(0<<1));  // send the SYNC + RS(0)

                SendByteSPI(cmd&0xf0);  // send the higher nibble first

                SendByteSPI((cmd<<4)&0xf0);  // send the lower nibble

                ;(delay_us(50

                HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET);  // PUll the CS LOW

{

 

مجموعه دستورات بالا به منظور ارسال توضیحات به صفحه نمایش گرافیکی استفاده می‌شود.

 

با توجه به صفحه نمایش ST7920 ، برای ارسال یک دستور به  LCD گرافیکی در stm32 ، ما باید عملیات زیر را انجام دهیم:

  1. پین CS را در حالت high قرار دهید.
  2. بایت همگام سازی (۰xF8) را به همراه R / W و RS ارسال کنید
  3. بایت با ارزش توضیح را ارسال کنید
  4. بایت کم ارزش  توضیح را ارسال کنید
  5. پین CS را در حالت low قرار دهید تا انتقال پایان یابد.

ارسال دیتا

داده ‌ها نیز به همان روشی که دستور ارسال می‌شود، ارسال می‌شوند، تنها با تفاوت اینکه RS مقدار “۱” دارد.

(void ST7920_SendData (uint8_t data

}

                HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET);  // PUll the CS high

                (SendByteSPI(0xf8+(1<<1));  // send the SYNC + RS(1

                SendByteSPI(data&0xf0);  // send the higher nibble first

                SendByteSPI((data<<4)&0xf0);  // send the lower nibble

                ;(delay_us(50

                HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET);  // PUll the CS LOW

{

 توضیحات کد نیز به این ترتیب است:

  1. پین CS را در حالت high قرار دهید
  2. بایت همگام سازی (۰xF8) را به همراه R / W و RS ارسال کنید
  3. بایت با ارزش توضیح را ارسال کنید
  4. بایت کم ارزش  توضیح را ارسال کنید
  5. پین CS را در حالت low قرار دهید تا انتقال پایان یابد

راه‌اندازی LCD گرافیکی در stm32

(void ST7920_Init (void

}

                HAL_GPIO_WritePin(RST_PORT, RST_PIN, GPIO_PIN_RESET);  // RESET=0

                HAL_Delay(10);   // wait for 10ms

                HAL_GPIO_WritePin(RST_PORT, RST_PIN, GPIO_PIN_SET);  // RESET=1

                HAL_Delay(50);   //wait for >40 ms

                ST7920_SendCmd(0x30);  // ۸bit mode

                delay_us(110);  //  >100us delay

                ST7920_SendCmd(0x30);  // ۸bit mode

                delay_us(40);  // >37us delay

                ST7920_SendCmd(0x08);  // D=0, C=0, B=0

                delay_us(110);  // >100us delay

                ST7920_SendCmd(0x01);  // clear screen

                HAL_Delay(12);  // >10 ms delay

                ST7920_SendCmd(0x06);  // cursor increment right no shift

                HAL_Delay(1);  // ۱ms delay

نمونه اتمگا 16ای -ای یو
فروش ویژه
فروش میکروکنترلر  Atmega16a-au  در سایت هادی بان الکترونیک
  • میکروکنترولر
خرید میکروکنترلر

                ST7920_SendCmd(0x0C);  // D=1, C=0, B=0

                HAL_Delay(1);  // ۱ms delay

                ST7920_SendCmd(0x02);  // return to home

                HAL_Delay(1);  // ۱ms delay

{

 

برای راه‌اندازی  LCD گرافیکی در stm32 عملیات زیر باید انجام شود:

  1. در مرحله نخست باید صفحه نمایش را ریست کنید به همراه یک وقفه ۴۰ میلی ثانیه‌ای
  2. تابع ارسال دستور را فعال و ۱۰۰ میلی ثانیه وقفه بدهید
  3. مجدد تابع ارسال توضیحات را فراخوانی کرده و ۳۷ میلی ثانیه وقفه می‌دهیم
  4. کنترل خاموش و روشن صفحه نمایش را فعال و ۱۰۰ میلی ثانیه وقفه
  5. دستور پاک کردن صفحه نمایش ارسال و وقفه به مدت ۱۰ میلی ثانیه
  6. دستور Entry Mode set را ارسال کنید. با این کار مقدار اولیه  LCD گرافیکی در stm32 خاتمه می‌یابد.
تفاوت میکروکنترلر با PLC
خواندن این مقاله

فعال کردن حالت گرافیکی و نمایش عکس با فرمت BMP

ابتدا باید حالت گرافیکی را با دستورات زیر فعال کنیم:

  () void ST7920_GraphicMode

}

               ST7920_SendCmd(0x30);  // ۸ bit mode

               ;(HAL_Delay (1

               ST7920_SendCmd(0x34);  // switch to Extended instructions

            ;(HAL_Delay (1

               ST7920_SendCmd(0x36);  // enable graphics

               ;(HAL_Delay (1

{

در این دستورات ابتدا حالت دستورات را به مجموعه دستورالعمل‌های گسترده (Extended Instruction Set) تغییر می‌دهیم. و سپس حالت گرافیکی فعال می‌شود.

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

(void ST7920_DrawBitmap(const unsigned char* graphic

}

                ;uint8_t x, y

                (++for(y = 0; y < 64; y

                }

               (if(y < 32

               }

              (++for(x = 0; x < 8; x

 .Draws top half of the screen //

              }

. In extended instruction mode, vertical and horizontal coordinates must be specified before sending data in//

                                               ;(ST7920_SendCmd(0x80|y

(Vertical coordinate of the screen is specified first. (0-31//

                              ;(ST7920_SendCmd(0x80|x

(Then horizontal coordinate of the screen is specified. (0-8//

                              ;([ST7920_SendData(graphic[2*x+16*y

.Data to the upper byte is sent to the coordinate //

                              ;([ST7920_SendData(graphic[2*x+1+16*y

 .Data to the lower byte is sent to the coordinate //

             {

               {

               else

               }

              (++for(x=0;x<8;x

.Draws bottom half of the screen //

              }

.Actions performed as same as the upper half screen //

                              ST7920_SendCmd(0x80|(y-32));            // Vertical coordinate must be scaled back to 0-31  as it is dealing with another half of the screen

                              ;(ST7920_SendCmd(0x88 | x

                              ;([ST7920_SendData(graphic[2*x + 16*y

                              ;([ST7920_SendData(graphic[2*x+1 + 16*y

             {

              {

                {

{

 

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

 

منبع : controllerstech.com

4.4/5 - (5 امتیاز)

اشتراک‌گذاری

یک نظر

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

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