آموزش ایجاد پروژه در IAR جهت برنامه نویسی تراشه های STM32

ایجاد پروژه در IAR

سلام

اگر شما هم مثل بنده تازه بخواین با STM32 شروع به کار بکنید و کامپایلر مورد انتخابتون IAR باشه مطمئنم مشکلات زیادی رو پیش رو خواهید داشت.

هدف از این نوشته آشنایی با ایجاد پروژه در IAR و نوشتن برنامه برای تراشه های STM32 بر مبنای کتابخانه های استاندارد (SPL)ارائه شده توسط خود شرکت ST هستش.

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

گام اول در ایجاد پروژه مورد نظر این هست که باید فایل های اصلی رو در یک پروژه بشناسیم و ابتدا اون رو جمع آوری کنیم. بعد از این کار با فرض در نظر گرفتن یک پروژه که من می خوام برای شروع یک پین رو که LED به اون وصل هست و تراشه انتخاب شده STM32F407ZGT می باشد رو به صورت چشمک زن پیاده سازی کنم. دقت کنید که من برای راحتی کار از برد کاتالیست F400 استفاده می کنم.

فایل های اصلی و مورد نیاز در پروژه:

در هر پروژه ای مبنی بر تراشه های STM32 چند فایل ضرورری هستن و باید حتما در لیست فایل های موجود باشن که شامل موارد زیر میشن.

۱- فایل Startup: این فایل یکی از مهمترین فایل های موجود می باشد که بودن آن در پروژه ضروری بوده و شامل دستورات اسمبلی مربوط به راه اندازی اولیه تراشه می باشد .نکته مهمتر اینکه برای هر کامپایلر به صورت اختصاصی وجود داره و باید به این مورد دقت کنید. به طور خلاصه این فایل وظیفه اختصاص حافظه و مقداری دهی اولیه RAM و اشاره گر استک، ادرس دهی بردهای وقفه و فراخوانی تابع SystemInit را بر عهده دارد

۲- فایل System: این فایل مربوط به تنظیمات اولیه و کانفیگ بخش کلاک می باشد. تابع اصلی این فایل همان SystemInit میباشد که توسط فایل startup فراخوانی میشود و توسط ان بخش کلاک میکرو فعال شده وضرایب PLL برای باس های مختلف میکروکنترلر تنظیم میگردند. این فایل برای هر تراشه به صورت مجزا وجود دارد و نسبت به سری های مختلف مقداری تفاوت دارد

۳- فایل stm32fxxx_it: که شامل بردارهای وقفه و همچنین توابع مربوط به وقفه ها در این قسمت تعریف شده.

۴- فایل stm32f4xx_conf: که در این فایل هدرهای مورد نیاز فراخوانی خواهند شد و توصیه میشه تنها هدرهایی که نیاز دارین رو از حالت کامنت خارج کنید. این کار باعث افزایش سرعت در کامپایل کردن پروژه میشه. با توجه به وجود سیستم اپتیمایز کامپایلر در صورت اضافه کردن همه هدرها به صورت اتوماتیک فقط هدرهایی که از توابع ان ها استفاده شده است در حجم کد نهایی نقش خواهند داشت.

در نتیجه شما فایل های بالا رو باید در ابتدای ایجاد پروژه داشته باشید. ناگفته نمونه که اخر سر یه پروژه آماده رو با همه متعلقات برای استفاده دوستان قرار میدم پس نگران پیدا کردنشون نباشید. تنها چیزی که هست اینکه من بر مبنای تراشه STM32F407ZGT کار می کنم که زیاد موردی ایجاد نمی کنه.

حالا اینا رو از کجا گیر بیاریم؟

خب تولیدکننده یعنی همون ST زحمت کشیده و یه سری کتابخونه و فایل ها رو که شامل همین فایل های بالا هم میشه به صورت استاندارد برای هر سری از میکروهاش در سایت گذاشته که با دانلود اون می تونید نه تنها این فایل ها رو داشته باشید بلکه تمام فایل های اساسی برای کامپایلرهای دیگه مثل کیل و … هم داشته باشید. همچنین یه عالمه نمونه کد هم جهت شادی روحمون قرار داده!

مثلا برای سری F4 فایل ها رو می تونید از این لینک و در اخرین قسمت دانلود کنید. بازم میگم فایل های مورد نیاز برای کار با IAR رو در اخر قرار میدم چون حجم نسخه اخر این کتابخونه ها الان نزدیکه ۷۰ مگابایت هستش!

 

خب بریم سر وقت شروع کار با کامپایلر و شروع اولین پروژه

بهتره قبل از شروع همه فایل ها رو داشته باشید و همراه با اون چیزی که اینجا می بینید مراحل رو انجام بدین. در نتیجه فایل های مربوط به اولین پروژه با عنوان LED چشمک زن رو می تونید از اینجا دانلود کنید.

۱- برای شروع یه پوشه با نام دلخواه ایجاد می کنیم و داخل همین پوشه دو فولدر دیگه با نام های EWARM و STM32F4 ایجاد کنید. اسم ها می تونه هر چیزی باشه ولی من اینها رو انتخاب کردم و در پوش اولی فایل های مربوط به کامپایلر رو ذخیرهمی کنم و در دومی کتابخونه ها و فایل های مربوط به تراشه قرار می گیره.

۲- نرم افزار IAR را باز کرده و از قسمت Project گزینه Create New Project را بزنید و سپس در پنجره ظاهر شده main رو از زیرمجموعه C انتخاب و OK می کنید.

ایجاد پروژه

 

۳- بعد از مراحل بالا مسیری رو برای ذخیره پروژه از شما سوال می کنه که گفتیم در پوشه EWARM و با توجه به اسم پروژه اون رو ذخیره می کنیم که بعد از انجام این کار باید تصویری به صورت زیر رو نمایش بده.

 

۴- الان می تونیم فایل ها رو به کامپایلر اضافه کنیم و شروع کنیم به کد نویسی اما این رو در نظر داشته باشید که یه برنامه نویس خوب سعی می کنه به صورتی کار کنه که اگر بعدها به کدهای خودش رجوع کرد (حداقل خودش!) بدونه چی به چیه. پس نظم دادن به ساختار پروژه و کدنویسی یکی از اصول کارهای برنامه نویس هاست.

برای این کار سه تا گروه رو به پروژه اضافه می کنیم که یکی شامل فایل های اصلی و main میشه و اون یکی برای اضافه کردن کتابخانه های مورد نیاز پروژه و اخری فایل Startup رو شامل خواهد شد.

برای این کار بر روی اسم پروژه از قسمت workspace کلیک راست کرده و از قسمت Add گزینه Add Group رو انتخاب می کنیم و سه گروه با نام های User و ST_Library و EWARM اضافه می کنیم.

۵- حالا باید فایل های مورد نیاز رو به پروژه اضافه کنیم. ابتدا فایل startup رو به پروژه اضافه می کنیم. برای این کار بر روی گروه EWARM کلیک راست کرده و Add File رو انتخاب می کنیم که صفحه ای باز می شود و باید به محل ذخیره پروژه و رفته و فایل startup که قبلا در مورد توضیح داده شد رو انتخاب کنیم. همچنین باید فایل های system و stm32fxxx_it را نیز به پروژه اضافه کرده و در گروه مربوطه قرار دهیم. دقت کنید فایل های با پسوند .c رو باید انتخاب کنید و فایل های h. را در مراحل بعد اضافه خواهیم کرد.

نتیجه این بخش به صورت زیر خواهد بود.

۶- بریم سراغ تنظیمات مربوط به پروژه و اضافه کردن فایل های هدر استفاده شده.

برای رفتن به قسمت تنظیمات پروژه ابتدا بر روی اسم پروژه از قسمت workspace کلیک راست کرده و option را انتخاب کنید.

