ARM, STM32, توصیه شده, مقاله های سیسوگ, نرم افزار های الکترونیک

میکروکنترلر ARM را چطور پروگرام کنیم ؟

آموزش پروگرام کردن STM32

میکروکنترلر ARM یکی از محبوب ترین میکروکنترلر های موجود بازار ایران و حتی جهان است ، میکروکنترلر و پردازنده ای که گجت‌های الکترونیکی را متحول کرده است ؛ شرکت های زیادی دست به تولید میکروکنترلر خود با استفاده از معماری ARM زده اند ، شرکت های بزرگی چون TI یا NXP یا ST و…. ؛ اما چیزی که روشن است فراگیری میکروکنترلر های شرکت ST در ایران است که با نام STM32 شناخته می‌شود! قبلا در سیسوگ به آموزش نحوه برنامه نویسی میکروکنترلرهای STM32 پرداختیم. در این آموزش بررسی خواهیم کرد که از چه روش هایی میتوان میکروکنترلر ARM را برنامه ریزی (پروگرام) کرد. برای آموزش از میکروکنترلر STM32F103RET6 استفاده خواهیم کرد.

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

 

همانطور که می‌دانید ، چند راه برای پروگرام کردن میکروکنترلر ARM وجود دارد. راهی که بین همه خانواده های ARM مشترک است، استفاده از رابط Jtag یا SWD است ، رابط Jtag مقداری قدیمی است و در خانواده های ARM7 ، ARM9 معمولا مورد استفاده قرار می گیرد. Jtag یک رابط استاندارد است که جهت پروگرام و خطایابی چیپ های مختلفی مورد استفاده قرار می گیرد ؛ یکی از معایب موجود در رابط Jtag تعداد پایه مورد استفاده (6 پایه) است.

کانکتور های استاندارد رابط Jtag برای میکروکنترلر ARM

 

با توجه به رشد تکنولوژی و کوچک تر شدن چیپ ها و برد های الکترونیکی اختصاص این تعداد پایه برای برنامه ریزی میکروکنترلر مقداری نا معقول می‌شود ، پس در خانواده های جدید یعنی سری Cortex علاوه بر رابط Jtag به صورت موازی رابط دیگری به نام SWD تعبیه شد که قادر به پروگرام و دیباگ چیپ است. رابط SWD ، که در واقع مخفف عبارت serial wire debug است ، تنها نیاز به 2 پایه برای برنامه ریزی و پروگرام چیپ دارد.

 

شماتیک رابط SWD برای پروگرام و دیباگ میکروکنترلر ARM

 

البته همچنان رابط Jtag بر روی چیپ های جدید ، در دسترس است (مگر چیپ هایی که تعداد پایه لازم را نداشته باشند) ، یکی از مزایای Jtag ، اتصال چند چیپ به یک رابط است ، بدین شکل که اگر بر روی یک برد دو یا چند پردازنده قرار داشته باشد ، برای برنامه ریزی و دیباگ هر یک از آنها نیاز نیست یک رابط جداگانه در نظر گرفته شود و امکان اتصال سریال چند پردازنده به یک رابط Jtag فراهم است ، این امکان در ربط SWD در دسترس نیست.

دیاگرام Jtag برای برنامه ریزی چند میکروکنترلر بر روی یک برد

به غیر از رابط های استاندارد توضیح داده شده ، شرکت های مختلف ، روش های ثانویه ای را در دسترس قرار داده اند ، به عنوان نمونه اغلب چیپ های تولید NXP و STM امکان برنامه ریزی شدن از طریق پورت سریال را دارا می باشد. یا میکروکنترلر های SAM محصول شرکت Atmel امکان برنامه ریزی از طریق USB را دارا می باشند.

در واقع شرکت های تولید کننده یک برنامه بوت لودر منحصر به خود را درون حافظه ای (غیر قابل پاک شدن) در چیپ بارگذاری کرده اند که با دستور العملی (توضیح داده شده در منوال چیپ) خاص توسط پردازنده فراخوانی و اجرا می شود ، بوت لودر موصوف این امکان را می دهد که بدون داشتن یک پروگرامر گران قیمت و با استفاده از یک رابط سریال ( Uart ) یا USB میکروکنترلر را برنامه ریزی کنید.

این حافظه غیر قابل پاک شدن است پس نگران پاک شدن آن در هنگام برنامه ریزی چیپ نباشید.

 

حافظه بوت لودر تعبیه شده درون میکروکنترلر ARM

 

پروگرام کردن میکروکنترلر ARM از طریق رابط SWD

