آرم‌ات را قورت بده !

آرم‌ات را قورت بده !

آرم‌ات را قورت بده !
آرم‌ات را قورت بده !

آرم‌ات را قورت بده: آموزش شروع کار با میکروکنترلرهای ARM

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

همراه این پست باشید تا ببینید چه آسان می‌توان قورباغه‌ی ARM را قورت داد.

حتماً به دلیل استفاده‌ی فراوان از پردازنده‌های ARM در محصولاتی که امروزه اطراف ما را پر کرده‌اند، به‌ویژه گوشی‌های موبایل، نام آن را شنیده‌اید و آشنایی مختصری با آن دارید.

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

پس بدون هیچ مقدمه‌ی دیگری آموزش کار با این سری میکروها را شروع کنیم.

 

آموزش ARM STM32

 

کاسه و بشقاب را بردارید.

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

بردهای آموزشی زیادی هم در بازار ایران قابل تهیه هستند. طرز کار همگی آن‌ها مشابه هم هست. من در اینجا از برد آموزشی میکروکنترلر STM32F103RET6 استفاده خواهم کرد. این برد و برخی بردهای مشابه دیگر را در عکس‌های زیر مشاهده می‌کنید:بردهای آموزشی STM 'میکروکنترلرهای ARM

قاشق و چنگال را به دست بگیرید.

شروع کار با نرم‌افزار STM32CubeMX 

خوشبختانه کمپانی ST ابزاری برای پیکربندی اولیه‌ی میکروهای سری STM32 ارایه داده است. اگر یک بار به‌صورت دستی رجیسترهای پیکربندی را تنظیم کرده باشید، حتماً قدر این‌چنین ابزاری را خواهید دانست. این برنامه چیزی شبیه CodeWizard ارایه شده توسط Codevision برای میکروهای AVR است. این ابزار را می‌توانید از سایت کمپانی ST و با نام STM32CubeMX به‌صورت رایگان دریافت نمایید.

آموزش نرم افزار stm32cubemx

 

ابزار بعدی که به آن نیاز دارید، یک کامپایلر خوش‌دست است. انتخاب من برای این سری از میکروکنترلرها، Keil است. می‌توانید از نسخه‌ی رایگان آن برای کارهای ابتدایی و حتی متوسط استفاده نمایید. خوشبختانه ابزار STM32CubeMX خروجی مناسب برای این کامپایلر را تولید می‌نماید. در واقع تمام سورس‌کدهای ابتدایی توسط این ابزار تولید می‌شوند و شما فقط کافی است تا پروژه‌ی ایجاد‌شده را در Keil باز نمایید.

 

آموزش نرم افزار Keil

 

و البته برای انتقال کدهای تولید‌شده به میکروکنترلرتان، به یک پروگرامر هم نیاز دارید. پیشنهاد من، ST Link V2 است که می‌توانید به‌راحتی و با قیمتی مناسب در بازار ایران آن را تهیه کنید. این پروگرامر مخصوص میکروهای سری STM32 و STM8 است.

 

پروگرمر ST

کمی سالاد بریزید.

همه‌چیز آماده است تا عضوی از خانواده‌ی توسعه‌دهندگان ARM شوید. برنامه‌ی STM32CubeMX را باز کنید و پس از کلیک بر روی New Project، میکروکنترلر خودتان را انتخاب کنید. صفحه‌ای برای نمایش پین‌های میکروکنترلر نمایش داده می‌شود. چون پروژه‌ی Hello World ما سخت‌افزاری‌ها، چشمک زدن LED است، تنظیمات برای چنین پروژه‌ای اجرا می‌نماییم. با فرض قرار گرفتن LED بر روی پین PA0، کافی است تا با کلیک بر روی این پین، آن را در حالت GPIO_Output قرار دهیم.

در تب Clock Configuration می‌توانید تنظیمات مربوط به ساعت و فرکانس سیستم را انجام دهید. در زبانه‌ی Configuration هم برخی تنظیمات پیشرفته‌تر و جزئی قابل‌تغییر هستند. در زبانه‌ی آخر هم می‌توانید توان مصرفی را محاسبه نمایید. برای پروژه LED به‌جز موردی که گفته شد، نیاز به تغییر در هیچ‌یک از موارد دیگر وجود ندارد. پس به منوی Project رفته و گزینه‌ی Generate Code را انتخاب نمایید.

با باز شدن پنجره‌ی تنظیمات، نامی برای پروژه و محل ذخیره‌سازی آن را انتخاب کنید. در قسمت Toolcjain/IDE کامپایلری که از آن استفاده می‌نمایید را مشخص نمایید. در اینجا از MDK-ARM V5 که همان Keil نسخه‌ی 5 است، استفاده می‌شود.

آموزش نرم افزار STM32 Cube

 

غذای اصلی؛ بفرمایید قورباغه!

