آموزش کار با میکروکنترلرهای STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

بوردهای آردوینو معمولا اولین انتخاب کسانی هستند که از روی سرگرمی و تفننی به سراغ پروژه‌های الکترونیکی می‌آیند. البته ناگفته نماند که انتخاب بسیاری مهندسان حرفه‌ای نیز در پروژه‌های سبک همین بوردها هستند. این که تاکید می‌کنیم که در پروژه‌های سبک و تفننی، به این علت است که هرچه وارد پروژه‌های جدی و عمیق‌تر مانند پروژه‌‌های عظیم صنعتی بشویم، خواهیم دید که CPU هشت بیتی این بوردها و سرعت بسیار پایین‌شان چیزی شبیه شوخی به نظر می‌رسد.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

به عنوان جایگزین، بوردهای STM32F103C8T6 را داریم (مانند بورد Blue pill) که با CPUای ۳۲ بیتی و معماری ARM Cortex M3، به مراتب عملکرد قابل قبول‌تری نسبت به آردوینوها دارند. خبر بسیار خوبی که در اینجا وجود دارد این است که برای کار کردن با این میکروهای STM32 و پروگرم کردن آنها، می‌توانیم با خیال آسوده از همان Arduino IDE استفاده کنیم که برای بوردهای آردوینو همیشه استفاده کرده‌ و از بر هستیم.

بنابراین، در این آموزش قصد داریم که ابتدا میکروکنترلر STM32 و بورد Blue pill را معرفی کنیم و سپس با انجام یک پروژه‌ی ساده یعنی ایجاد LED چشمک زن (با استفاده از LEDای که بر روی خود بورد وجود دارد)، پروگرم کردن این میکروها را با استفاده از Arduino IDE یاد بگیریم.

آنچه برای انجام پروژه نیاز داریم

  • بورد توسعه‌ی Blue pill) STM32F103C8T6 )
  • پروگرمر FTDI
  • برد بورد
  • سیم برد بوردی
  • لپ‌تاپ متصل به اینترنت

مقدمه‌ای برای آشنا شدن با بورد Blue Pill

بورد STM32 یا همان Blue Pill، یک میکروکنترلر ARM Cortex M3 است. این بورد تا حدود زیادی به بورد Arduino Nano شبیه است اما ساختار یکپارچه‌تری نسبت به آن دارد. تصویر این بورد را در عکس زیر می‌توانید ببینید.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

خوبی دیگری که بوردهای STM32 نسبت به بوردهای متداول آردوینو دارند قیمت پایین و معقول آنها و سخت‌افزار اپن سورسی است که دارند. میکروی مورد استفاده در آنها ساخته‌ی شرکت STMicroelectronics است و به جز کریستالی که خود میکرو دارد، بورد نیز دارای دو کریستال اسیلاتور جداگانه است که دارای  فرکانس 8MHz و 32KHz هستند. با استفاده از این اسیلاتور ها می‌توان Real Time Clock) RTC) را درایو کرد. در نتیجه میکرو می‌تواند در deep sleep mode هم عمل کند که در سیستم‌هایی که از محدودیت و حساسیت مصرف توان برخوردار هستند، امتیاز بسیار مهمی محسوب می‌شود.

از آنجایی که میکرو با ولتاژ ۳.۳ ولت کار می‌کند، بر روی بورد دو آی‌سی ولتاژ رگولاتور ۳.۳ ولت و ۵ ولت نیز وجود دارند. رگولاتور ۳.۳ ولت تغذیه میکرو و رگولاتور ۵ ولت تغذیه پین‌ها را تامین می‌کند. تمام پین‌های میکروکنترلر در بورد قابلیت دسترسی دارند و بر روی هر کدام label نام آن پین نیز وجود دارد. بورد همچنین دارای دو عدد LED نیز می‌باشد. یکی به رنگ قرمز که نشان دهنده‌ی روشن و خاموش بودن بورد است و یکی به رنگ سبز که برای GPIOها استفاده دارد و به پین PC13 متصل است. دو عدد header pin نیز بر روی بورد تعبیه شده‌اند که کمک می‌کنند میکرو بین دو مود مختلف programming و operation جابه‌جا شود. در ادامه‌ی آموزش در مورد این دو مود بیشتر توضیح خواهیم داد.

اما اگر شما هم جز آن دسته افرادی هستید که برایتان سوال شده چرا نام این بورد را Blue pill گذاشته‌اند، درست‌ترین پاسخی که می‌توانیم به شما بدهیم این است که ما هم از علت دقیق آن بی‌خبر هستیم! تنها حدسی که می‌توانیم سر هم کنیم این است که شاید چون رنگ بورد آبی است و چون بورد بسیار قدرتمند و کار راه اندازی است، سازندگان آن به این نتیجه رسیده‌اند که چنین نامی برایش انتخاب کنند. بهرحال مهم نیست، خیلی روی آن حساس نشوید.

