- شنبه ۱۱ آذر ۱۴۰۲
پروگرام کردن میکروهای STM32 بدون استفاده از پروگرامرهای مرسوم
پروگرام کردن میکروهای STM32 بدون استفاده از پروگرامرهای مرسوم
همیشه بعد از نوشتن کد در محیطهای برنامهنویسیِ میکروکنترلرها در رایانه، نیاز به یک مدارِ واسط جهت انتقال و پروگرام کردن برنامه نوشتهشده به میکرو یا برد مربوطه احساس میشود. در میکروکنترلرهای AVR این کار با استفاده از پروگرامرهایی همچون STK500، AVRISP/MKII، AVR910 و برخی پروگرامرهای یونیورسال و در میکروهای ARM از طریق J-Link انجام میشود. در میکروکنترلرهای STM8 و STM32 نیز این کار از طریق پروگرامرهای خود شرکت ST، یا همان ST-LINK بهراحتی قابل انجام است که علاوه بر انتقال برنامه به میکرو و پروگرام کردن آن، میتوان از آن بهعنوان یک دیباگر برای خطایابی کد استفاده کرد.
گاهی اوقات محصولی توسط فروشنده به کاربر فروخته شده است که بعد از مدتی نیاز است برنامه داخل میکروی آن بهروزرسانی شود. در این حالت دو راهکار وجود دارد. یکی تحویل محصول به فروشنده و بهروزرسانی آن توسط شرکت یا کارخانه سازنده آن، و دیگری ارسال فایل بهروزرسانی محصول از طرف سازنده به خریدار و انجام عملیات بهروزرسانی توسط خود کاربر. طبیعتاً بازگرداندن محصول و انجام عملیات بهروزرسانی برای تکتک بردهای تولیدشده، توسط شرکت یا کارخانه تولیدکننده امری طولانی و هزینهبر خواهد بود.
بوت لودر
اگر با بردهای آردینو آشنایی داشته باشید، میدانید که میتوان این بردها را مستقیماً و توسط USB پروگرام کرد. در این بردها، Bootloader بهگونهای برنامهریزی شده است که میتواند به حافظه FLASH میکرو دسترسی پیدا کند و برنامهریزی حافظه فلش را بدون نیاز به پروگرامر خارجی انجام دهد.
بوت لودر در STM32
در میکروکنترلرهای STM32 معمولاً پایهای به نام BOOT0 وجود دارد که با HIGH کردن آن از خارج و ریست کردن میکرو، پردازنده به حالت DFU یا Device Firmware Update آپدیت خواهد رفت و برای بهروزرسانی برنامه آماده میشود. حال برای انتقال برنامه بدون استفاده از پروگرامر دو روش وجود دارد:
1- استفاده از مبدل USB به سریال و اتصال آن به پایههای UART میکروکنترلر
2- استفاده از درگاه USB متصل به خود میکرو، در صورتی که میکرو قابلیت DFU از طریق USB را داشته باشد
معرفی برنامه چندمنظوره STM32 Cube Programmer
نرمافزار STM32CubeProgrmmer ابزاری همهکاره با قابلیت اجرا بر روی چندین سیستم عامل است که برای پروگرام کردن میکروهای STM32 مورد استفاده قرار میگیرد. نرمافزار کیوب پروگرامر، محیطی آسان برای خواندن، نوشتن و وریفای کردن دیوایسها از طریق اینترفیسهای دیباگ (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 جهت پروگرام استفاده کرد.
قابلیتهای نرمافزار STM32CubeProgrammer (برگرفته از وبسایت ST) در تصویر زیر قابل مشاهده هستند.
جهت دانلود نرمافزار STM32CubeProgrammer میتوانید به وبسایت شرکت ST مراجعه کرده و از طریق این لینک این نرمافزار را دانلود کنید.
پروگرام از طریق UART و نرمافزار STM32CubeProgrammer
برای انجام این کار لازم است که پایه BOOT0 میکرو HIGH شود و پس از ریست شدن، میکرو به حالت BootLoader خواهد رفت. با اتصال یک مبدل USB به سریال به پایههای UART میکرو، عملیات پروگرام کردن آن قابل انجام است.
در برخی از میکروهای STM32، یکی از UARTها مانند UART1 و در برخی دیگر مانند سری F4، تمام UARTها بعد از وارد شدن میکرو به حالت DFU، امکان اتصال مبدل USB به سریال را جهت پروگرام کردن میکرو از طریق بوت لودر دارند. همچنین جهت آگاهی بیشتر از اینکه کدام UART میکرو باید برای پروگرام کردن آن در حالت DFU مورد استفاده قرار گیرد، میتوانید به دیتاشیت آن قطعه مراجعه کنید.
پروگرام STM32F103C8T6
برای انجام این تست، از مبدل ارزانقیمت CH340 و یک برد BluePill با میکروی STM32F103C8T6 استفاده شده است.
پایههای RX و TX مبدل را بهترتیب به PA9 و PA10 که پایههای مربوط به UART1 هستند متصل کرده و پایه GND مبدل را نیز به یکی از پایههای برد BluePill متصل کنید. در صورتی که از تغذیه جداگانه برای روشن کردن برد استفاده نمیکنید، میتوانید پایه مثبت تغذیه مبدل را نیز به برد BluePill متصل کنید. حال مبدل را از طریق درگاه USB به رایانه خود وصل کنید.
پایه BOOT0 را با جابهجا کردن جامپر بر روی HIGH قرار دهید و برد را با قطع تغذیه یا با کلید RESET تعبیهشده روی برد ریست کنید.
بعد از نصب برنامه STM32CubeProgrammer آن را اجرا کنید. با باز کردن منوی سمت راست برنامه، روشهای مختلف انجام عملیات پروگرام کردن میکرو نمایش داده میشود که ما در اینجا UART را انتخاب میکنیم.
حال از بخش PORT، پورت سریال مربوط به مبدل USB به سریال را انتخاب کرده و بر روی کلید سبزرنگ Connect کلیک کنید.
در صورتی که بعد از کلیک بر روی Connect آدرسهای حافظه میکرو و دادههای داخل آن بهصورت کد هگز به نمایش در بیاید، این امر نشاندهنده موفقیتآمیز بودنِ اتصال نرمافزار CubeProgrammer به میکرو است. همچنین پیام موفقیتآمیز بودن اتصال به میکرو با رنگ سبز در بخش Log برنامه نشان داده خواهد شد.
مانند تصویر زیر، با کلیک بر روی آیکون دانلود برنامه (۱) به بخش Erasing & Programming رفته و از (۲) مسیر فایل Hex برنامه نوشتهشده توسط خودتان را به برنامه اصلی معرفی کنید. نرمافزار CubeProgrammer همچنین از فرمتهای دیگر مانند bin، elf، out و غیره نیز جهت پروگرام برنامه بر روی میکرو پشتیبانی میکند.
در نهایت با کلیک بر روی کلید Start Programming (۳) میکروی شما پروگرام خواهد شد. همچنین در قسمت (۴) میتوانید تنظیمات دیگری مانند Full chip erase و Verify کردن برنامه آپلودشده را نیز تعیین کنید. بعد از آپلود برنامه، پیغام موفقیتآمیز بودن عملیات برنامهریزی میکرو نمایش داده خواهد شد.
فراموش نکنید که بعد از اتمام عملیات پروگرام، مجدد جامپر BOOT0 به وضعیت قبلی خود برگشته و LOW میشود. با ریاستارت کردن میکرو، برنامه اجرا خواهد شد.
پروگرام از طریق USB
در صورتی که میکروی شما از DFU از طریق USB پشتیبانی کند، مانند میکروهای سری F4، کافی است که پایه BOOT0 را با جامپر HIGH کرده و مانند حالت قبلی برد خود را ریاستارت کنید.
مجدداً به منوی انتخاب روش پروگرام کردن بروید و USB را انتخاب کنید. بقیه مسیر عیناً مشابه حالت UART خواهد بود.
نتیجهگیری
در این مطلب روشهای پروگرام کردن میکروهای STM32 بدون استفاده از پروگرامرهای مرسوم مانند ST-LINK بررسی شده است. با بوت لودر در این میکروها جهت برنامهریزی با روش DFU آشنا میشوید و نحوه استفاده از نرمافزار STM32CubeProgrammer توضیح داده میشود.
نویسنده : دکتر آرش فتاحی
دپارتمان برق و الکترونیک مجتمع فنی تهران دوره آموزش برنامه نویسی و راه اندازی میکرو کنترلر ARM را در دو سطح مقدماتی و پیشرفته به صورت تخصصی و عملی آموزش می دهد.
تلفن مشاوره : ۲۲۰۶۰۵۸۶-۰۲۱