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