مشخصات بورد STM32F103C8T6

همان‌طور که گفتیم، در این بورد از میکروکنترلر ARM Cortex M3 STM32F103C8 استفاده شده است. برخلاف نام Blue pill که گفتیم فلسفه‌ی دقیق نام‌گذاری آن بر کسی واضح نیست، پشت انتخاب نام STM32F103C8T6 یک فلسفه‌ی دقیق وجود دارد.

  • STM از ابتدای نام شرکت سازنده‌ی این میکروها گرفته شده است، STMicroelectronics.
  • عدد ۳۲ نشان دهنده‌ی ۳۲ بیتی بودن میکروکنترلرهای ARM مورد استفاده است.
  • F103 به منظور نشان دادن معماری مورد استفاده یعنی ARM Cortex M3 است.
  • C نماد داشتن ۴۸ پین است.
  • عدد ۸ از وجود یک 64KB Flash memory خبر می‌دهد.
  • T نوع پکیج استفاده شده برای میکرو را نشان می‌دهد: ‌ LQFP.
  • و عدد ۶ محدودی دمای کاری میکرو را که از 40- درجه سلسیوس تا 85+ درجه سلسیوس است.
مطلب پیشنهادی:  نصب بوت لودر روی ATmega328 با آردوینو UNO

بسیار خب، پس از پرداختن به فلسفه‌ی نام گذاری میکرو؛ بهتر است به مشخصات آن بپردازیم.

  • معماری مورد استفاده: 32bit ARM Cortex M3
  • ولتاژ کاری: 2.7V تا 3.6V
  • فرکانس 72MHz :CPU
  • تعداد پین‌های GPIO: سی‌و هفت عدد
  • تعداد پین‌های PWM: دوازده عدد
  • پین های آنالوگ ورودی: ۱۰ (۱۲ بیتی)
  • تعداد پریفرال‌های USART: سه عدد
  • تعداد پریفرال‌های I2C: دو عدد
  • تعداد پریفرال‌های SPI: دو عدد
  • تعداد پریفرال‌های CAN2.0: یک عدد
  • تایمر: ۲ عدد (۱۶ بیتی)، یک عدد (PWM)
  • حافظه 64KB :FLASH
  • حافظه 20KB :RAM

بسیار خب، تا همین جا کفایت می‌کند. اما اگر علاقه‌مند بودید بیشتر با مشخصات فنی این بورد آشنا شوید به دیتاشیت آن مراجعه کنید. همچنین ممکن است سر زدن به این  لینک و این لینک هم شما را با اطلاعات جالب و بیشتری در مورد این بورد مواجه کند؛ البته باز هم در صورتی که علاقه‌مند هستید.

جزییات و نقشه پایه‌‌های STM32

در تصویر زیر، نقشه‌ی کامل پایه‌های بورد Blue pill را می‌بینید. همان‌طور که می‌بینید، برچسب نام هر پایه در مقابل آن زده شده است. شیوه‌ی نام گذاری پایه‌ها تقریبا مشابه بوردهای آردوینو است. مثلا از G برای نمایش ground یعنی پایه‌ی زمین استفاده شده است. و یا مثلا از ۳.۳ ولت برای نشان دادن خروجی رگولاتور ۳.۳ ولتی. پایه‌ی ۵ ولت هم می‌تواند به عنوان ورودی برای دریافت تغذیه‌ی ۵ ولتی بورد استفاده شود و هم به عنوان خروجی به عنوان یک ولتاژ ۵ ولتی مورد استفاده قرار گیرد. حالت دوم در صورتی است که بورد از طریق USB تغذیه‌رسانی شود.

LED‌ای که بر روی خود بورد تعبیه شده است نیز به پایه‌ی PC13 متصل است.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

برخلاف بوردهای آردوینو، بورد STM32 باید به صورت دستی در مود پروگرم شدن قرار بگیرد. این کار به وسیله‌ی جامپرهای boot 0 و boot 1 انجام می‌شود.

البته معمولا با وضعیت boot 1  کاری نداریم و کافیست که boot 0 jumper را در وضعیت اتصال به ۳.۳ ولت قرار دهیم تا میکرو در مود پروگرم قرار گیرد. چنانچه آن را به زمین متصل کنیم نیز در مود عملکردی (operation) خواهد بود. در بخش آپلود کردن کد بر روی بورد مجددا این موضوع را مرور خواهیم کرد.

نحوه پروگرم کردن بورد blue pill

از آنجا که STM32 از تولیدات شرکت STMicroelectronics است، بسیاری از قواعد پروگرم کردن آن بسیار مشابه به فرآیند مشابه در میکروهای ARM است.

یکی از IDEهای مشهور برای پروگرم کردن این بوردها، Keil ARM MDK است. همچنین می‌توانیم از موارد دیگری هم به این منظور استفاده کنیم؛ برای مثال موارد زیر را می‌توان نام برد.

IAR workbench ،Atollic TrueStudio ،MicroC Pro ARM ،Crossworks ARM ،Ride 7 ،PlatformIO+STM32 و … .

اما مهم‌ترین علت محبوبیت بورد STM32، این است که پروگرم کردن آن علاوه بر تمام پلت‌فرم‌های بالا از طریق Arduino IDE نیز امکان‌پذیر است. به این ترتیب در صورتی که کار کردن با زبان ساده‌ی بوردهای آردوینو و IDE محبوب و کاربرپسند آنها را از قبل بدانیم، دیگر نیازی نخواهد بود که برای آموختن نحوه‌ی پروگرم کردن بوردهای STM32 نیز زمان مجزایی صرف کنیم. تمام کتابخانه‌ها نیز از قبل آماده هستند. در ادامه ی این آموزش نیز ما از Arduino IDE استفاده خواهیم کرد.

مطلب پیشنهادی:  اتصال استپر موتور به بورد STM32F103C8

نمودار مدار

برای پروگرم کردن مستقیم بورد STM32 از طریق Arduino IDE، لازم است که از ارتباط سریال با FTDI استفاده کنیم. پروگرمر FTDI، مانند تصویر زیر به پین‌های Rx و Tx میکرو متصل می‌شود.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

پین Vcc پروگرمر را نیز به پین ۵ ولت STM32 وصل می‌کنیم و زمین هر دو بورد را نیز به یکدیگر متصل می‌کنیم.

پین‌های Rx و Tx نیز به ترتیب به پین‌های A9 (پین Tx میکرو) و A10 (پین Rx میکرو) میکروکنترلر متصل می‌شوند.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

پروگرم کردن STM32 بدون استفاده از ارتباط سریال و از طریق Micro USB

اگر این سوال به ذهن‌تان رسیده است که چرا مانند بوردهای آردوینو در اینجا نیز از طریق ارتباط USB میکرو را پروگرم نمی‌کنیم؟ پاسخ این است که بله، به آن طریق نیز امکان‌پذیر است اما ما در این جلسه نمی‌خواهیم به روش و چگونگی آن بپردازیم. نکته‌ این است که بورد STM32 به صورت پیش‌فرض و زمانی که آن را خریداری می‌کنیم، bootloader ندارد که بتواند با Arduino IDE ارتباط برقرار کند. اما می‌توان به صورت دستی این بوت لودر را بر روی بورد فلش کرد و از آن به بعد پورت usb برای ارتباط با کامپیوتر و پروگرم مستقیم آماده خواهد بود.

آماده‌سازی Arduino IDE به منظور پروگرم کردن STM32

برای دانلود (اگر از قبل ندارید) و آماده سازی این IDE به منظور پروگرم کردن بورد STM32 مراحل زیر را انجام دهید.

مرحله اول: در صورتی که Arduino IDE را نصب نکرده‌اید، آن را از این لینک دانلود و نصب کنید. فقط دقت داشته باشید که نسخه‌ی متناسب با سیستم عامل خودتان را دانلود کنید.

مرحله دوم: پس از نصب IDE، پکیج‌های لازم برای STM32 را نیز دانلود و نصب کنید. (از این مسیر: selecting File -> Preferences)

مرحله سوم: اگر بر روی Preferences کلیک کنید، پنجره‌ای مانند تصویر زیر باز خواهد شد. در بخش additional Boards Manager URL که در قسمت پایین این پنجره می‌بینید ؛ لینک زیر را کپی کنید.

http://dan.drown.org/stm32duino/package_STM32duino_index.json

و OK کنید.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

مرحله چهارم: حالا به Tool -> Boards -> Board Manager بروید و در پنجره‌ی باز شده STM32F1 را جستجو کنید. پکیج‌های نشان داده شده را نصب کنید.

مرحله پنجم: پس از نصب شدن پکیج‌ها، به Tools بروید و از آنجا صفحه را آنقدر پایین بکشید تا Generic STM32F103C را بیابید (مانند تصویر زیر) سپس در آنجا ببینید که نوع (variant) حتما روی 64kFlah، سرعت CPU بر روی 72MHz و روش آپلود بر روی Serial  باشد.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

مرحله ششم: حالا بورد FTDI را متصل کنید و از طریق device manager چک کنید که به کدام پورت COM متصل شده است. همان شماره پورت را در Tools->Port وارد کنید.

مرحله هفتم: پس از انجام تمام این تغییرات، گوشه پایین سمت راست صفحه‌ی Arduino IDE را ببینید که آیا پیغامی مانند تصویر زیر ظاهر شده است یا خیر. پورت ما COM7 بوده است و پورت استفاده شده‌ی شما ممکن است متفاوت باشد.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

