مهندس موفق الکترونیک

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

بورد STM32 Development Board که بورد توسعه‌ی میکروکنترلر STM32F103C8 محسوب می‌شود، با توجه به اینکه از معماری ARM Cortex M3 استفاده می‌کند، روز به روز در میان جامعه الکترونیک و برنامه‌نویسی محبوب‌تر و شناخته‌شده‌تر می‌شود. این بورد سرعت کاری بسیار بالا و آپشن‌های متعددی دارد و از آنجا که می‌توان آن را با استفاده از Arduino IDE نیز پروگرم کرد، در مجموع به یک گزینه‌ی مطلوب چه برای مهندسانی که قصد تولید prototype یک محصول را دارند و چه برای افرادی که از روی سرگرمی وارد دنیای الکترونیک می‌شوند تبدیل شده است.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

در جلسات قبلی آموزش این میکروکنترلر در مورد مشخصات اولیه‌ی این بورد صحبت کردیم و حتی یک پروژه‌ی ساده‌ی LED چشمک‌زن را نیز با هم بر روی آن اجرا کردیم. نقطه ضعفی که در آنجا وجود داشت این بود که برای پروگرم کردن این بورد باید از پروگرمر FTDI استفاده کنیم و در حین پروسه‌ی آپلود کردن کد باید boot 0 jumper را بین ۰ و ۱ جابه‌جا کنیم. این کار چنانچه بخواهید این بورد را به عنوان یکی از بوردهای مورد استفاده‌ی دائمی خود قرار دهید، کاری خسته‌کننده و سخت خواهد بود.

از سوی دیگر پورت mini USB بورد را در آن آموزش کاملا بی‌استفاده گذاشتیم. علت این کار این بود که در زمانی که ما بورد را خریداری می‌کنیم، Arduino boot loader بر روی آن آماده‌ی استفاده نیست و به همین دلیل اگر آن را از طریق USB به سیستم خود متصل کنیم سیستم آن را شناسایی نخواهد کرد.

اما خوشبختانه LeafLabs یک experimental boot loader خوب برای بوردهای Maple mini ارائه داده است که می‌توانیم آن را برای بورد STM32 نیز استفاده کنیم. به این ترتیب که یک بار آن را بر روی بورد فلش می‌کنیم و از آن به بعد می‌توانیم به راحتی بورد را از طریق USB port پروگرم کنیم. درست مانند بوردهای آردوینو.

البته نکته‌ی بسیار مهمی که لازم است حتما بر روی آن تاکید کنیم، این است که این boot loader در حال حاضر در مراحل توسعه‌ی اولیه است (لااقل تا زمان نوشتن این مطلب) و بهتر است در پروژه‌ها‌ی حساس از آن استفاده نکنیم و نکته‌ی دیگر اینکه توصیه می‌کنیم چنانچه آموزش‌های قبلی درباره‌ی این بورد را نخوانده‌اید، پیش از خواندن ادامه‌ی این جلسه به سراغ آنها بروید تا با مشخصات اولیه بورد و پایه‌های آن به‌ درستی آشنا شوید.

وسایل مورد نیاز برای اجرای این پروژه

  • بورد توسعه‌ی STM32 (معروف به بورد BluePill)
  • برد بورد
  • پروگرمر FTDI
  • برد بورد و سیم‌های رابط
  • یک لپ‌تاپ یا کامپیوتر متصل به اینترنت

شماتیک مدار

همان طور که گفتیم، برای آنکه بتوانیم بورد STM32 را مستقیما از طریق USB port پروگرم کنیم، ابتدا باید Maple boot loader را بر روی آن فلش کنیم. برای این کار نیاز به بورد پروگرمر FTDI داریم. این بورد را مطابق شکل زیر به پین های Rx و Tx میکرو متصل می‌کنیم. (در واقع پین‌های Rx و Tx پرورگرمر، به ترتیب به پین‌های A9 و A10 میکرو که پین‌های Rx و Tx آن هستند، متصل می‌شوند)

مطلب پیشنهادی:  واحد کنترل اینتراپت بخش اول(NVIC)

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

پین Vcc آن را به پین ۵ ولت میکرو و Gndها را نیز به هم وصل می‌کنیم.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

سپس مطمئن شوید که پین boot 0 jumper در بورد STM3، در زمانی که می‌خواهیم boot loader را بر روی میکرو آپلود کنیم، در وضعیت یک (programming mode) باشد و پس از اتمام پروسه‌ی آپلود شدن مجددا آن را به وضعیت اولیه‌اش (operating mode) برگردانید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