برای پروگرام کردن از طریق رابط SWD نیاز است که ابتدا پروگرامر مورد نظر این رابط را در اختیار داشته باشید. با استفاده از این رابط قادر خواهید بود علاوه بر پروگرام کردن برد ، برنامه نوشته شده را دیباگ نمایید.

در سایت سیسوگ قبلا آموزش نحوه ساخت پروگرامر SWD را قرار داده ایم.

تعداد پروگرامر هایی که رابط SWD را پشتیبانی می‌کنند زیاد هستند و به راحتی می‌توان از همه آنها استفاده کرد ، ولی آنچه عمومیت بیشتری بین کاربران ایرانی دارد ، پروگرامر J-Link محصول شرکت Segger است. پروگرامر J-Link در واقع یک پروگرامر حرفه ای می باشد که قادر به پشتیبانی طیف گسترده ای از پردازنده ها است و از رابط های Jtag و SWD به خوبی پشتیبانی می کند. این آموزش با استفاده از J-Link V8 و نرم افزار J-Flash V6.14 تهیه شده است و ممکن است در ورژن های دیگر سخت افزار و نرم افزار ، جزییات مقداری متفاوت باشند.

 

بخش اول اتصالات میکروکنترلر ARM

پروگرامر J-Link از یک استاندارد 20 سیمه برای میکروکنترلر ARM استفاده می کند در صورتی که ما برای رابط SWD یک کانکتور 5 سیمه داریم ، خوب همانطور که قبلا توضیح دادیم SWD یک رابط سریال است که نیازی به تعداد سیم زیاد ندارد و تنها با دو رشته سیم می تواند به درستی کار کند. برای شروع بهتر است پایه های مورد استفاده را بررسی کنیم

استاندارد SWD مورد استفاده سیسوگ برای برنامه ریزی میکروکنترلر STM32

زمین اولین پایه مورد استفاده است که وجودش حتمی است ، پایه بعدی در واقع تغذیه میکروکنترلر است ، پروگرامر Segger برای پروگرام کردن نیاز دارد که ولتاژ کاری پردازنده را تشخیص دهد تا منطق درست را برای سطح سیگنال در نظر بگیرد (بین 1.8 تا 3.3  ولت) ؛ بعد از آن پایه Reset ، وجود این پایه الزامی نیست ، و می توان آن را متصل نکرد ولی اگر به دلیلی رابط SWD را غیر فعال کرده باشیم (مثلا ریمپ کردن پایه ها) ، تنها با استفاده از این پایه می توان مجددا رابط SWD را فعال کرد. دو پایه دیگر هم پایه های مربوط به خود رابط SWD است و باید به صورت یک یه یک متصل شوند.

اما کانکتور موجود روی پروگرامر J-Link یک کانکتور 20 پایه است ، اما چطور باید این دو کانکتور را به هم متصل نماییم ، خیلی ساده است ، در تصویر زیر نحوه اتصال را مشخص کرده ام:

 

پایه های مورد استفاده SWD بر روی پروگرامر جی لینک

پایه های مورد نیاز ، به رنگ نارنجی مشخص شده اند ، فقط دقت داشته باشید که پایه VCC باید به پایه 1 متصل باشد و پایه SWO ، مورد استفاده فرارنگرفته است.

 

نرم افزار J-Flash

برای استفاده از نرم افزار ، تنظیمات آن را گام به گام با توجه به عکس های زیر انجام می دهیم

ابتدا یک پروژه جدید تعریف میکنم

ایجاد پروژه جدید در J-Flash

در پنجره باز شده نوع میکروکنترلر ARM را انتخاب میکنیم

انتخاب نوع میکروکنترلر در جی لینک

در لیست باز شده ، ابتدا شرکت ST را انتخاب میکنیم

انتخاب شرکت سازنده

بعد در لیست زیرین به دنبال گزینه STM32F103RE بگردید و آن را انتخاب کنید

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

در پنجره پروژه ، نوع پروتکل را بر روی SWD قرار دهید و دکمه OK رو بزنید

انتخاب اینترفیس SWD

در پنجره نرم افزار J-Flash منویی سمت چپ وجود دارد که توضیحات و تنظیمات مربوط به پروژه جاری را نمایش می دهد ، دقت داشته باشید که تنظیمات مربوطه مشابه تصویر زیر باشد

میکروکنترلر ARM را چطور پروگرام کنیم ؟

بعد از منوی فایل ، زیر منوی Open data File ، فایل Hex  موجود در فایل های پروژه را انتخاب کنید.

باز کردن فایل در نرم افزار J-Flash

برای پروگرام کردن برنامه کافیه که کلید F6 روی کیبرد را فشار دهید یا از منوی Target زیر منوی Manual Programming را انتخاب و سپس گزینه Program & Verify را انتخاب کنید.