پروژه را در Keil باز نمایید. در قسمت Project می‌توانید فایل‌هایی که توسط STM32CubeMX تولید شده است، مشاهده نمایید. با کمی گشت زدن در کدها، خودتان کم‌کم می‌توانید در مورد توسعه‌ی کدهای ARM اطلاعات بیشتری کسب کنید. چیزی که الان برای چشمک زدن LED نیاز دارید این است که فایل main.c موجود در فولدر Application/User را باز نمایید. در این فایل مشاهده می‌کنید که قسمت‌هایی با کامنت User Code مشخص شده است. در این قسمت‌ها، می‌توانید کدهای خودتان را اضافه نمایید. چنانچه در بخشی خارج از این موارد، کدی را اضافه نمایید، با به‌روز‌رسانی تنظیمات در STM32CubeMX، کدهای اضافه‌شده‌ی شما حذف خواهند شد.

با تغییر در loop اصلی برنامه، LED متصل شده به پین A0 را هر یک ثانیه خاموش و روشن نمایید. کد شما باید شبیه قطعه کد زیر باشد:

به آخرین گام میرسیم: انتقال کد به میکروکنترلر.

پروگرامر به درگاه پروگرام میکرو وصل کنید. اطمینان حاصل کنید که درایورهای مربوط به پروگرامر بر روی کامپیوتر نصب شده باشند.

با زدن F7 برنامه Build میشود و با فشار بر روی F8، برنامه از طریق پروگرامر به چیپ منتقل می‌شود.

همه‌چیز تمام است. چشمک زدن LED را به نظاره بنشینید.

حمایت از صاد میم

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

صاد میم
صاد میم

کارشناس ارشد سخت افزار

دیدگاه ها