آپلود کردن Maple Boot loader بر روی بورد توسعه‌ی میکروکنترلر STM32

پس از اینکه اتصالات فوق را برقرار کردید، پروگرمر FTDI را به لپ‌تاپ وصل کنید و مراحل زیر را قدم به قدم اجرا کنید.

مرحله ۱: ابتدا باید از صفحه‌ی github، فایل bin. این boot loader را دانلود کنیم. نسخه‌های مختلفی برای bin file این boot loader وجود دارد. برای دریافت فایل مربوط به STM32 بهتر است آن را از طریق این لینک از همان صفحه‌ی github دانلود کنید.

مرحله ۲: سپس باید نرم‌افزار STM Flash loader را دانلود کنیم تا بتوانیم فایل bin. دریافت شده را بر روی STM32 فلش کنیم. برای دریافت آن می‌توانید از این لینک استفاده کنید. صفحه که باز شد به انتهای آن بروید و نرم‌افزار را از آنجا دریافت کنید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

مرحله ۳: برای دانلود کردن نرم‌افزار از شما یک آدرس ایمیل خواسته می‌شود. پس از وارد کردن ایمیل ، لینک دانلود برای‌ شما ارسال خواهد شد. با کلیک بر روی لینک دریافت شده، مجددا به وب‌سایت برخواهید گشت و این بار دانلود شما شروع می‌شود. گاهی ‌اوقات دریافت لینک دانلود ممکن است چند دقیقه‌ای طول بکشد و یا اینکه ایمیل ارسال شده در فولدر اسپم‌ها قرار گیرد. پس حتما آنجا را هم چک کنید. (قبول داریم که پروسه‌ی کسل کننده‌ای است اما چاره‌ای نیست)

مرحله ۴: پس از اتمام دانلود برنامه را نصب کنید. سپس اطمینان حاصل کنید که بورد STM32 به واسطه‌ی پروگرمر FTDI به سیستم شما متصل است. در صورت برقرار بودن اتصال، نرم‌افزار را باز کنید. خود نرم‌افزار به صورت خودکار پورت COM را تشخیص خواهد داد. اگر این اتفاق نیفتاد به Device Manager بروید و به صورت دستی خودتان آن را انتخاب کنید. (معمولا این طور است که باید COM4 را انتخاب کنید) بقیه تنظیمات را مطابق تصویر زیر بگذارید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

مرحله ۵: دو بار پشت سر هم next را بزنید و می‌بنیید که مانند تصویر زیر، نرم‌افزار به صورت خودکار مشخصات بورد را دریافت کرده و نمایش می‌دهد. بوردی که ما در اینجا استفاده کرده‌ایم STM32F1 با حافظه‌ی فلش 128K است.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

مرحله ۶: در صفحه‌ی بعدی، Download to device را انتخاب کنید و از آنجا محلی که فایل bin. را در آن ذخیره کرده بودید را انتخاب کنید. پس از انتخاب فایل، next را بزنید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

مرحله ۷: نرم‌افزار ابتدا برخی فایل‌هایی که نیاز دارد را دانلود کرده (مانند تصویر زیر) و پس از آن فرآیند فلش کردن را شروع می‌کند.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

مرحله ۸: زمانی که فرآیند فلش شدن با موفقیت به اتمام برسد، پنجره‌ای مانند تصویر زیر را خواهیم دید. در این مرحله پنجره را ببندید و از برنامه خارج شوید. کاری که توانستیم با موفقیت انجام دهیم این بود که Arduino boot loader را بر روی بورد توسعه‌ی میکروکنترلر STM32 فلش کنیم.

مطلب پیشنهادی:  اتصال ماژول 433Mhz RF به STM32

در قدم بعدی باید درایورهای لازم را بر روی Arduino IDE نصب و آماده کنیم تا بتوانیم از آن برای پروگرم کردن STM32 استفاده کنیم.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

آماده کردن Arduino IDE و نصب درایورها

مراحل زیر را به دقت دنبال کنید تا Arduino IDE را دانلود و آن را برای پروگرم کردن STM32 آماده کنید.

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

مرحله ۲: پس از نصب، آن را باز کنید و پکیج‌های مربوط به STM32 را از این مسیر دریافت و باز کنید، File -> Preferences.

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

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

 و سپس OK را بزنید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

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

مرحله ۵: پس از اینکه نصب پکیج انجام شد، به مسیر زیر بروید،