پروگرارم کردن توسط J-Flash

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

19 دیدگاه در “میکروکنترلر ARM را چطور پروگرام کنیم ؟

  1. Avatar for مصطفی مصطفی گفت:

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

    1. Avatar for Mahdi.h   Mahdi.h   گفت:

      سلام. میکروکنترلر های arm فیوزبیت ندارند. فیوزبیت برای میکروکنترلر های avr هست.

  2. Avatar for محمد حسن شبانکاره محمد حسن شبانکاره گفت:

    سلام و درود فراوان
    عالی بود

  3. Avatar for aharab56 aharab56 گفت:

    سلام و وقت بخیر
    در مورد پروگرام کردن میکرو توسط بوت لودر از طریق حافظه فلش خارجی و نوشتن بوت لودر اختصاصی میتونین بنده رو راهمنایی کنین؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

    2. Avatar for N. H N. H گفت:

      سلام وقتتون بخیر
      برای پروگرام کردن ARM سری Atmel چه روش هایی وجود داره؟

      1. Avatar for Zeus ‌ Zeus ‌ گفت:

        میتونید از رابط های jtag یا swd استفاده کنید
        حتی میتوانید از stlink هم با کمک openocd استفاده کنید

  4. Avatar for صمدی صمدی گفت:

    سلام برایARM
    Cortex-M4چه نرم افزاربرنامه نویسی پیشنهاد میکنید؟

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

      من به شخصه از gcc استفاده میکنم ولی میتونید از keil یا iar هم استفاده کنید
      نرم افزار خوب زیاد هست.

  5. Avatar for مجتبی جعفری مجتبی جعفری گفت:

    سلام با jfalsh پروگرام کردم میگه کانکت نیست میکرو connecting to cpu via connect under reset failed . میگه البته انو با توابع هال نوشتم .
    یک سمپل دانلود کردم اونو با spl نوشته بودن پروگرام شد ولی این با کیل هم پروگرام نمیشه

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

      پروگرام شدن یا نشدن میکرو اصلا کاری به این نداره که شما برنامه با چی نوشتی
      باید دنبال مشکل جای دیگه بگردید.

  6. Avatar for محمد رضا محمد رضا گفت:

    سلام
    من یه ای سی lm3s817 دارم که لاک است
    برای خواندن نرم افزار ان چه پیشنهادی دارید
    مرسی

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

      خوب اگه لاک هست که نمیشه خودندش :/
      اصلا برای این که نشه خوند آیسی رو لاک میکنن دیگه

  7. Avatar for پالت تراک پالت تراک گفت:

    ایا با تبدیل کردن پروگرمر jlink به swd میتوان به جای استفاده از jflash از طریق خود keil عمل پروگرمر کردن را انجام دهیم؟

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

      حتی بدون تغییر به swd هم میتونید به شکل مستقیم در نرم افزار keil هم پروگرام هم آپدیت کنید.

  8. Avatar for علی علی گفت:

    سلام
    در پروگرام کردن با st link هم پین 3.3ولت به جهت تشخیص ولتاژ کاری میکرو به کار میره؟
    بعضی جاها با وصل کردن این پین به تغذیه ۳۰۳ ولت مدار بدون اینکه لازم باشه تغذیه خارجی را وصل کنم، میکرو پروگرام میشه و بعضی جاها که فکر میکنم سایر اجزا مدار جریان بیشتری میکشید، حتما لازم بود تغذیه خارجی را هم وصل کنم تا st linkمیکرو را بشناسد. با این توضیحات من همیشه فکر میکردم این پین تغذیه است که در صورت داشتن تغذیه خارجی بهتر است حتی وصل نشود تا ولتاژش با ولتاژی که توسط تغذیه خارجی ایجاد میشود تداخل نکنند.

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

      درسته ولی در نظر داشته باشید که در برخی مدل های کلون پایه ای وجود داره که 3.3 خروجی میده یعنی برق رو تامین میکنه و باید تفاوت قائل بشید بین پایه ورودی و خروجی ولتاژ

  9. Avatar for Amir Amir گفت:

    سلام
    یه پیشنهاد هم من دارم :
    من خودم در یک پروژه برای اینکه فضا زیاد اشغال نشه به جای استفاده از Jtag از طریق پورت سریال و بوت لودر پروگرام کردم
    یه نرم افزار هم سایت ST برای همین کار قرار داده به نام Flash Loader Demonstrator
    امیدوارم کمکی کنه …

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

      سلام
      بسیار عالی ؛ البته من هم توی پروژه های زیادی از این روش استفاده کردم
      البته SWD به اندازه Uart پایه لازم داره و قابلیت دیباگ هم به شما میده 🙂

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

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