24 دیدگاه

  • مندس لطیفی
    ۱۴ مهر ۱۳۹۹

    میتونید با خیلی روش ساده تر و کار آمد تر برنامه نوشت با flowcode 8 که از خانواده میکرو stm32f هم داره

  • علی
    ۲۷ دی ۱۳۹۷

    لطفا برای اشنایی با keil 5.26 یه برنامه ساده led بنویسید بدون استفاده از cube .
    چون من نصبش کردم با نسخه های قبلی متفاوته و برنامه ساده زیر رو ارور میده .
    #include “stm32f10x.h”
    }(int main(void
    }(while(1
    {
    {

    • Zeus ‌
      زئوس Zeus
      ۲ بهمن ۱۳۹۷

      برای این که بتونیم مساله رو روشن کنیم باید ببینیم که کیل که چه خطایی بهتون نشون میده تا بتونیم دلیلش رو بررسی کنیم

    • صالح مهدیخانی
      ۲ بهمن ۱۳۹۷

      سلام
      به نظرم شروع به کار با میکروهای STM بدون استفاده از Cube روش مناسبی نیست. چون در این صورت شما به جای پرداختن به مساله ی اصلی، درگیر تنظیم رجیسترهای داخلی میکرو میشوید و هزینه و زمان زیادی را از دست میدهید.

  • Mfhm
    ۱۲ مهر ۱۳۹۷

    سلام من تو نرم افزار cubeفایل پروژه رو میسازم (باkeil5) اما وقتی open projectمی کنم اصلا قسمت application /userتوی نرم افزارkeil نمیاد فقط و فقطcmiss میسازه کلا فال mainرو نمیسازه اگه میشه راهنماییم کنید

    • Zeus ‌
      زئوس Zeus
      ۱۲ مهر ۱۳۹۷

      ممکنه نرم افزار cube شما آپدیت نباشه یا این که پک های لازم رو برای خانواده مورد نظر نداشته باشه که نمیتونه به درستی کد ایجاد کنه !
      از آخرین ورژن نرم افزار Cube استفاده کنید

  • احسان
    ۲۸ شهریور ۱۳۹۷

    سلام
    به نظرم سعی کنید به سمت برنامه های اپن سورس برید تا وقتی همه آموزش ها
    با کیل انجام بشه خب معلومه کسی به سمت برنامه ای مثل sw4stm32 نمیره
    که بر پایه اکلیپس هست امکانات به مراتب بهتری از کیل در اختیار قرار میده سبک و
    روان هم هست و از همه مهمتر رایگان هست نیاز به کرک نداره حجم کمتری نسبت به
    کیل داره و کسایی که برنامه نویسی با اکلیپس انحام دادن به راحتی با این برنامه کار میکنن
    منابع انگلیسی خوبی هم واسش هست

  • Amir
    ۲۱ تیر ۱۳۹۷

    سلام
    ممنون از مطالبتون
    ببخشید چرا شما که از open source حمایت میکنید از keil استفاده میکنید؟
    برتری keil نسبت به eclipse یاide های رایگان دیگر دیگر چیست؟
    ممنون

    • Zeus ‌
      زئوس Zeus
      ۲۳ تیر ۱۳۹۷

      سلام دوست عزیز
      بله ما برنامه های متن باز رو ترجیه میدهیم به شخصه حدود 5 سالی میشه که با keil کار نکردم
      اما در نظر داشته باشید که بیشتر افراد با این نرم افزار کار می کنند و به همین دلیل مجبوریم تمام نیاز ها رو پوشش بدیدم
      به نظر من هیچ برتری وجود نداره ، حتی keil مقداری عقب تر هست.

  • nazeri
    ۱۹ اسفند ۱۳۹۶

    سلام، در طراحی و ساخت یک سری پروژه های صنعتی با arm می تونیم همکاری داشته باشیم.
    در صورت تمایل به _________________ پیامک بفرستید تا با شما تماس بگیریم

    • Zeus ‌
      زئوس Zeus
      ۲۳ اسفند ۱۳۹۶

      دوست عزیز ، فعالیت ما به صورت رایگان هست و اینجا جایی برای تبلیغ نیست
      اگر تمایل دارید همکاری داشته باشید به تلگرام سیسوگ مراجعه کنید.

  • MAH
    ۲۲ آبان ۱۳۹۶

    برای میکرو های stm8 چه طوری با نرم افزار cube کانفیگش کنیم
    آیا میشه به stm32cube کتابخونه stm8 رو اد کرد؟

    • Zeus ‌
      زئوس Zeus
      ۱ آذر ۱۳۹۶

      تا اونجایی که اطلاع دارم stm32cube برای میکروی های 32 بیتی این شرکت هست و برای میکروهای 8 بیتی ابزار دیگری به اسم STM8CubeMX وجود دارد که میتوانید از آن استفاده کنید.

  • Amir1995
    ۳۰ تیر ۱۳۹۶

    سلام
    خسته نباشید
    اگه ممکنه بیشتر در مورد آرگومان توابع HAL توضیح بدین که این ورودی ها چی هستند و از کجا باید بیاریم؟؟
    از چه رفرنسی ؟؟
    مثلا
    HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
    محتویات پرانتز از کجا بیاریم؟؟
    چی هستن؟؟

    • ص م
      صالح مهدیخانی
      ۳۱ تیر ۱۳۹۶

      سلام
      متاسفانه منبع شسته و رفته ای که از صفر تا صد این توابع را داکیومنت کرده باشد، بنده تا به حال ندیده ام. با این حال با مراجعه به فایل های پیاده سازی این توابع و خواندن کامنتهای آن، خیلی میتواند کمک تان کند. در مورد تابع HAL_GPIO_Init که پرسیده بودید، اگر مراحلی که در پست آموزشی دنبال کرده بودید را انجام داده باشید، این تابع در MX_GPIO_Init فراخوانی شده است و آرگومانهای GPIOA و GPIO_InitStruct به آن پاس داده شده است. برای دستیابی به اطلاعات بیشتر در مورد تابع HAL_GPIO_Init در قسمتی از کد (در محیط توسعه keil)، بر روی آن راست کلیک کرده و گزینه ی Go to definition of HAL_GPIO_Init را انتخاب کنید. یکراست به stm32f1xx_hal_gpio.c که محل پیاده سازی این تابع است منتقل میشوید. در مورد هر کدوم از آرگومانها هم میتوانید همین فریاند را تکرار کنید

  • ali.kh
    ۲۳ تیر ۱۳۹۶

    بسیار آموزش خوبیو شروع کردید.به خصوص اینکه آموزش stm32 فارسی کم هست،البته امیدوارم این آموزش ادامه دار باشه.
    حتما تو ادامه آموزشهاتون،آموزش آماده سازی کمپایلر اکلیپس رو برای این میکروکنترلر و مچ شدنش با stm32cubemx رو تو برنامتون بزارید.
    ممنون

    • ص م
      صالح مهدیخانی
      ۲۴ تیر ۱۳۹۶

      چرا eclipse ؟ به نظرم keil که آموزش با آن شروع شده است ابزار خیلی خوبیه، هم سبک هستش و هم کار با اون راحته.

  • سجاد
    ۲۳ تیر ۱۳۹۶

    عالی عالی عالی

    • صالح
      ۲۳ تیر ۱۳۹۶

      ممنون از لطف تون، ترجیح میدید قسمت دوم آموزش در مورد چی باشه ؟

  • Amir1995
    ۲۰ تیر ۱۳۹۶

    سلام
    مثل همیشه جذاب و عالی بود
    فقط میتونم بگم دستتون درد نکنه _ مرسی
    منتظر ادامه این مطلب هستیم …

    • ص م
      صالح مهدیخانی
      ۲۰ تیر ۱۳۹۶

      در اولین فرصت، ادامه ی مطلب هم منتشر خواهد شد

  • هاجر
    ۲۰ تیر ۱۳۹۶

    سلام از مطالب مفیدتون متشکرم خواهش می کنم این مبحث رو ادامه بدین و اینکه لطف می کنین در مورد قسمت clock configuration بیشتر توضیح بدین . ممنون

    • ص م
      Saleh Mehdikhani
      ۲۰ تیر ۱۳۹۶

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

      • چنگیز
        ۲۲ فروردین ۱۳۹۷

        سلام
        بسیار روان و ساده بود
        لطفا اموزش دیباک را هم قرار بدهید
        با تشکر

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 9 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش

درآمد زایی به سبک پینوکیو

ما مهندسین, بخصوص مهندسین برق و الکترونیک … علاقه خاصی به طراحی و ساختن داریم علاقه زیادی به تکنولوژی , بخصوص از...

Sisoog Os Sisoog Os
  • 3 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک