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

blog
۱۳۹۶-۰۴-۱۹
5 دقیقه

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

اطلاعات
25
0
لینک و اشتراک
profile

صاد میم

متخصص الکترونیک

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

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

دیدگاه ها

profile
عباس زارعی گفت :
۱۴۰۲-۰۹-۰۶ ۱۶:۳۹

سلام استاد
ممنون بابت همه آموزشهای خیلی خوبتون
استاد من میخوام آموزش آرم و شروع کنم ولی نمیدونم برای کدوم آرم وقت بذارم که تو ایران بیشترین کاربرد و داشته باشه…
ممنون میشم راهنماییم کنید…
intel
nxp
stm
واقعا گیج شدم

profile
مندس لطیفی گفت :
۱۳۹۹-۰۷-۱۴ ۰۱:۵۶

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

profile
علی گفت :
۱۳۹۷-۱۰-۲۷ ۱۶:۳۸

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

profile
صالح مهدیخانی گفت :
۱۳۹۷-۱۱-۰۲ ۱۰:۵۵

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

profile
زئوس Zeus گفت :
۱۳۹۷-۱۱-۰۲ ۱۰:۳۸

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

profile
Mfhm گفت :
۱۳۹۷-۰۷-۱۲ ۰۷:۱۸

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

profile
زئوس Zeus گفت :
۱۳۹۷-۰۷-۱۲ ۰۹:۲۸

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

profile
احسان گفت :
۱۳۹۷-۰۶-۲۸ ۰۰:۵۵

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

profile
Amir گفت :
۱۳۹۷-۰۴-۲۱ ۱۲:۱۱

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

profile
زئوس Zeus گفت :
۱۳۹۷-۰۴-۲۳ ۰۹:۵۳

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

profile
nazeri گفت :
۱۳۹۶-۱۲-۱۹ ۱۳:۵۲

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

profile
زئوس Zeus گفت :
۱۳۹۶-۱۲-۲۳ ۱۴:۲۴

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

profile
MAH گفت :
۱۳۹۶-۰۸-۲۲ ۱۲:۲۵

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

profile
زئوس Zeus گفت :
۱۳۹۶-۰۹-۰۱ ۱۱:۵۰

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

profile
Amir1995 گفت :
۱۳۹۶-۰۴-۳۰ ۱۷:۵۷

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

profile
صالح مهدیخانی گفت :
۱۳۹۶-۰۴-۳۱ ۱۸:۴۱

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

profile
ali.kh گفت :
۱۳۹۶-۰۴-۲۳ ۲۳:۵۲

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

profile
صالح مهدیخانی گفت :
۱۳۹۶-۰۴-۲۴ ۱۰:۰۵

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

profile
سجاد گفت :
۱۳۹۶-۰۴-۲۳ ۰۳:۳۶

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

profile
صالح گفت :
۱۳۹۶-۰۴-۲۳ ۱۳:۴۱

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

profile
Amir1995 گفت :
۱۳۹۶-۰۴-۲۰ ۱۱:۵۸

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

profile
صالح مهدیخانی گفت :
۱۳۹۶-۰۴-۲۰ ۱۲:۱۲

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

profile
هاجر گفت :
۱۳۹۶-۰۴-۲۰ ۱۰:۵۲

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

profile
Saleh Mehdikhani گفت :
۱۳۹۶-۰۴-۲۰ ۱۱:۱۸

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

profile
چنگیز گفت :
۱۳۹۷-۰۱-۲۲ ۲۳:۱۴

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

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله