ARM, STM, توصیه شده, دسته‌بندی نشده, نرم افزار

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

شروع برنامه نویسی آرم

آرم‌ات را قورت بده: آموزش شروع کار با میکروکنترلرهای 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 را به نظاره بنشینید.

20 دیدگاه در “آرم‌ات را قورت بده !

  1. Mfhm گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  2. احسان گفت:

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

  3. Amir گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  4. nazeri گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  5. MAH گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  6. Amir1995 گفت:

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

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

  7. ali.kh گفت:

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

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

  8. سجاد گفت:

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

    1. صالح صالح گفت:

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

  9. Amir1995 گفت:

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

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

  10. هاجر گفت:

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

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

      1. چنگیز گفت:

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

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

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