آموزش اتصال LCD کاراکتری به STM32
محتویات
سلام. آموزش اتصال LCD کاراکتری به STM32 با آردوینو را آماده کردیم.
کنترل ال سی دی کاراکتری با STM32 و کد آردوینو
برای هر پروژه ای، استفاده از صفحه نمایش ها تعامل با کاربر را افزایش میدهد. رایج ترین صفحه نمایش برای پروژه ها، ال سی دی کاراکتری 16*2 است. این نوع نمایشگر نه تنهای برای نمایش اطلاعات حیاتی به کاربر استفاده میشود بلکه به عنوان ابزاری برای اشکال زدایی پروژه در مراحل اول استفاده میشود. در این آموزش ARM یاد میگیریم چطور یک صفحه نمایش ال سی دی کاراکتری 16*2 را با استفاده از STM32 کنترل کنیم. برنامه نویسی این پروژه در محیط نرم افزار آردوینو انجام میشود. برای افرادی که با برنامه نویسی arduino آشنا هستند، کد این پروژه بسیار ساده است.
مدار پروژه اتصال LCD کاراکتری به STM32
شماتیک مدار پروژه اتصال LCD کاراکتری 16*2 به STM32 در تصویر زیر نشان داده شده است.
همانطور که می بینید اتصالات پروژه بر روی یک برد بورد نیز قابل انجام است. برای برنامه نویسی میکروکنترلر STM32 به یک برد FTDI نیاز داریم.
Vcc و پین GND پروگرامر FDTI به ترتیب به پین 5 ولت و پین GND برد STM32 وصل شده اند. پین Rx و Tx از برد FTDI به پین A9 و A10 برد STM32 وصل شده است تا بتوانیم بورد را مستقیماً و بدون بوت لودر برنامه ریزی کنیم. بعد باید LCD را به صفحه STM32 وصل کنید. ما قصد داریم از ال سی دی در حالت 4 بیتی استفاده کنیم ، بنابراین باید 4 پین بیت داده (DB4 به DB7) و دو پین کنترل (RS و EN) را به برد STM32 وصل کنیم همانطور که در مدار ارتباط ال سی دی با STM32F103C8T6 نشان داده شده است.
جدول زیر اتصالات پین های این پروژه را نشان میدهد و کار شما را ساده تر میکند.
شماره پین ال سی دی | نام پین ال سی دی | نام پین STM32 |
1 | GND | GND |
2 | VCC | 5V |
3 | VEE | GND |
4 | Register Select (RS) | PB11 |
5 | Read/Write (RW) | GND |
6 | Enable (EN) | PB10 |
7 | Data Bit 0 (DB0) | عدم اتصال |
8 | Data Bit 1 (DB1) | عدم اتصال |
9 | Data Bit 2 (DB2) | عدم اتصال |
10 | Data Bit 3 (DB3) | عدم اتصال |
11 | Data Bit 4 (DB4) | PB0 |
12 | Data Bit 5 (DB5) | PB1 |
13 | Data Bit 6 (DB6) | PC13 |
14 | Data Bit 7 (DB7) | PC14 |
15 | LED مثبت | 5V |
16 | LED منفی | GND |
مواد مورد نیاز
- STM32 – برد توسعه (BluePill) (STM32F103C8T6)
- ال سی دی کاراکتری 16*2
- پروگرامر FTDI
برنامه نویسی ال سی دی کاراکتری در برد STM32
همانطور که در این آموزش گفته شد، ما از نرم افزار Arduino IDE برای برنامه ریزی میکروکنترلر STM32 استفاده خواهیم کرد. اما، Arduino IDE به طور پیش فرض برد STM32 را نمیتواند برنامه ریزی کند، از این رو باید یک بسته را بارگیری کنیم و Arduino IDE را برای این کار آماده کنیم. این دقیقاً همان کاری است که در آموزش قبلی ما با استفاده از Arduino IDE و STM32F103C8T6 انجام دادیم. بنابراین پیشنهاد میکنم قسمت قبلی آموزش STM32 که ما در آن تمامی مراحل آپلود کد بر روی یک برد STM32 را آموزش دادیم مشاهده کنید : STM 32 چیست؟ آموزش برنامه نویسی برد STM32 با آردوینو
پس از نصب فایل های STM32 در Arduino IDE ، می توانیم برنامه نویسی را شروع کنیم. این برنامه بسیار شبیه به برنامه نویسی آردوینو است ، تنها چیزی که تغییر خواهد کرد نام های پین است زیرا نام پین ها برای STM32 و آردوینو متفاوت هستند. کد کامل در انتهای صفحه قرار گرفته است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
یکی از مزایای قابل توجه استفاده از Arduino برای برنامه ریزی میکروکنترلر های ما این است که آردوینو تقریبا برای هر سنسور و ماژول مشهور کتابخانه های آماده دارد. بنابراین در ابتدا ما کتابخانه کریستال مایع که مخصوص ال سی دی ها است را فراخوانی میکنیم.
#include <LiquidCrystal.h> // include the LCD library
در خط بعدی باید مشخص کنیم که کدام پین های GPIO از STM32 ما وظیفه کنترل نمایشگر LCD را به عهده دارند. با خطوط زیر ما پین های ال سی دی را معرفی کرده و سپس کار بار آن را شروع میکنیم.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //معرفی پین های ال سی دی
در مرحله بعد در تابع setup void () ذکر میکنیم که از چه نوع LCD استفاده میکنیم. از آنجا که ال سی دی مورد استفاده ما در اینجا 16*2 است با خط دوم کد زیر آن را معرفی میکنیم. سپس ما مکان متن مورد نظر را تعیین کرده و متن دلخواه را روی ال سی دی چاپ میکنیم. سپس تعریف میکنیم که متن ها برای چند ثانیه نمایش داده شوند و در آخر با دستور lcd.clear ()؛ صفحه را پاکسازی میکنیم.
void setup() { lcd.begin(16, 2);//استفاده از ال سی دی کاراکتری 16*2 lcd.setCursor(0, 0); //ستون اول ردیف اول lcd.print("Interfacing LCD"); //نمایش متن دلخواه lcd.setCursor(0, 1); //ستون اول ردیف دوم lcd.print("-irenx"); //نمایش این متن delay(2000); //تاخیر به مدت 2 ثانیه lcd.clear(); //پاکسازی ال سی دی }
سپس در void loop، در خط اول عبارت STM32 –Blue Pill را نمایش میدهیم و در خط دوم مقدار ثانیه ها را نمایش میدهیم. مقدار ثانیه ها با استفاده از تابع millis () بدست می آید.
داخل حلقه void ، “STM32 – Blue Pill” را در خط اول و مقدار ثانیه ها در خط دوم نمایش می دهیم. مقدار دوم را می توان از تابع millis () بدست آورد. میلی ثانیه () یک تایمر است که درست از زمانی که MCU نیرو می گیرد افزایش می یابد. مقدار به صورت میلی ثانیه است بنابراین قبل از نمایش بر روی LCD ما آن را با 1000 تقسیم می کنیم.
void loop() { lcd.setCursor(0, 0); //ستون اول ردیف اول lcd.print("STM32 -Blue Pill"); //نمایش متن lcd.setCursor(0, 1); //در اول ردیف دوم lcd.print(millis() / 1000); //نمایش مقدار ثانیه ها }
کد کامل :
#include <LiquidCrystal.h> const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("Interfacing LCD"); lcd.setCursor(0, 1); lcd.print("irenx"); delay(2000); lcd.clear(); } void loop() { lcd.setCursor(0, 0); lcd.print("STM32 -Blue Pill"); lcd.setCursor(0, 1); lcd.print(millis() / 1000); }
بارگذاری برنامه در برد STM32F103C8T6
اتصالات را همانطور که در نمودار مدار نشان داده شده است برقرار کنید و کد کامل را در Arduino IDE قرار دهید و آپلود کنید. به ابزارها بروید و اطمینان حاصل کنید که تابلوی صحیح همانطور که در شروع کارآزمایی انجام شده است ، انتخاب شده است. همچنین قبل از بارگذاری برنامه اطمینان حاصل کنید که جامپر را مانند تصویر زیر و برد پایین روی 1 تنظیم کنید که حالت برنامه نویسی است.
همانطور که در قسمت قبلی گفتیم، در صورتی که کد را بارگذاری کنید عملیات اجرا میشود و پس از ریستارت شدن برد دیگر عملکرد انجام نمیشود. بنابراین پس از بارگذاری برنامه، جامپر را روی 0 بگذارید مانند برد بالایی در تصویر بالا. همچنین از آنجا که برنامه روی STM32 بارگذاری شده است دیگر نیازی به اتصال برد FTDI نداریم.
این فقط یک پروژه رابط کاربری ساده برای کمک به استفاده از نمایشگر LCD با برد STM32 است. در ادامه می توانید از این روش برای ساخت پروژه های جالب استفاده کنید.
قسمت بعد را هم ببینید : آموزش برنامه نویسی STM32 با پورت USB
const int rs = PB7, en = PB6, d4 = PB5, d5 = PB4, d6 = PB3, d7 = PB15;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
این کد مشکلی داره ایا؟
سلام عزیز
برای STM32 بهتر هست از نمایشگر اولد استفاده کنید
آموزشاتون خیلی خوبه ولی کاش با توابع hal هم آموزش میدادید
سلام عزیز
انشالله به زودی
سلام
من دو روز هست دارم همین پروژه رو انجام میدم ….اما نمیدونم مشکل از کجاست …روی ال سی دی کاراکترهای عجیب غریب میاد و قسمتی از متن همون چیزی هست که میخوام اما بقیه یا وسط کارکترها حروف بی ربط هستند