معرفی DFU و پروگرام کردن میکروکنترلر STM32 از طریق بوت لودر

معرفی DFU و استفاده از بوت لودر جهت پروگرام کردن میکرو های STM32
نوشته شده توسط

همواره بعد از نوشتن کد در محیط‌های برنامه نویسیِ میکروکنترلر ها در کامپیوتر، نیاز به یک مدارِ واسط جهت انتقال و پروگرام کردن برنامه نوشته شده به میکرو یا برد مربوطه احساس می‌شود. در میکروکنترلر های AVR این کار با استفاده از پروگرامرهایی همچون STK500، AVRISP/MKII، AVR910 و برخی پروگرامرهای یونیورسال و در میکروکنترلر های ARM از طریق J-Link انجام می‌شود. در میکروکنترلر های STM8 و STM32 نیز این عمل از طریق پروگرامر های خود شرکت ST، یا همان ST-LINK به راحتی قابل انجام بوده که علاوه بر انتقال برنامه به میکرو و پروگرام کردن آن، می‌توان از آن به عنوان یک دیباگر برای خطایابی کد نیز استفاده نمود.

در این مطلب قصد داریم به نحوه پروگرام کردن میکروکنترلرهای این شرکت بدون استفاده از پروگرامر و با استفاده از Bootloader در این میکرو ها بپردازیم. همچنین در این مطلب به دو روش پروگرام کردن از طریق UART و USB با استفاده از نرم افزار STM32CubeProgrammer خواهیم پرداخت. برای مطالعه سایر مطالب به صفحه اول وبلاگ مراجعه نمایید.

پروگرامر st-link
پروگرامر st-link

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

طبیعتاً بازگرداندن محصول و انجام عملیات به روزرسانی برای تک تک برد های تولید شده، توسط شرکت یا کارخانه تولید کننده، امری طولانی و هزینه بر خواهد بود. به همین دلیل در این جا استفاده از بوت لودر می تواند چاره ای برای حل این مشکل باشد.


بوت لودر چیست؟

اگر با برد های آردوینو آشنایی داشته باشید، می‌دانید که می توان این برد‌ها را مستقیما و توسط USB پروگرام نمود. در این برد ها که معمولا بر پایه میکروکنترلر های AVR طراحی شده‌اند، Bootloader به گونه ای برنامه ریزی شده است که می تواند به حافظه FLASH میکرو دسترسی پیدا کرده و کار مربوط به برنامه ریزی حافظه فلش را بدون نیاز به پروگرامر خارجی انجام دهد. در اکثر میکروکنترلر ها از جمله شرکت ST این قابلیت وجود دارد که بتوان به صورت سخت افزاری میکرو را به این حالت برده و اقدام به پروگرام کردن آن کرد.


بوت لودر در STM32

در میکروکنترلرهای STM32 معمولا پایه‌ ای به نام BOOT0 وجود دارد. با HIGH کردن آن از خارج و ریست کردن میکروکنترلر، پردازنده به حالت DFU یا Device Firmware Update رفته و برای دریافت به‌روزرسانی، آماده می‌شود.

حال برای انتقال برنامه بدون استفاده از پروگرامر دو روش وجود دارد:

  • استفاده از مبدل USB به سریال و اتصال آن به پایه های UART میکروکنترلر.
  • استفاده از درگاه USB متصل به خود میکروکنترلر، در صورتی که میکرو قابلیت DFU از طریق USB را داشته باشد.

معرفی برنامه STM32 Cube Programmer

نرم افزار STM32CubeProgrammer
نرم افزار STM32CubeProgrammer

نرم افزار STM32CubeProgrammer ابزاری همه منظوره هست که توسط شرکت ST برای تجمیعِ تمام نرم افزار‌ هایی که تاکنون، برای پروگرامر کردن محصولات شرکت ST به کار می‌رفته است، ایجاد گردیده. همچنین این نرم افزار بر روی چندین سیستم عامل قابل استفاده است که برای پروگرام کردن میکروهای STM32 مورد استفاده قرار می‌گیرد.

نرم افزار CubeProgrammer، محیطی آسان برای خواندن، نوشتن و وریفای کردن دیوایس‌ ها از طریق اینترفیس های دیباگ (JTAG و SWD) و اینترفیس‌های بوت لودر (UART، USB DFU، I2C، SPI و CAN) ایجاد کرده است.

STM32CubeProgrammer رنج وسیعی از قابلیت‌ها، جهت پروگرام کردن حافظه داخلی میکروکنترلرهای STM32 (مانند FLASH ،RAM و OTP) و همچنین حافظه‌های خارجی را ارائه می‌دهد. به عنوان مثال از طریق نرم افزار Keil امکان پروگرام کردن حافظه خارجی متصل شده به میکرو مانند QSPI فلش‌ ها دشوار بوده و برای برخی از میکروکنترلر ها امکان پذیر نمی‌باشد. اما با استفاده از نرم افزار STM32CubeProgrammer این امر به آسانی انجام می‌گیرد.

به عنوان مثال در هنگام استفاده از رابط کاربری TouchGFX در برد STM32F746 Discovery، نیاز به بارگذاری GUI طراحی شده در حافظه اکسترنال می‌باشد، به همین منظور بر روی این برد یک حافظه از نوع QSPI FLASH وجود دارد که اگر برنامه با کامپایلر Keil توسعه داده شده باشد، امکان پروگرام مستقیم این حافظه خارجی توسط Keil وجود ندارد. در این حالت باید از یک برنامه جانبی مانند STM32CubeProgrammer جهت پروگرام این برد و حافظه اکسترنال آن استفاده نمود.

برد Discovery F746
برد Discovery F746

تصویری از محیط STM32CubeProgrammer را مشاهده می‌کنید:

محیط برنامه STM32 CubeProgrammer
محیط برنامه STM32 CubeProgrammer

قابلیت های نرم افزار STM32 CubeProgrammer

قابلیت‌ های نرم افزار STM32CubeProgrammer در وب سایت شرکت ST ذکر شده است که در تصویر زیر قابل مشاهده است:

قابلیت ها در CubeProgrammer

جهت دانلود برنامه STM32CubeProgrammer می‌توانید از طریق این لینک اقدام به دریافت برنامه با توجه به سیستم عامل رایانه خود کنید.


پروگرام از طریق UART و نرم افزار STM32 CubeProgrammer

برای پروگرام کردن از طریق UART، لازم است که پایه BOOT0 میکرو HIGH شده و پس از ریست شدن، میکرو به حالت Bootloader خواهد رفت. با اتصال یک مبدل USB به سریال به پایه­‌ های UART میکروکنترلر، عملیات پروگرام کردن آن قابل انجام است.

در برخی از میکرو های STM32، یکی از UART ها مانند UART1 و در برخی دیگر مانند سری F4، تمام پورت های UART بعد از وارد شدن میکرو به حالت DFU، امکان اتصال مبدل USB به سریال، جهت پروگرام کردن میکرو از طریق بوت لودر را دارند. همچنین می‌توان جهت آگاهی از این که کدام UART میکرو برای پروگرام کردن آن در حالت DFU باید مورد استفاده قرار گیرد، به دیتاشیت آن قطعه جهت آگاهی بیشتر مراجعه کرد.


پروگرام STM32F103C8T6

برای انجام تست، از مبدل ارزان قیمت CH340 و یک برد BluePill با میکروکنترلر STM32F103C8T6 استفاده شده است.

مبدل USB به سریال و برد BluePill
مبدل USB به سریال و برد BluePill

پایه های Rx و Tx مبدل را به ترتیب به PA9 و PA10 که پایه‌ های مربوط به UART1 می‌باشند متصل کرده و پایه GND مبدل را نیز به یکی از پایه‌های برد BluePill متصل می‌کنیم. در صورتی که از تغذیه جداگانه برای روشن کردن برد استفاده نشود، می‌توانید پایه مثبت تغذیه مبدل را نیز به برد BluePill متصل کنید. حال مبدل را از طریق درگاه USB به رایانه خود وصل کنید.

پایه های UART1 در STM32F103C8T6
پایه های UART1 در STM32F103C8T6

اتصال مبدل به بورد STM32

اتصال مبدل به برد
اتصال مبدل به برد

پایه BOOT0 را با جا به جا کردن جامپر، بر روی HIGH قرار داده و برد را با قطع تغذیه و یا با کلید RESET تعبیه شده روی برد، ریست کنید.

تغییر وضیعت جامپر BOOT0
تغییر وضیعت جامپر BOOT0

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

نرم افزار STM32 CubeProgrammer
نرم افزار STM32 CubeProgrammer

حال از بخش PORT، پورت سریال مربوط به مبدل USB به سریال را انتخاب کرده و بر روی کلید سبز رنگ Connect کلیک کنید.

نرم افزار STM32 CubeProgrammer
نرم افزار STM32 CubeProgrammer