C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\drivers\win

که در آنجا فایل‌های install_drivers.bat و install_STM_COM_drivers.bat را خواهید یافت.

مرحله ۶: بر روی هر دو فایل‌ کلیک کرده و آنها را نصب‌ کنید. پس از نصب شدن یک صفحه‌ی DOS مانند تصویر زیر باز خواهد شد.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

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

پروگرم کردن مستقیم بورد STM32 از طریق USB port

پروگرمر و تمام اتصالات جانبی آن را از STM32 جدا کنید. از پورت میکرو USB بورد استفاده کرده و مانند تصویر زیر آن را به کامپیوتر وصل کنید. دقت کنید که پین jumper 0 در همان موقعیت اولیه‌ی خود یعنی Operating mode باشد. از این به بعد نیز دیگر نیازی نیست که در زمان پروگرم کردن بورد این پین را تغییر وضعیت دهیم.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

در این لحظه کامپیوتر شما باید بتواند اتصال بورد را تشخیص داده و آن را شناسایی کند. اگر احیانا دیدید که درایوری در حال نصب است، چند لحظه صبر کنید تا کار آن تمام شود. سپس به Device Manager بروید و از آنجا بررسی کنید که آیا بورد مانند تصویر زیر در گروه (Ports(COM قرار گرفته است یا خیر. همان طور که در تصویر مشخص است، برای ما با نام Maple Mini شناسایی شده و به COM8 متصل شده است.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

حالا به قسمت Tools بروید و در آنجا در پایین صفحه Generic STM32F103C series را بیابید. سپس بررسی کنید که variant روی 64k Flash type و CPU speed روی 72MHz باشند و upload method را بر روی STM32duino Bootloader قرار دهید. پورت COM را هم بر اساس چیزی که در Device Manager خودتان بود انتخاب کنید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

بعد از اینکه تمام این کارها را انجام دادید، قسمت پایین سمت راست پنجره‌ی Arduino IDE را بررسی کنید و ببینید که این پیام نمایش داده شده باشد.

مطلب پیشنهادی:  اجرای RTOS بر روی میکرو کنترلر ARM

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

(همان طور که گفتیم بورد برای ما به COM8 متصل شده است. برای شما ممکن است متفاوت باشد.)

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

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

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

کدی که در بخش تابع حلقه وجود دارد را در اینجا آورده‌ایم. می‌بینید که عملکرد برنامه به این صورت تعریف شده است که پین PC13 برای مدت ۱۰۰۰ میلی ثانیه HIGH (LED : ON) و پس از آن برای مدت ۱۰۰۰ میلی ثانیه LOW (LED : OFF) باشد. و این کار بی نهایت بار تکرار شود (چون در داخل تابع حلقه هستیم) معنای ساده‌ی این توضیحات این است که برنامه تنظیم شده است تا 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

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

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

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

به پایان این آموزش رسیدیم. از حالا می‌توانید با خیال راحت بورد توسعه‌ی STM32 را نیز مانند بوردهای آردوینو به راحتی و بدون نیاز به پروگرمر و مدار واسطه و بدون نیاز به جابه‌جایی وضعیت jumper pin، پروگرم کنید.

پروگرم کردن بورد STM32F103C8 با استفاده از USB port

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

ویدئو پروگرم کردن بورد STM32F103C8

امیدواریم که آموزش پروگرم کردن بورد STM32F103C8 با استفاده از USB port براتون مفید واقع شده باشه. اگر این آموزش براتون مفید واقع شده ما را نیز دعا کنید و اگر خواستین می‌توانید از محتوا‌ی رایگان آموزشی حمایت مالی کنید.

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

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

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

2 دیدگاه

  1. محمد تقی خدادوست

    با سلام
    من همه کارهایی که شما گفتید رو انجام دادم. بردم توسط کامپیوتر و اردوینو شناسایی می شه ولی وقتی کامپایل برنامه رو می زنم خطای زیر ظاهر می شه. در لیست برد های موجود در board manager هم برد generic stm32 f103 هم شناسایی شده ولی باز هم خطای زیر ظاهر می شه
    Board genericSTM32F103C (platform STM32F1, package stm32duino) is unknown

    Error compiling for board Generic STM32F103C series.
    به نظر شما باید چکار کرد؟
    با تشکر

  2. امین شیخ زاده

    سلام میشه با همین روش (استفاده از usb) از نرم افزار کیل یا stm32cubeIDE برنامه رو روی میکرو پروگرام کرد؟