در اینجا Arduino IDE کاملا برای پروگرم کردن STM32 آماده است.

آپلود کردن کد پروژه‌ی LED چشمک زن بر روی STM32

برای آنکه مطمئن شویم که تمام مراحل را درست انجام داده‌ایم، یک پروژه ی ساده را مانند LED چشمک زن در نظر می‌گیریم و تلاش می‌کنیم آن را بر روی بورد STM32 با استفاده از Arduino IDE پیاده کنیم. این برنامه‌ی ساده را در مسیر نشان داده شده در تصویر زیر می‌توانیم پیدا کنیم.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

وقتی که برنامه باز می‌شود، ابتدا باید تغییرات کوچکی را در آن ایجاد کنیم. چیزی که باید تغییر دهیم پورت اتصال LED است. این پورت به صورت پیش‌فرض در برنامه‌ی موجود PB1 است اما ما باید آن را به PC13 که LED بورد STM32 به آن متصل است تغییر دهیم. کد کامل این برنامه را که اصلاح فوق نیز در آن انجام شده است، در انتهای این آموزش می‌توانید ببینید.

مطلب پیشنهادی:  مدولاسیون عرض پالس یا PWM در آردوینو

در بخش زیر، کدی که در قسمت تابع حلقه (loop) وجود دارد را می‌توانیم ببینیم. در این کد تعیین می‌کنیم که این پین برای هر ۱۰۰۰ میلی ثانیه یک بار، در وضعیت HIGH و LOW ولتاژ قرار بگیرد تا به این ترتیب LED هر یک ثانیه یک بار روشن و خاموش شود (در مجموع حالت چشمک زن خواهد داشت) این فرآیند به صورت بی‌نهایت تکرار خواهد شد چون در تابع حلقه  نامحدود هستیم.

  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second

خب، همان‌طور که در اوایل جلسه گفتیم، برای پروگرم کردن STM32 ابتدا باید آن را در مود پروگرم قرار دهیم. به این منظور boot 0 jumper را در وضعیت low قرار می‌دهیم. این مود و مود عملکردی را برای این jumper در تصویر زیر می‌توانید ببینید.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

پس از انجام عمل فوق و قرار دادن میکرو در مود پروگرم، یک بار کلید RESET را فشار می‌دهیم. به محض فشار دادن این کلید، بورد وارد مود پروگرم شده و چراغ سبز رنگ آن خاموش می‌شود. حالا همه چیز آماده است که برنامه بر روی بورد آپلود شود.

در IDE، گزینه‌ی Upload را بزنید تا برنامه یک دور کامپایل و سپس بر روی بورد آپلود شود. اگر همه چیز به درستی پیش برود تصویر زیر را در IDE خواهید دید.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

نکته: گاهی اوقات ممکن است پروسه‌ی پروگرم شدن به درستی تکمیل نشود اما IDE پیغام Done successful بدهد. بنابراین در تصویر فوق که کنسول IDE است، همواره چک کنید که خطوط تا تکمیل ۱۰۰ درصدی را نشان داده باشند.

عملکرد پروژه‌ی LED چشمک زن بر روی STM32

چنانچه همه چیز به خوبی پیش رفته باشد، خواهید دید که LED سبز رنگ روی بورد در فاصله‌های یک ثانیه‌ای شروع به روشن و خاموش شدن خواهد کرد. این عملکرد را در ویدئوی بخش زیر هم می‌توانید ببینید. اگر حوصله داشتید می‌توانید کد را بیشتر هم دستکاری کنید و مثلا فاصله‌های بین چشمک زدن‌ها را کم و زیاد کنید.

نکته‌ی مهمی که وجود دارد، اگر می‌خواهید که دفعه‌ی بعدی که این بورد را روشن می کنید همین برنامه بر روی آن اجرا شود، لازم است که پس از اتمام بارگذاری کد بر روی آن، boot 0 را مجددا به مود عملکردی برگردانید. مانند تصویر زیر.

آموزش کار با میکروکنترلر STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

امیدواریم که این آموزش مقدماتی برای شروع کار با STM32 برایتان مفید بوده باشد. هر سوالی که در مورد پروژه داشتید را حتما در قسمت نظرات برای ما ارسال کنید.

کد

/*
 circuitdigest.com
 Sample STM32 Blink Program for Blue Pill board 
 */

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin PC13 as an output.
  pinMode(PC13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

ویدئو

امیدواریم آموزش «آموزش کار با میکروکنترلرهای STM32 با استفاده از Arduino IDE» براتون مفید واقع شده باشه.

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

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

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

یک دیدگاه

  1. مهدی نوروزی فر

    سلام. باتشکر از شما بخاطر مطالب آموزشی