در صورتی که بعد از کلیک بر روی Connect، آدرس‌ های حافظه میکرو و داده‌ های داخل آن به صورت کد هگز به نمایش در بیاید، نشان دهنده موفقیت آمیز بودنِ اتصال نرم افزار Cube Programmer به میکرو خواهد بود. همچنین پیام موفقیت آمیز بودن اتصال به میکرو با رنگ سبز در بخش Log برنامه نیز نشان داده خواهد شد.

نرم افزار STM32CubeProgrammer
نرم افزار STM32 CubeProgrammer

مانند تصویر زیر، با کلیک بر روی آیکون دانلود برنامه (1) به بخش Erasing & Programming رفته و از (2) مسیر فایل Hex برنامه نوشته شده توسط خود را به برنامه معرفی کنید. همچنین، نرم افزار Cube Programmer از فرمت های دیگر مانند bin، elf، out و … نیز جهت پروگرام برنامه بر روی میکروکنترلر پشتیبانی می‌کند.

نرم افزار STM32CubeProgrammer
نرم افزار STM32CubeProgrammer

در نهایت با کلیک بر روی کلید Start Programming میکروی شما پروگرام خواهد شد. همچنین در قسمت (4) می توانید تنظیمات دیگری مانند Full chip erase و Verify کردن برنامه آپلود شده را نیز تنظیم کنید. بعد از آپلود برنامه، پیغام موفقیت آمیز بودن عملیات برنامه ریزی میکرو نمایش داده خواهد شد.

عملیات پروگرام در STM32CubeProgrammer
عملیات پروگرام در STM32CubeProgrammer

فراموش نشود که بعد از اتمام عملیات پروگرام، مجدد جامپر BOOT0 به وضعیت قبلی خود برگشته و LOW گردد. سپس با ری استارت کردن میکرو، برنامه اجرا خواهد شد.


پروگرام از طریق USB

در صورتی که میکروی شما از DFU از طریق USB پشتیبانی کند، مانند آن چه در میکروکنترلر های سری F4 وجود دارد، کافیست که پایه BOOT0 را با جامپر، HIGH کرده و مانند حالت قبلی برد خود را ری استارت کنید.

اتصال پایه BOOT0 و VDD در برد DiscoveryF407
اتصال پایه BOOT0 و VDD در برد DiscoveryF407

مجدد به منوی انتخاب روش پروگرام کردن رفته و USB را انتخاب کنید. بقیه موارد عیناً مشابه حالت UART خواهد بود.

تنظیم حالت USB در STM32CubeProgrammer
تنظیم حالت USB در STM32CubeProgrammer

نتیجه گیری

در این مطلب روش های پروگرام کردن میکرو‌های STM32 بدون استفاده از پروگرامر‌ های مرسوم مانند ST-LINK بررسی گردید. با بوت لودر در این میکرو‌کنترلر ها جهت برنامه ریزی با روش DFU آشنا شدید و نحوه استفاده از نرم افزار STM32CubeProgrammer توضیح داده شد.

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

۷ دیدگاه برای “معرفی DFU و پروگرام کردن میکروکنترلر STM32 از طریق بوت لودر

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

    1. با سلام و ممنون از این که دیدگاه خود را درباره این مطلب ارسال کردید. در میکروکنترلر‌های ARM برعکس میکروکنترلر‌های موجود بر روی بردهای آردوینو که عمدتا AVR می‌باشند نیازی به آپلود برنامه جهت راه اندازی بوت لودر نمی باشد. بر روی اکثر بردهای آردوینو به صورت پیشفرض مدار مبدل USB به سریال وجود دارد که از طریق آن می توانید میکروکنترلر خود را با پایه های TXD و RXD پروگرام کنید که در میکروهای ARM نیز این مبدل مورد نیاز است. علاوه بر این از طریق تنظیمات CUBE در بخش Middleware و USB نیز می‌توانید قابلیت DFU را اضافه کنید که مستقیما از طریق پایه های DP و DM امکان برنامه ریزی میکرو فعال شود.

  2. سلام وقت بخیر
    من از روش uart استفاده میکنم و از یک ماژول f323r استفاده کردم ولی وقتی در برنامه ی program cube کانکت رو میزنم پیغام خطا بهم میده همه اتصالات و جامپر ها هم درست هست.
    پیغام خطا این هست : Error: Activating device: KO. Please, verify the boot mode configuration and check the serial port configuration. Reset your device then try again…

    علت چیست؟لطفا راهنمایی بفرمایید

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

نشانی ایمیل شما منتشر نخواهد شد.