وقتی وارد تنظیمات پروژه شدید باید موارد زیر رو همونطور که در تصاویر می بینید تنظیم کنید.

اولین قسمت مربوط به انتخاب تراشه مورد استفاده است که نحوه انتخاب ان را در تصویر مشاهده می کنید.

در مرحله بعد باید مسیر هدرفایل ها رو مشخص کنید. دقت کنید باید در پوشه پروژه تون هرکجا که هدرها(فایل های با پسوند h.) وجود دارند رو به کامپایلر بشناسونید. یه نکته رو که قبلا بهش اشاره نکردم هدرفایل های مربوط به هسته های پردازشی هستش که در یک پوشه به اسم include در پوشه پروژه قرار دادم.

*نکته: باید حتما مسیر پروژه های خودتون رو وارد کنید و نه اینکه عین تصویر اونها رو کپی کنید چون شاید شما مثلا به جای درایو C پروژه رو در درایو D و یا سایر جاها قرار داده باشین و شاید اصلا در همون درایو C در سایر مسیرها باشه و باید به این نکته دقت کنید. وقتی دستتون به این موارد عادت کرد ترفندهایی گفته میشه که دیگه نیاز نیست با تغییر مسیر پروژه در این تنظیمات تغییری ایجاد کرد و خود کامپایلر قادر به شناسایی فایل ها در مسیر پروژه خواهد بود.

 

مورد دیگه ای که مونده تنظیم خروجی هست که بخوایم چطور به ما خروجی بده. ما نیاز داریم به خروجی hex و برای این کار به صورت زیر عمل می کنیم و در نهایت OK را می زنیم.

 

مورد اخر اینکه چطور فایل هگز رو انتقال بدین به حافظه میکروکنترلر در یک پست جدا توضیح داده خواهد شد چون نمی خوام مطالب قاطی بشه و اضافه شدن این مورد که خیلی هم راحته باعث خستگی خواننده و عدم توجه به موارد مهم باشه.

تا اینجا تنظیمات هم انجام شده و باید بریم سراغ کدنویسی. هنوز یه مورد کوچیک مونده که می خوام بعد از اینکه خطا رو دیدیم نحوه حل کردنش رو بگم.

در فایل main کدهای زیر رو بنویسید و از منوی project گزینه make رو بزنید و یا کلید میانبر اون یعنی F7 رو بزنید

#include "stm32f4xx.h"


int main(void)
{
    
    while (1);
}

 

 

الان باید بهتون یک سری warning بده که برای حل اون کافیه به تنظیمات پروژه برین و در قسمت مشخص شده دو خط رو در کادر مربوطه اضافه کنید و بعد از OK کردن تنظیمات مجددا پروژه رو کامپایل کنید که در صورت اجرای صحیح مراحل بالا بدون مشکل پروژه کامپایل میشه و کد هگز مربوطه تولید خواهد شد.

 

 

تا اینجا شما یاد گرفتید فایل های ضروری برای ایجاد یک پروژه در IAR چیا هستن و همچنین چطور اون ها رو به پروژه خودتون اضافه کنید.

کدهای پروژه مد نظر ما که یک LED چشمک زن متصل به PC0 می باشد به صورت زیر است که با وارد کردن اون در کامپایلر و گرفتن هگز خروجی می تونید اون رو بر روی تراشه منتقل کنید.

 

#include "stm32f4xx.h"
#include "delay.h"


int main(void)
{
  
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

    /* Configure PC0 in output pushpull mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    while (1)
    {
        /* Set PC0 */
        GPIOC->BSRRL = GPIO_Pin_0;
        delay_ms(500);
        
        /* Reset PC0 */
        GPIOC->BSRRH = GPIO_Pin_0;
        delay_ms(500);	
    }
}

ویدیو عملکرد پروژه

 

فایل های مربوط به پروژه

موفق باشید

 

یک نظر

  1. حسین حضرتیان

    سلام.
    واقعا بسیار بسیار عالی توضیح میدی بهتون تبریک میگم

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

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