آنچه در این مقاله میخوانید :
Toggleبصریسازی کدها و نمایش اطلاعات بر روی صفحه نمایشهای گرافیکی از مهمترین بخشهای برنامهنویسی میکروکنترلرهایی مشابه با میکروکنترلرهای stm32 است. راهاندازی این صفحه LCD گرافیکی در stm32 روشهای خاصی دارد که در ادامه به آن میپردازیم.
برد stm32 چیست؟
میکروکنترلرهای خانواده st از سری میکروهای ARM و بر مبنای هسته cortex-m3 است. دلیل طراحی این هسته، توسعه میکروکنترلری با قیمت ارزان و انجام پروژههایی است که توان مصرفی پایینی دارند. در این میکروکنترلر تعداد پینها کاهش و سیستم پردازش وقفه ارتقا یافته است. همچنین قابلیت انجام عملیات محاسباتی با دقت بسیار بالا را دارد.
این خانواده تعداد زیادی از انواع میکروها را در خود جای داده است که در ویژگیهای مختلف مانند تعداد پین و یا حافظه و… با یکدیگر تفاوت دارند.
Stm32 همانطور که از نامش پیداست ۳۲ بینتی هستند و نام های مختلفی از آنها میشنوید مانند STM32F103RET6. نحوه نامگذاری آن به این صورت است که ابتدا نام اختصاری شرکت (stm) و سپس ۳۲ که نمایش دهنده ۳۲ بیتی و یا ۸ بیتی بودن برد است. بعد از آن یک حرف قرار میگیرد که کلاس کاری آن را نمایش میدهد نامهایی که ممکن است مشاهده کنید در وبسایت شرکت قابل مشاهده است. قسمت بعدی عدد سه رقمی مانند ۱۰۳ است که میزان قابلیت و کارایی برد را نشان میدهد. بخش آخر نیز RET6 : تعداد پایه ها، امکانات دیگر مانند تایمر و تعداد پین و … را مشخص میکند. جزئیات این نام ها نیز در وبسایت شرکت ST قابل مشاهده است.
برد STM32
صفحه نمایش گرافیکی و انواع آن
ال سی دی ها به دو دسته ی اصلی ال سی دی گرافیکی و ال سی دی کاراکتری تقسیم میشوند. LCD های کاراکتری ساختار سادهتر و عملکرد پایهای تری دارند و قابلیت نمایش عکس یا تصاویر گرافیکی را در اختیار کاربر نمیگذارند.
این LCD ها میتواند ساخت شرکتهای مختلف و دارای کنترلرهای متفاوتی باشد. از انواع این GLCDها میتوان به KS0108 و ST7920 اشاره کرد. استفاده از این LCD ها بر اساس پیکسل های آن انجام میشود. LCD هایی که ما در اینجا استفاده میکنیم ۱۲۸*۶۴ هستند که ۱۲۸ پیکسل عرض و ۶۸ پیکسل طول دارند.
تنظیمات اولیه برای استفاده از LCD گرافیکی در stm32
تنظیمات مربوط به LCD در برنامه ی STM32CubeMX انجام میشود. تمام تنظیمات اولیه در این نرم افزار انجام خواهد شد. این نرمافزار همچنین وضعیت پایهها و نوع ورودی یا خروجی، مشخص کردن کلاک و محاسبه توان مصرفی را انجام میدهد. تعداد پایه های این LCD 20 عدد است که اتصالات آن به میکروکنترلر به صورت زیر است.
برد STM32 نحوه اتصال به ال سی دی گرافیکی
بسته به کاربرد میتوانید LCD را در دو مدل متن و گرافیک راهاندازی کنید. در عکس زیر نحوه تنظیمات و مورد نظر برای فعالسازی LCD گرافیکی در stm32 را مشاهده میکنید.
نحوه تنظیمات برای فعالسازی LCD گرافیکی در stm32
اگر تمایل به راهاندازی در حالت گرافیک دارید و قصد دارید عکس خاصی را نمایش بدهید ابتدا باید عکس را به سایز مناسب برای LCD یعنی ۱۲۸ در ۶۴ تبدیل و سپس آن را نمایش دهید. برای نمایش عکس نیاز به کد هگز آن دارید که با استفاده از نرمافزار LCD Assistant قابل انجام است.
ارسال دستورات متنی و دادهها به صفحه نمایش گرافیکی
در آخرین مرحله شما نیاز به نوشتن کد در محیطهای برنامهنویسی مربوط به 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 ، ما باید عملیات زیر را انجام دهیم:
- پین CS را در حالت high قرار دهید.
- بایت همگام سازی (۰xF8) را به همراه R / W و RS ارسال کنید
- بایت با ارزش توضیح را ارسال کنید
- بایت کم ارزش توضیح را ارسال کنید
- پین 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
{
توضیحات کد نیز به این ترتیب است:
- پین CS را در حالت high قرار دهید
- بایت همگام سازی (۰xF8) را به همراه R / W و RS ارسال کنید
- بایت با ارزش توضیح را ارسال کنید
- بایت کم ارزش توضیح را ارسال کنید
- پین 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
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 عملیات زیر باید انجام شود:
- در مرحله نخست باید صفحه نمایش را ریست کنید به همراه یک وقفه ۴۰ میلی ثانیهای
- تابع ارسال دستور را فعال و ۱۰۰ میلی ثانیه وقفه بدهید
- مجدد تابع ارسال توضیحات را فراخوانی کرده و ۳۷ میلی ثانیه وقفه میدهیم
- کنترل خاموش و روشن صفحه نمایش را فعال و ۱۰۰ میلی ثانیه وقفه
- دستور پاک کردن صفحه نمایش ارسال و وقفه به مدت ۱۰ میلی ثانیه
- دستور Entry Mode set را ارسال کنید. با این کار مقدار اولیه LCD گرافیکی در stm32 خاتمه مییابد.
فعال کردن حالت گرافیکی و نمایش عکس با فرمت 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
{
{
{
{
💎حتما ببینید : خرید LCD گرافیکی اورجینال با مناسب ترین قیمت
با انجام گام به گام تمام این مراحل، به سادگی خواهید توانست تا ال سی دی گرافیکی خود را به سادگی با استفاده از STM32 راه اندازی کنید. اما اگر در هر جای این مسیر به مشکلی برخوردید، می توانید از طریق بخش نظرات با ما در میان بگذارید تا بتوانیم کمک تان کنیم .
منبع : controllerstech.com
ممنون . واقعا خیلی خوب توضیح داده بودید .