آرمات را قورت بده: آموزش شروع کار با میکروکنترلرهای ARM
وقتی به برنامهنویسی در یک برنامه خاص یا با یک سیستم خاص عادت کرده باشی، شروع کردن برنامهنویسی در محیطهای جدید سخت و حتی همراه با ترس از عدم موفقیت خواهد بود. حس و حالی که خود من هم مدتها پیش از این داشتم. دقیقاً زمانی که میخواستم از AVR دوستداشتنی دل بکنم و برنامهنویسی با میکروهای سری ARM را شروع کنم.
همراه این پست باشید تا ببینید چه آسان میتوان قورباغهی ARM را قورت داد.
حتماً به دلیل استفادهی فراوان از پردازندههای ARM در محصولاتی که امروزه اطراف ما را پر کردهاند، بهویژه گوشیهای موبایل، نام آن را شنیدهاید و آشنایی مختصری با آن دارید.
میکروکنترلرهای سری ARM توسط کمپانیهای متفاوتی تولید میشوند. آنچه که این محصولات را از هم متمایز میکند، شرایط کاری، ویژگیهای جانبی، کیفیت و فرومهایی است که برای هر یک از این محصولات ایجاد شده است. میکروهای ARM تولیدشده توسط کمپانی ST از آن دسته محصولاتی است که ابزارهای بسیار خوبی برای آن فراهم شده است و بهراحتی نیز در بازار ایران یافت میشوند.
پس بدون هیچ مقدمهی دیگری آموزش کار با این سری میکروها را شروع کنیم.
کاسه و بشقاب را بردارید.
به نظرم بهترین راه برای شروع یادگیری کار با یک میکروکنترلر، تهیهی یک برد آموزشی است. بههیچعنوان توصیه نمیکنم که در ابتدای راه خودتان بردی را طراحی کنید. چون در آن صورت دو مجهول خواهید داشت: هم سختافزار و هم نرمافزار. در طی فرایند برنامهنویسی هم هر مشکلی ایجاد بشود،نمیتوان با اطمینان گفت که مشکل از برنامهی شماست یا از سختافزاری که طراحی کردهاید. برای برداشتن هر گام، بهترین کار این است که زمین گام قبلیمان سفت باشد.
بردهای آموزشی زیادی هم در بازار ایران قابل تهیه هستند. طرز کار همگی آنها مشابه هم هست. من در اینجا از برد آموزشی میکروکنترلر STM32F103RET6 استفاده خواهم کرد. این برد و برخی بردهای مشابه دیگر را در عکسهای زیر مشاهده میکنید:
قاشق و چنگال را به دست بگیرید.
شروع کار با نرمافزار STM32CubeMX
خوشبختانه کمپانی ST ابزاری برای پیکربندی اولیهی میکروهای سری STM32 ارایه داده است. اگر یک بار بهصورت دستی رجیسترهای پیکربندی را تنظیم کرده باشید، حتماً قدر اینچنین ابزاری را خواهید دانست. این برنامه چیزی شبیه CodeWizard ارایه شده توسط Codevision برای میکروهای AVR است. این ابزار را میتوانید از سایت کمپانی ST و با نام STM32CubeMX بهصورت رایگان دریافت نمایید.
ابزار بعدی که به آن نیاز دارید، یک کامپایلر خوشدست است. انتخاب من برای این سری از میکروکنترلرها، Keil است. میتوانید از نسخهی رایگان آن برای کارهای ابتدایی و حتی متوسط استفاده نمایید. خوشبختانه ابزار STM32CubeMX خروجی مناسب برای این کامپایلر را تولید مینماید. در واقع تمام سورسکدهای ابتدایی توسط این ابزار تولید میشوند و شما فقط کافی است تا پروژهی ایجادشده را در Keil باز نمایید.
و البته برای انتقال کدهای تولیدشده به میکروکنترلرتان، به یک پروگرامر هم نیاز دارید. پیشنهاد من، ST Link V2 است که میتوانید بهراحتی و با قیمتی مناسب در بازار ایران آن را تهیه کنید. این پروگرامر مخصوص میکروهای سری STM32 و STM8 است.
کمی سالاد بریزید.
همهچیز آماده است تا عضوی از خانوادهی توسعهدهندگان 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 است، استفاده میشود.
غذای اصلی؛ بفرمایید قورباغه!
پروژه را در Keil باز نمایید. در قسمت Project میتوانید فایلهایی که توسط STM32CubeMX تولید شده است، مشاهده نمایید. با کمی گشت زدن در کدها، خودتان کمکم میتوانید در مورد توسعهی کدهای ARM اطلاعات بیشتری کسب کنید. چیزی که الان برای چشمک زدن LED نیاز دارید این است که فایل main.c موجود در فولدر Application/User را باز نمایید. در این فایل مشاهده میکنید که قسمتهایی با کامنت User Code مشخص شده است. در این قسمتها، میتوانید کدهای خودتان را اضافه نمایید. چنانچه در بخشی خارج از این موارد، کدی را اضافه نمایید، با بهروزرسانی تنظیمات در STM32CubeMX، کدهای اضافهشدهی شما حذف خواهند شد.
با تغییر در loop اصلی برنامه، LED متصل شده به پین A0 را هر یک ثانیه خاموش و روشن نمایید. کد شما باید شبیه قطعه کد زیر باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_TogglePin(GPIOA, 0); //Set pin 0 of PORTA HAL_Delay(1000); //wait 1 second /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } |
به آخرین گام میرسیم: انتقال کد به میکروکنترلر.
پروگرامر به درگاه پروگرام میکرو وصل کنید. اطمینان حاصل کنید که درایورهای مربوط به پروگرامر بر روی کامپیوتر نصب شده باشند.
با زدن F7 برنامه Build میشود و با فشار بر روی F8، برنامه از طریق پروگرامر به چیپ منتقل میشود.
همهچیز تمام است. چشمک زدن LED را به نظاره بنشینید.
سلام استاد
ممنون بابت همه آموزشهای خیلی خوبتون
استاد من میخوام آموزش آرم و شروع کنم ولی نمیدونم برای کدوم آرم وقت بذارم که تو ایران بیشترین کاربرد و داشته باشه…
ممنون میشم راهنماییم کنید…
intel
nxp
stm
واقعا گیج شدم
میتونید با خیلی روش ساده تر و کار آمد تر برنامه نوشت با flowcode 8 که از خانواده میکرو stm32f هم داره
لطفا برای اشنایی با keil 5.26 یه برنامه ساده led بنویسید بدون استفاده از cube .
چون من نصبش کردم با نسخه های قبلی متفاوته و برنامه ساده زیر رو ارور میده .
#include “stm32f10x.h”
}(int main(void
}(while(1
{
{
برای این که بتونیم مساله رو روشن کنیم باید ببینیم که کیل که چه خطایی بهتون نشون میده تا بتونیم دلیلش رو بررسی کنیم
سلام
به نظرم شروع به کار با میکروهای STM بدون استفاده از Cube روش مناسبی نیست. چون در این صورت شما به جای پرداختن به مساله ی اصلی، درگیر تنظیم رجیسترهای داخلی میکرو میشوید و هزینه و زمان زیادی را از دست میدهید.
سلام من تو نرم افزار cubeفایل پروژه رو میسازم (باkeil5) اما وقتی open projectمی کنم اصلا قسمت application /userتوی نرم افزارkeil نمیاد فقط و فقطcmiss میسازه کلا فال mainرو نمیسازه اگه میشه راهنماییم کنید
ممکنه نرم افزار cube شما آپدیت نباشه یا این که پک های لازم رو برای خانواده مورد نظر نداشته باشه که نمیتونه به درستی کد ایجاد کنه !
از آخرین ورژن نرم افزار Cube استفاده کنید
سلام
به نظرم سعی کنید به سمت برنامه های اپن سورس برید تا وقتی همه آموزش ها
با کیل انجام بشه خب معلومه کسی به سمت برنامه ای مثل sw4stm32 نمیره
که بر پایه اکلیپس هست امکانات به مراتب بهتری از کیل در اختیار قرار میده سبک و
روان هم هست و از همه مهمتر رایگان هست نیاز به کرک نداره حجم کمتری نسبت به
کیل داره و کسایی که برنامه نویسی با اکلیپس انحام دادن به راحتی با این برنامه کار میکنن
منابع انگلیسی خوبی هم واسش هست
سلام
ممنون از مطالبتون
ببخشید چرا شما که از open source حمایت میکنید از keil استفاده میکنید؟
برتری keil نسبت به eclipse یاide های رایگان دیگر دیگر چیست؟
ممنون
سلام دوست عزیز
بله ما برنامه های متن باز رو ترجیه میدهیم به شخصه حدود 5 سالی میشه که با keil کار نکردم
اما در نظر داشته باشید که بیشتر افراد با این نرم افزار کار می کنند و به همین دلیل مجبوریم تمام نیاز ها رو پوشش بدیدم
به نظر من هیچ برتری وجود نداره ، حتی keil مقداری عقب تر هست.
سلام، در طراحی و ساخت یک سری پروژه های صنعتی با arm می تونیم همکاری داشته باشیم.
در صورت تمایل به _________________ پیامک بفرستید تا با شما تماس بگیریم
دوست عزیز ، فعالیت ما به صورت رایگان هست و اینجا جایی برای تبلیغ نیست
اگر تمایل دارید همکاری داشته باشید به تلگرام سیسوگ مراجعه کنید.
برای میکرو های stm8 چه طوری با نرم افزار cube کانفیگش کنیم
آیا میشه به stm32cube کتابخونه stm8 رو اد کرد؟
تا اونجایی که اطلاع دارم stm32cube برای میکروی های 32 بیتی این شرکت هست و برای میکروهای 8 بیتی ابزار دیگری به اسم STM8CubeMX وجود دارد که میتوانید از آن استفاده کنید.
سلام
خسته نباشید
اگه ممکنه بیشتر در مورد آرگومان توابع 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 که محل پیاده سازی این تابع است منتقل میشوید. در مورد هر کدوم از آرگومانها هم میتوانید همین فریاند را تکرار کنید
بسیار آموزش خوبیو شروع کردید.به خصوص اینکه آموزش stm32 فارسی کم هست،البته امیدوارم این آموزش ادامه دار باشه.
حتما تو ادامه آموزشهاتون،آموزش آماده سازی کمپایلر اکلیپس رو برای این میکروکنترلر و مچ شدنش با stm32cubemx رو تو برنامتون بزارید.
ممنون
چرا eclipse ؟ به نظرم keil که آموزش با آن شروع شده است ابزار خیلی خوبیه، هم سبک هستش و هم کار با اون راحته.
عالی عالی عالی
ممنون از لطف تون، ترجیح میدید قسمت دوم آموزش در مورد چی باشه ؟
سلام
مثل همیشه جذاب و عالی بود
فقط میتونم بگم دستتون درد نکنه _ مرسی
منتظر ادامه این مطلب هستیم …
در اولین فرصت، ادامه ی مطلب هم منتشر خواهد شد
سلام از مطالب مفیدتون متشکرم خواهش می کنم این مبحث رو ادامه بدین و اینکه لطف می کنین در مورد قسمت clock configuration بیشتر توضیح بدین . ممنون
سلام، ممنون از لطف شما
در نظر دارم، آموزش بعدی دیباگ و عیبیابی کدهای آرم باشد که خیلی خیلی فرایند توسعه را آسان خواهد کرد. میکروهای STM32 دارای یک ابزار اختصاصی هستند که با کمک آن میتوان مقادیر متغیرها را به صورت زنده مشاهده کرد.
در مورد clock هم لازم است بدانید که این میکرئ دارای دو کلاک مجزا، یکی برای اندازه گیری زمان واقعی و دیگری برای کلاک داخلی میکرو است. کلاک داخلی میکرو این امکان را دارد که از چندین سورس متفاوت استفاده کند. برای راحتی، در آموزشی که داده شد، از کلاک داخلی استفاده شد و نیاز به قطعه ای جداگانه ای وجود ندارد.
سلام
بسیار روان و ساده بود
لطفا اموزش دیباک را هم قرار بدهید
با تشکر