پروگرام کردن STM32 با JTAG و SWD و بوت لودر

توسط | 27 دی, 1398 | میکروکنترلر | 20 دیدگاه ها

روش های پروگرام کردن STM32، فعال کردن JTAG و SWD در STM32، اتصالات لازم برای روش های JTAG و SWD و بوت لودر، برنامه ریزی STM32 با پروگرامرهای J-Link و ST-Link و مبدل USB به سریال، پروگرام STM32 با J-Flash و Keil و STM32CubeProgrammer و ST-Link Utility و Flasher-STM32
پروگرام-کردن-stm32

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

موضوع این نوشته، معرفی روش های پروگرام کردن STM32 و نحوه برنامه ریزی STM32 است. این روش ها عبارتند از:

  • پروگرام کردن STM32 با JTAG؛
  • پروگرام کردن STM32 با SWD؛
  • پروگرام کردن STM32 با بوت لودر.

بنابراین از بیان مطالب تکراری یا مطالبی که خود موضوع نوشتۀ دیگری هستند، خودداری می کنیم. در ادامه، به پروگرامر J-Link و پروگرام کردن STM32 با آن توسط نرم افزار Keil و J-Flash، اشاره خواهیم کرد. همچنین اشاره ای به نرم افزار ST-Link Utility خواهیم داشت. مباحث مذکور، موضوع این دو نوشتۀ وبلاگ یوبرد هستند:

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

برای مطالعۀ روش برنامه نویسی و برنامه ریزی STM32 در آردوینو، به نوشتۀ راه اندازی STM32 با آردوینو مراجعه کنید.

فیلم آموزش آردوینو مقدماتی

فیلم آموزش ARM STM32 مقدماتی

st-link-utility-j-flash

تصویر 1 – پروگرام کردن میکروکنترلرهای STM32 با نرم افزارهای J-Flash و ST-Link Utility

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

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

پروگرامر-نرم-افزار-برنامه-ریزی

تصویر 2 – نرم افزارها و سخت افزارهای استفاده شده در این نوشته

فعال کردن JTAG و SWD در STM32

برای برنامه ریزی میکروکنترلرهای STM32 با JTAG و SWD لازم است که این پروتکل های ارتباطی در میکروکنترلر فعال باشند. این پروتکل های ارتباطی برای برنامه ریزی و دیباگ میکروکنترلرهای سری STM32F103 به صورت پیش فرض فعال هستند. فعال سازی و غیر فعال سازی آنها با مقداردهی به بیت های 24 تا 26 رجیستر MAPR انجام می شود. نام این سه بیت، SWJ CFG است و مقدار آنها برای STM32F103 به صورت جدول زیر است. در وضعیت اول که وضعیت پیش فرض است، همۀ پایه های مربوط، به JTAG و SWD اختصاص داده شده است. در این حالت هر دو پروتکل JTAG و SWD برای پروگرام کردن STM32 در دسترس است. در وضعیت دوم پایۀ PB4 آزاد می شود. این حالت نیز مانند حالت قبل است. تفاوت آن این است که در JTAG پایۀ NJTRST که به پایۀ nTSRT پروگرامر متصل می شد، در دسترس نیست. در وضعیت سوم، JTAG غیر قابل دسترس و SWD در دسترس است. در این حالت PA15 و PB3 و PB4 آزاد هستند و میکروکنترلر دیگر از طریق JTAG نمی تواند پروگرام شود. در وضعیت چهارم، JTAG و SWD غیر قابل دسترس هستند و نمی توان میکروکنترلر را با آنها پروگرام کرد. همچنین همۀ پایه های مربوط به آنها آزاد هستند.

نکته: برای این که بتوانیم رجیستر MAPR را تغییر دهیم، باید بیت صفرم رجیستر APB2ENR را یک کنیم.

SWJ IO pin assigned Available debug ports SWJ CFG [2:0]
PB4 /
NJTRST
PB3 /
JTDO
PA15 /
JTDI
PA14 /
JTCK /
SWCLK
PA13 /
JTMS /
SWDIO
X X X X X Full SWJ (JTAG-DP + SW-DP) – Reset State 000
Released X X X X Full SWJ (JTAG-DP + SW-DP) but without NJTRST 001
Released Released Released X X JTAG-DP Disabled and SW-DP Enabled 010
Released Released Released Released Released JTAG-DP Disabled and SW-DP Disabled 100

جدول 1 – بیت های مربوط به فعال یا غیر فعال کردن JTAG و SWD

پایه-jtag-swd-stm32f103ve

تصویر 3 – پایه های مربوط به JTAG و SWD در STM32F103VET6

اتصالات JTAG برای پروگرام کردن STM32

در این روش از پروتکل ارتباطی JTAG بین میکروکنترلر STM32 و پروگرامر استفاده می شود. پایه های رابط JTAG که برای این ارتباط استفاده می شوند، عبارتند از:

  • nTRST یا TRST؛
  • TDI؛
  • TMS؛
  • TCK؛
  • TDO؛
  • nSRST یا SRST یا RESET یا NRST؛
  • VAPP یا VTref (پایۀ مرجع ولتاژ)؛
  • GND.

این پایه ها به ترتیب به پایه های NJTRST و JTDI و JTMS و JTCK و JTDO و NRST و VDD و زمین میکروکنترلر STM32 وصل می شوند. در اتصالات JTAG باید به این نکات توجه کنیم:

  1. برای پایه ها باید مقاومت های پول آپ و پول دون در نظر گرفته شود. پیشنهاد می کنیم TDI و TMS، پول آپ و TCK، پول دون شود (فلش های سبز در تصویر زیر). مقدار مقاومت ها نیز 100 کیلو اهم باشد.
  2. در ارتباط JTAG پایه های دیگری نیز وجود دارد. برخی پروگرامرها این پایه ها را دارند و برخی ندارند. برخی پروگرامرها علاوه بر پایه های JTAG، پایه های دیگری نیز دارند. در این موارد باید مطابق دفترچۀ راهنمای پروگرامر عمل کنیم.
  3. پایۀ nTRST را می توان در برنامه ریزی STM32 با JTAG استفاده نکرد. اتصال یا عدم اتصال آن در پروگرام کردن STM32 با ST-Link و J-Link، تفاوتی ندارد.
  4. در پروگرام کردن با JTAG باید المان تحت پروگرام دارای تغذیه باشد. پروگرامرهای J-Link و ST-Link این تغذیه را روی پایۀ 19 فراهم و نیاز به تغذیۀ خارجی را برطرف کرده اند. این پایه در بردهایی که دارای رگولاتور هستند، می تواند به ورودی رگولاتور متصل شود. در اتصال مستقیم این پایه به میکروکنترلر، باید به محدودۀ ولتاژ تغذیۀ میکروکنترلر توجه شود.
  5. پایۀ VAPP یا VTref که ممکن است در پروگرامرهای دیگر نام متفاوتی داشته باشد، یک ورودی برای پروگرامر است. به این صورت که مستقیماً به پایۀ VDDمیکروکنترلر متصل می شود.

اتصالات-jtag

تصویر 4 – اتصالات لازم برای پروگرام کردن STM32 با JTAG

اتصالات SWD برای پروگرام کردن STM32

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

  • SWDIO؛
  • SWCLK؛
  • SWO؛
  • RESET؛
  • VAPP یا VTref (پایۀ مرجع ولتاژ)؛
  • GND.

که به ترتیب به پایه های SWDIO و SWCLK و TRACESWO و NRST و VDD و زمین میکروکنترلر STM32 متصل می شوند. در اتصالات SWD به نکات زیر توجه شود:

  1. پایه های SWD باید با مقاومت های پول آپ و پول دون به زمین و VDD متصل شوند. پیشنهاد می کنیم پایۀ SWDIO با مقاومت 100 کیلو اهم پول آپ و پایۀ SWCLKنیز با همین مقدار مقاومت پول دون شود (فلش های سبز در تصویر زیر).
  2. در پروگرام کردن STM32، اتصال پایۀ SWO اختیاری است.
  3. همانند پروگرام با JTAG، در برنامه ریزی با SWD نیز باید المان تحت پروگرام دارای تغذیه باشد. در پروگرامرهای J-Link و ST-Link، یک منبع تغذیه روی پایۀ 19 وجود دارد. ولتاژ این منبع تغذیه در J-Link برابر 5 ولت و در ST-Link برابر 3.3 ولت است. اتصال این پایه در روش SWD همانند روش JTAG است.
  4. عملکرد و روش اتصال پایۀ VAPP یا VTref در اینجا نیز مانند JTAG است.

اتصالات-swd

تصویر 5 – اتصالات لازم برای پروگرام کردن STM32 با SWD

اتصالات لازم برای پروگرام کردن STM32 با بوت لودر

میکروکنترلرهای STM32 به صورت پیش فرض دارای بوت لودر داخلی در حافظۀ سیستم هستند. این بوت لودر که توسط شرکت سازنده در آن قرار گرفته است، با عنوان Embedded Bootloader شناخته می شود. سری های مختلف STM32 بوت لودرهایی دارند که می توانند پورت های مختلف را برای برنامه ریزی میکروکنترلر استفاده کنند. مثلاً در برخی میکروکنترلرهای سری STM32F10xxx، بوت لودر، واحد USART1 را برای پروگرام کردن استفاده می کند. یا میکروکنترلرهای سری STM32F09xxx، بوت لودر قابلیت به کارگیری USART1 و USART2 و I2C1 را برای پروگرام کردن میکروکنترلر دارد. برای فعال سازی بوت لودر سری های مختلف، الگوهایی وجود دارد که به آنها Bootloader Activation Pattern می گویند.

در این بخش به اتصالات لازم برای پروگرام کردن STM32F103VET6 با بوت لودر می پردازیم. بوت لودر این میکروکنترلر از USART1 استفاده می کند. پایه های TX و RX واحد USART1 به ترتیب روی PA9 و PA10 قرار دارند. در قسمت بالای تصویر زیر، اتصالات برای مبدل های USB به سریال آورده شده است. قسمت پایین تصویر نیز، نحوۀ اتصال میکروکنترلر را به کامپیوتر از طریق پورت سریال و استفاده از Level Converter نشان می دهد. توصیه می شود که اگر در سمت کامپیوتر از مقاومت های پول آپ استفاده نشده است، پایه های RX و TX سمت میکروکنترلر، پول آپ شوند. سمت راست تصویر، الگوی فعال کردن بوت لودر را نمایش می دهد. برای فعال سازی بوت لودر در STM32F103VET6 باید پایۀ BOOT0 به VDD و پایۀ BOOT1 به زمین وصل شود. به این ترتیب پس از روشن شدن یا ریست میکروکنترلر، بوت لودر موجود در حافظۀ سیستم اجرا می شود.

اتصالات-usart-پروگرام-بوت-لودر

تصویر 6 – پروگرام کردن STM32 با بوت لودر، اتصالات لازم برای STM32F103VET6

سخت افزارهای برنامه ریزی، پروگرامر STM32

برای برنامه ریزی میکروکنترلرهای STM32، پروگرامرهای مختلفی وجود دارد. یکی از پروگرامرهایی که در نوشته های یوبرد دربارۀ آن صحبت کرده ایم، J-Link است. پروگرامر دیگری که در نوشته های آینده به آن می پردازیم، ST-Link است. با استفاده از این پروگرامرها می توان میکروکنترلرهای STM32 را با پروتکل های ارتباطی JTAG و SWD برنامه ریزی کرد. کافی است پایه های آنها را طبق مطالب بخش های قبل برای روش مورد نظر به میکروکنترلر متصل کرد. و با یکی از نرم افزارهایی که در ادامه ذکر خواهیم کرد، به برنامه ریزی میکروکنترلر پرداخت. برای پروگرام کردن از طریق بوت لودر نیز باید کامپیوتر با یک سخت افزار واسط به میکروکنترلر متصل شود. در استفاده از بوت لودر USART، برای کامپیوترهای بدون پورت سریال، می توان از مبدل USB به سریال استفاده کرد. کامپیوترهایی هم که پورت سریال دارند، باید با یک مبدل سطح ولتاژ مثل MAX232 به میکروکنترلر وصل شوند. در این نوشته روش های پروگرام کردن STM32 با پروگرامرهای J-Link و ST-Link و مبدل USB به سریال CP2102 انجام شده است. برای این منظور از برد توسعۀ STM32F10 یوبرد که میکروکنترلر STM32F103VET6 روی آن قرار دارد، استفاده شده است. روی این برد توسعه یک پروگرامر ST-Link وجود دارد که می تواند میکروکنترلر اصلی را با روش SWD پروگرام کند. برای استفاده از پروگرامر ST-Link روی برد، باید پایه های هدر نری روی برد مانند تصویر زیر (رنگ سبز) به هم وصل شوند. این برد همچنین یک مبدل USB به سریال CP2102 دارد که پایه های آن به USART1 میکروکنترلر متصل می شود. برای اتصال پایه های CP2102 به USART1 میکروکنترلر نیز باید پایه های هدر نری روی برد به صورت زیر (رنگ قرمز) به هم وصل شوند.

پروگرامر-jlink-stlink-cp2102

تصویر 7 – بردهای توسعۀ STM32 و CP2102 و MAX232 یوبرد و پروگرامرهای ST-Link و J-Link

نرم افزار برنامه ریزی میکروکنترلرهای STM32

در نوشتۀ پروگرامر J-Link، نحوۀ کار با نرم افزار J-Flash و J-Flash Lite برای پروگرام کردن STM32 بیان شده است. در  آن نوشته نحوۀ به کارگیری J-Link در  Keil برای میکروکنترلر LPC1768 آمده است. تنظیمات Keil و همچنین نحوۀ برنامه ریزی در آن با J-Link و ST-Link، برای STM32 نیز به همان ترتیب است. همچنین در نوشتۀ نرم افزار ST-Link Utility، نحوۀ کار با این نرم افزار شرح داده شده است. در این نوشته مطالب موجود در نوشته های مذکور را تکرار نمی کنیم و پیشنهاد می کنیم برای یادگیری پروگرام کردن STM32 با نرم افزار Keil و J-Flash و J-Flash Lite و ST-Link Utility، آن نوشته ها را مطالعه نمایید. توجه شود که چهار نرم افزار نام برده، قابلیت برنامه ریزی STM32 را با روش های JTAG و SWD دارند.

نکته: در نرم افزارهای مذکور، ممکن است لازم باشد Connect شدن پروگرامر به میکروکنترلر، روی Under reset تنظیم شود. در این صورت باید لحظاتی، کلید Reset میکروکنترلر را نگه داریم و در نرم افزار روی دکمۀ Connect کلیک کنیم. و سپس کلید Reset را رها کنیم. در نرم افزار Keil دکمۀ Connect برای اتصال پروگرامر وجود ندارد و این کار برای دکمۀ Download انجام می شود. همچنین تنظیم مدهای Connect در نرم افزار J-Flash وجود ندارد. در تصویر زیر مدهای Connect در نرم افزار ST-Link Utility و Keil نمایش داده شده است.

مد-connect-under-reset

تصویر 8 – مد Connect under reset در ST-Link Utility و Keil

نرم افزار STM32CubeProgrammer

نرم افزار دیگری که قابلیت پروگرام کردن STM32 را با روش های JTAG و SWD دارد، STM32CubeProgrammer است. این نرم افزار همچنین می تواند میکروکنترلرهای STM32 را با روش بوت لودر برنامه ریزی کند. STM32CubeProgrammer را در نوشته های آینده بررسی خواهیم کرد. در اینجا به طور مختصر نحوۀ برنامه ریزی STM32 را با سه روش JTAG و SWD و بوت لودر USART بررسی می کنیم. لازم به ذکر است که این نرم افزار تنها از پروگرامر ST-Link پشتیبانی می کند. پس از اتصال پروگرامر ST-Link یا برقراری اتصالات مربوط به برنامه ریزی با بوت لودر، پروگرامر یا پروتکل ارتباطی بوت لودر را انتخاب می کنیم (1). هنگام استفاده از ST-Link از قسمت Port روش JTAG یا SWD را انتخاب می کنیم (2). تنظیمات دیگر را در این بخش انجام می دهیم (3). در برنامه ریزی با بوت لودر نیز پورت مورد نظر و دیگر مشخصات آن را تعیین می کنیم (4). سپس روی دکمۀ Connect کلیک می کنیم (5). در ادامه روی تب Open file یا علامت + کلیک و فایل HEX مورد نظر را جست و جو و باز می کنیم (6). پس از باز شدن فایل HEX در حالی که تب فایل باز شده نمایش داده می شود، روی دکمۀ Download کلیک می کنیم (7). به این ترتیب میکروکنترلر پروگرام و پیامی مبنی بر موفقیت آمیز بودن عملیات نمایش داده می شود. با کلیک روی OK آن را می بندیم (8).

نکته: در STM32CubeProgrammer نیز هنگام برنامه ریزی با ST-Link، ممکن است لازم باشد مد Connect را Under reset تنظیم کنیم.

پروگرام-کردن-stm32cubeprogrammer

تصویر 9 – پروگرام کردن STM32 با نرم افزار STM32CubeProgrammer

نرم افزار STM32 Flash loader demonstrator

این نرم افزار که با نام Flasher-STM32 نیز شناخته می شود، برای پروگرام کردن STM32 با بوت لودر USART است. برای کار با این نرم افزار، ابتدا الگوی فعال سازی بوت لودر را پیاده می کنیم. پس از برقراری ارتباط سریال میکروکنترلر و کامپیوتر و Reset کردن میکروکنترلر، این نرم افزار را اجرا می کنیم. سپس پورت سریال صحیح را در قسمت Port Name انتخاب و تنظیمات دیگر را مطابق تصویر انجام می دهیم (1). روی Next کلیک می کنیم. با این کار میکروکنترلر توسط نرم افزار شناسایی می شود (2). در مرحلۀ بعد نوع صحیح میکروکنترلر را با توجه به مقدار حافظۀ Flash انتخاب می کنیم (3).

نکته: مقدار Baud Rate باید بین 1200 تا 115200 باشد.

نکته: پورت سریال مورد استفاده نباید توسط نرم افزار دیگری باز باشد. مثلاً نباید آن را با ترمینال پورت سریال موجود در نرم افزار Hercules باز کرده باشیم.

نرم-افزار-flash-loader-demonstrator

تصویر 10 – نحوۀ کار با نرم افزار STM32 Flash loader demonstrator

گام بعدی، عملیاتی است که می خواهیم روی حافظۀ میکروکنترلر انجام دهیم. برای پروگرام کردن میکروکنترلر، گزینۀ Download to device را انتخاب می کنیم (4). در بخش Download from file، فایل HEX مورد نظر را جست و جو و باز (5) و نوع پاک کردن حافظه و اعمال دیگر روی حافظه مثل Verify و … را تنظیم می کنیم. سپس روی Next کلیک می کنیم. بدین ترتیب، پروگرام کردن STM32 با بوت لودر USART آغاز و نتیجۀ آن نمایش داده می شود (6 و 7). در نهایت می توانیم با کلیک روی Close از برنامه خارج شویم. و یا می توانیم با کلیک روی Back به مرحلۀ قبل برگردیم. اعمال دیگری که می توانیم با این نرم افزار روی حافظۀ Flash میکروکنترلر انجام دهیم، عبارتند از: پاک کردن، خواندن، حفاظت محتویات و همچنین تنظیمات مربوط به Option bytes.

برنامه-ریزی-flasher

تصویر 11 – نحوه پروگرام کردن STM32 با بوت لودر توسط نرم افزار STM32 Flash loader demonstrator

رفع برخی خطاهای پروگرام کردن STM32

در پروگرام کردن STM32 با نرم افزارها و پروگرامرهایی که استفاده کردیم، ممکن است خطاهایی رخ دهد. برخی از این خطاها و روش رفع آنها در ادامه ذکر شده اند:

  • اگر میکروکنترلر در حال اجرای برنامه باشد و بخواهیم آن را در نرم افزار Keil و پروگرامر J-Link برنامه ریزی کنیم، ممکن است خطایی با عنوان “Contents mismatch at: …” ظاهر شود. برای رفع این خطا می توان پایۀ Boot0 را به VDD و پایۀ Boot1 را به زمین وصل کرد.
  • خطای قبل ممکن است در پروگرام کردن با Keil و ST-Link نیز رخ دهد. این خطا با اتصال پایۀ NRST میکروکنترلر به پروگرامر رفع می شود. همچنین می توان از مد Connect under reset و نگه داشتن کلید Resetهنگام آغاز برنامه ریزی استفاده کرد.
  • گاهی در استفاده از Keil و ST-Link، از تغذیه ای به غیر از تغذیۀ پروگرامر استفاده می کنیم. در این صورت ممکن است خطاهای مختلفی به وجود بیاید. گاهی با قرار دادن مد Connect روی under reset و نگه داشتن کلید reset حین شروع برنامه ریزی، این خطا رفع می شود. راه بهتر این است که از تغذیۀ پروگرامر استفاده شود.
  • در نرم افزار ST-Link Utility گاهی ممکن است خطای Timeout during flash programming به وجود بیاید. برای رفع این خطا یا باید از تغذیه ای به غیر از تغذیۀ پروگرامر استفاده کنیم. یا این که Boot0 را به VDD و Boot1 را به زمین وصل کنیم.
  • در اتصال به پروگرامر در STM32CubeProgrammer، گاهی خطای DEV TARGET RESET ERR به وجود می آید. این خطا با قرار دادن مد Connect روی under reset و نگه داشتن کلید Reset حین اتصال، رفع می شود. همچنین می توانیم مد Connect را روی Hot plug قرار دهیم. در این صورت نیازی به نگه داشتن کلید Reset حین اتصال نیست.

خطا-عدم-اتصال-stm32cubeprogrammer

تصویر 12 – خطای عدم اتصال پروگرامر ST-Link به STM32 و رفع آن

نتایج پروگرام کردن STM32 با JTAG و SWD و بوت لودر

  1. سه روش برای برنامه ریزی میکروکنترلرهای STM32 وجود دارد: روش JTAG، روش SWD و روش بوت لودر. بوت لودر مورد بحث ما، Embedded bootloaderی است که شرکت ST روی تراشه قرار داده است. به این بوت لودر گاهی بوت لودر STM32 می گویند.
  2. برای برنامه ریزی STM32 به روش های JTAG و SWD، باید این دو پروتکل در میکروکنترلر فعال باشد. در غیر این صورت پروگرامر با این دو پروتکل نمی تواند با میکروکنترلر ارتباط برقرار کند. در صورتی که این دو پروتکل فعال نباشند، می توان با پروگرام از طریق بوت لودر، آنها را فعال کرد.
  3. پایه های اصلی پروتکل JTAG عبارتند از TDI و TMS و TCK و TDO.
  4. پایه های اصلی پروتکل SWD عبارتند از: SWDIO و SWCLK و SWO.
  5. در برنامه ریزی با بوت لودر باید الگوی فعال سازی بوت لودر در سخت افزار پیاده شود.
  6. برنامه ریزی STM32 با پورت سریال با استفاده از روش بوت لودر امکان پذیر است. در این صورت برای کامپیوترهایی که پورت سریال سخت افزاری ندارند، برنامه ریزی STM32 با مبدل USB به سریال انجام می شود. کامپیوترهای دارای پورت سریال سخت افزاری نیز باید با یک مبدل سطح ولتاژ به میکروکنترلر وصل شوند.
  7. برنامه ریزی STM32 با پروگرامر ST-Link با روش های JTAG و SWD انجامی می شود.
  8. برنامه ریزی STM32 با پروگرامر J-Link نیز با روش JTAG و SWD قابل انجام است.
  9. برنامه ریزی STM32 با نرم افزار Keil می تواند توسط پروگرامرهای مختلفی انجام شود. این نرم افزار از J-Link و ST-Link پشتیبانی می کند. همچنین با هر دو پروگرامر می تواند به روش های JTAG و SWD میکروکنترلر را برنامه ریزی کند.
  10. برنامه ریزی STM32 با ST-Link Utility فقط با پروگرامر ST-Link انجام می شود. در این نرم افزار می توان به دو روش JTAG و SWD، میکروکنترلر را پروگرام کرد.
  11. برنامه ریزی STM32 با STM32CubeProgrammer به روش های JTAG و SWD و بوت لودر انجام می شود. این نرم افزار تنها از ST-Link پشتیبانی می کند.
  12. برنامه ریزی STM32 با J-Flash فقط با پروگرامرهای J-Link امکان پذیر است. در این نرم افزار با روش های JTAG و SWD می توان میکروکنترلر را پروگرام کرد.
  13. برنامه ریزی STM32 با نرم افزار Flasher-STM32 تنها با بوت لودر USART انجام می شود.

رضا اسدی

رضا اسدی

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

آموزش میکروکنترلرهای ARM سری STM32 یوبرد

آموزش میکروکنترلرهای AVR یوبرد

آموزش میکروکنترلرهایARM سری LPC یوبرد

آموزش Arduino یوبرد

خدمات برنامه نویسی میکروکنترلر یوبرد

راه-اندازی-dac-stm32

راه اندازی DAC در STM32

راه اندازی DAC در STM32، ویژگی های DAC در میکروکنترلرهای STM32F1، بلوک دیاگرام DAC در STM32، اتصالات راه اندازی DAC در میکروکنترلر STM32F107VC، نمونه کد رجیستری راه اندازی واحد DAC در میکروکنترلرهای STM32F1، ساخت موج سینوسی با STM32، راه اندازی مبدل دیجیتال به آنالوگ STM32 با توابع HAL

راه-اندازی-سون-سگمنت-با-آردوینو

راه اندازی سون سگمنت با آردوینو

راه اندازی سون سگمنت با آردوینو UNO، راه اندازی سون سگمنت 4 تایی آند مشترک با آردوینو، اتصال سون سگمنت به آردوینو، کتابخانۀ سون سگمنت برای آردوینو، نمونه کد راه اندازی سون سگمنت، نمایش اعداد در سون سگمنت 4 تایی، نکات راه اندازی سون سگمنت

راه-اندازی-adc-در-آردوینو

راه اندازی ADC در آردوینو

راه اندازی ADC در آردوینو، راه اندازی LCD گرافیکی KS0108 با کتابخانۀ U8g2، اتصالات لازم برای راه اندازی ADC و LCD گرافیکی KS0108، نمونه کد راه اندازی ADC آردوینو، فرمول محاسبۀ دما با TMP36، راه اندازی سنسور دما با آردوینو، راه اندازی فتوسل (LDR) با آردوینو

کنترل موتور براشلس با STM32

از ویژگی‌های تایمرهای Advanced میکروکنترلرهای STM32، امکان ایجاد PWM شش مرحله‌ای است. PWM شش مرحله‌ای در کنترل موتورهای براشلس کاربرد دارد و در STM32 می‌توان با تایمرهای Advanced، موتورهای براشلس را کنترل کرد. PWM شش مرحله‌ای نسبت به روش‌های دیگر کنترل موتور براشلس، عملکرد بهتر، مصرف انرژی کمتر و سطح ایمنی بالاتری را فراهم می‌آورد.

از مباحث آموزش STM32

فیوزبیت EESAVE

برای جلوگیری از پاک شدن محتوای حافظۀ EEPROM داخلی میکروکنترلرهای AVR در هنگام پاک کردن حافظۀ فلش آن، فیوزبیتی به نام EESAVE وجود دارد که باید فعال شود. در غیر این صورت، هر بار که حافظۀ فلش پاک می‌شود، حافظۀ EEPROM نیز پاک می‌شود. فیوزبیت EESAVE به صورت پیش‌فرض غیر فعال است و برای حفظ محتوای EEPROM باید فعال شود. حفظ محتوای EEPROM در بسیاری از پروژه‌ها ضروری است.

از مباحث آموزش AVR

تفاوت Event با وقفه در STM32

در میکروکنترلرهای STM32، علاوه بر وقفه‌های خارجی، Eventهای خارجی هم وجود دارند. تفاوت Event خارجی با وقفۀ خارجی این است که در وقفۀ خارجی، اجرای کد وجود دارد و با اتفاق افتادن آن، کدهای روتین وقفه اجرا می‌شوند، اما در Event خارجی، اجرای کد وجود ندارد و اتفاق افتادن آن فقط باعث می‌شود  میکروکنترلر از مد کاهش مصرف توان خارج شود.

از مباحث آموزش STM32

کلاک خروجی در STM32

در میکروکنترلرهای STM32، قابلیتی وجود دارد که می‌توان از برخی قسمت‌های واحد RCC، یک سیگنال کلاک را انتخاب کرد و آن را روی یک پایۀ خروجی تحت عنوان MCO قرار داد. سیگنال کلاک خروجی می‌تواند از قسمت‌هایی نظیر کلاک سیستم، خروجی PLLها، خروجی اسیلاتورهای HSE و HSI یا از بخش‌هایی دیگر باشد. این سیگنال خروجی می‌تواند برای سنکرون سازی و یا تأمین کلاک یک مدار یا آی سی دیگر به کار رود.

از مباحث آموزش STM32

وقفۀ Pin change در AVR

در برخی میکروکنترلرهای AVR، وقفه‌های Pin change وجود دارند که تفاوتشان با وقفۀ خارجی این است که در وقفۀ خارجی می‌توان تعیین کرد وقفه با لبۀ پایین‌رونده یا بالارونده یا تغییر سطح اتفاق بیفتد، اما وقفۀ Pin change با هر لبه یا تغییر سطح سیگنال اتفاق می‌افتد. همچنین هر وقفۀ خارجی با تحریک تنها یک پایۀ ورودی اتفاق می‌افتد. اما هر وقفۀ Pin change، چند پایۀ ورودی دارد و تحریک هر یک از آنها، باعث اتفاق افتادن وقفۀ Pin change می‌شود.
از مباحث آموزش آردوینو

خواندن فرکانس و دیوتی سایکل با آردوینو

یک روش برای خواندن Duty Cycleو فرکانس موج PWM ، قابلیت Capture تایمرهاست. برای بردهای آردوینو مبتنی بر AVR، کتابخانۀ TimerOne،  فاقد قابلیت کپچر است. اما در کتابخانۀ HardwareTimer میکروکنترلرهای STM32 در آردوینو، می‌توان از کپچر استفاده کرد و مد input PWM تایمرهای STM32 را فعال کرد و دو کپچر را به کار گرفت و فرکانس و دیوتی سایکل موج ورودی را خواند.

از مباحث آموزش آردوینو

اولویت وقفه‌ها در STM32

 

از مباحث آموزش stm32در میکروکنترلرهای STM32، قابلیتی وجود دارد که می‌توان از برخی قسمت‌های واحد RCC، یک سیگنال کلاک را انتخاب کرد و آن را روی یک پایۀ خروجی تحت عنوان MCO قرار داد. سیگنال کلاک خروجی می‌تواند از قسمت‌هایی نظیر کلاک سیستم، خروجی PLLها، خروجی اسیلاتورهای HSE و HSI یا از بخش‌هایی دیگر باشد. این سیگنال خروجی می‌تواند برای سنکرون سازی و یا تأمین کلاک یک مدار یا آی سی دیگر به کار رود.

از مباحث آموزش STM32

20 دیدگاه ها

  1. بسیار عالی بود استاد. فقط من توی برنامه ریزی با پروگرمر خارجی با نرم افزار STM32CuleIde مشکل دارم. برنامه ریزی با Keil خوب انجام میشه. ولی با STM32CubeIde هرکاری میکنم نمیشه. اگر موردی میدونید که ممکنه کمکم کنه ممنون میشم بفرمایید.

    پاسخ
    • خواهش میکنم. نرم افزار STM32CubeIDE ورژن اول، قابلیت Connect Under Reset رو نداشت. احتمالاً به خاطر نبودن این گزینه برای پروگرام کردن، با استفاده از بعضی ورژن های پروگرامر به مشکل میخوردید. با ورژن جدید نرم افزار امتحان کنید. اگه با همین پروگرامر و با نرم افزار Keil میتونید کار کنید، ورژن پروگرامرتون رو عوض کنید و با نرم افزار STM32CubeIDE ورژن آخر مجدد امتحان کنید.

      پاسخ
  2. سلام من یه فایل با پسوند bin دارم چهجوری میتونم اپلود کنم

    پاسخ
  3. سلام استاد
    تشکر بابت توضیحات کاملتون
    فقط من هنوز نمیدونم چطوری پایه های میکروکنتلر رو به پروگرامر stlink باید وصل کنم؟ تا بتونم برنامه رو به میکرو آپلود کنم؟؟؟

    پاسخ
    • سلام خواهش میکنم. باید پایه SWCLK و SWDIO از پروگرمر رو به پایه های متناظر در میکروکنترلر متصل کنید. در میکروکنترلرهای 100 پایه از ST معمولا به ترتیب پایه های شماره PA14 و PA13 هستن. همچنین باید پایه SWCLK با یک مقاومت PULL-DOWN و پایه SWDIO با یک مقاومت PULL-UP شود.

      پاسخ
  4. سلام
    و ممنون به خاطر اشتراک گذاشتن دانشتون
    یه سوال داشتم اگر کمکی در حلش بکنید ممنون میشم
    بنده پروگرامر st-link v2 رو دارم و باهاش هدربرد اماده stm32f103c8t6. رو پروگرام می کنم و بدون هیچ مشکلی پروگرام میشه
    منتها یه مدل stm32f405rg56 دارم یعنی تنها ای سیشو دارم و خودم رو برد وصل کردم
    اومدم بوت صفر و یک و پایه های پروگرام رو هم وصل کردم اما هر کاری می کنم پروگرامر نمیشناسه
    الان من نمی تونم یه چشمک زن با این درس کنم
    بوت صفر و یک هر دو رو به زمین و پایه های سریال پروگرامر رو با مقاومتای ده کیلو به تغذیه و زمین وصل می کنم
    یه بار بدون تغذیه خارجی تست کردم و یه بار دیگه با تغذیه خارجی
    اومدم اتصالاتم رو چک کردم دیدم که درستن
    و بیشتر از ۳.۳ ندادم که بگم سوخته
    دونه دونه پایه های ای سی رو هم چک کردم که لحیم سرد نداشه باشه و همه وصلن
    خلاصه کلافه شدم
    اگر کمک کنید ممنون میشم

    پاسخ
    • سلام. خواهش میکنم. دوست عزیز فقط برای پروگرام کردن با بوت لودر نیاز دارید که پایه های Boot رو پول آپ یا پول دون کنید. تو پروگرام کردن با پروگرامر ST-Link با نرم افزار ST-Link Utility امتحان کنید. همچنین این نرم افزار رو که باز کردید، از طریق منوی ST-Link فرم ور پروگرامرتون رو آپدیت کنید و از تنظیمات نرم افزار، پروتکل ارتباطی صحیح رو انتخاب کنید. JTAG یا SWD. اتصالات هم مطابق تصاویر این نوشته باشه. موفق باشید

      پاسخ
  5. با سلام
    من بورد مخصوص به میکروکنترلر stm32h750 رو طراحی و پیاده سازی کردم. نکته ای که هست من کدم رو داخل Keil بیلد میکنم و مشکلی نیست ولی کد روی میکرو دانلود نمیشه و خطا میده که اس تی لینک رو نمیشناسم اما نرم افزار st utility کاملا میکرو رو میشناسه و میتونه پروگرمش کنه.
    من بطور کامل درایور های اس تی لینک رو نصب کردم ولی بازم Keil میکروی من رو نمیشناسه. تمامی اتصالات هم درسته. ممنون میشم کمکم کنید شش ماه دیگه باید دفاع کنم ولی هنوز نمیتونم درست و حسابی از طریق stm studio برنامم رو دیباگ کنم

    پاسخ
    • سلام. وقتتون بخیر. firmware پروگرمر وقتی که تنظیمات اون رو تی Keil باز میکنید، آپدیت کنید. آخرین نسخه های فرم ور توی Keil و ST-Link با هم تطابق ندارن. اگه اشتباه نکنم وقتی توی Keil فرم ور رو آپدیت می کنید، نسخۀ قدیمی تر نسبت به نسخۀ توی ST-Link Utility نصب میشه. اگه Keil کلاً پروگرمر رو نمیشناسه، یا مشکل از Keilه یا درایور پروگرمر. که میگید درایورهای ST-Link رو نصب کردید. یه بار دیگه درایورهای ST-Link رو نصب کنید. همچنین ممکنه شما بردتون رو برای پروگرم کردن از طریق SWD طراحی کرده باشید و توی تنظیمات Keil ارتباط JTAG رو انتخاب می کنید. توی انتخاب ارتباط JTAG یا SWD دقت کنید. همچنین تنظیمات پروگرمر رو توی Option for target / debug / setting / … توی پنجرۀ Cortex-M Target Driver Setup  به صورت صحیح انجام بدید. و توی پنجرۀ Option for target توی تب Debug به جای Use Simulator، سمت راست یعنی Use ST-Link debugger رو انتخاب کنید. و بعدش تنظیمات اون رو انجام بدید

      پاسخ
  6. سلام آقای مهندس اسدی
    شما پروژه با ARM انجام میدید؟
    لطفا شماره تماس اعلام کنید.
    عزیزی

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

      پاسخ
  7. سلام من بوت لودر USB میریزم روی برد bluepill. بعد فقط یه بار میتونم با USB پروگرم کنم دفعه بعدش دیگه نمیشه. شما میدونید مشکل از چیه؟

    پاسخ
    • سلام. این مشکل از بوت لودره. بوت لودر ورژن بالاتر استفاده کنید. یا کلاً بوت لودرتونو عوض کنید. توی نوشتۀ «راه اندازی STM32 با آردوینو» بوت لودر USB توی فایل پیوست موجود هست. اگه به کارتون میاد میتونید ازش استفاده کنید. موفق باشید.

      پاسخ
  8. سلام. من یه دونه stm32f10c8t6 که با st-link/v2 پروگرامش میکنم ولی خطای abort connection میده.ممنون میشم کمک کنید

    پاسخ
    • سلام. ارتباطتون قطع میشه. درایور پروگرمر ST-Link رو آپدیت کنید یا اصلاً پاکش کنید و دوباره نصب کنید. همچنین Firmwareش رو آپدیت کنید. و این که اتصالاتتون هم چک کنید. و البته این رو هم در نظر داشته باشید که میتونید با قرار دادن نوع connect روی under reset کاری کنید که پروگرمر با ریست میکروکنترلر بهش متصل بشه. این هم میتونه کمک کننده باشه. وقتی connect رو روی under reset میذارید، در حد کمتر از یک ثانیه دکمۀ ریست رو نگه دارید، بعد توی نرم افزار روی Program کلیک کنید و به محض کلیک روی Program، دستتون رو از روی دکمۀ ریست بردارید. این طوری ممکنه بهتر باشه.

       

      پاسخ
  9. سلام من با میکروی stm32f407vg کار میکنم و میخوام قابلیت اترنت رو بهش اضافه کنم ولی وقتی پروگرامش میکنم برنامه اجرا نمیشه و فقط با قسمت debuger برنامه کار میکنه باید تنظیمات خاصی روش انجام بشه یا نه؟ ممنون میشم کمک کنید.

    پاسخ
    • سلام. چنین مواردی که رفتارهای عجیب به وجود میاد، معمولاً مربوط به پیکربندی واحد داخلیه. و پیکربندی و کانفیگ واحد داخلی صحیح انجام نشده. مثلاً وقتی یه بیت کنترلی رو 1 می کنید، باید صبر کنید که مثلاً یه بیت flag تغییر وضعیت بده، بعد برید رجیسترها و بیت های دیگه رو مقدار بدید. حالا چون توی دیباگ سرعت کمه، زمان برای تغییر وضعیت flag وجود داره. اما در عمل چون سرعت اجرای برنامه بالاست، flag تغییر نمیکنه، و دستورهای بعدی اجرا میشن و یه جایی از برنامه، میکروکنترلر هنگ میکنه.

      پاسخ
  10. سلام و عرض ادب
    من کد هگز یک میکرو کنترلر رو از روی یک برد دانلود کردم و میخوام تنظیمات اون میکرو مثل کلاک و اطلاعات دیگر رو هم داشته باشم، که بتونم اون تنظیمات رو روی یک میکرو خام جدید بگذارم و کد هگز رو روی اون بریزم، ممنوم میشم اگر راهنمایی بفرمایید که چطور این کاررو انجام بدم. میکرو STM32F101 هست و از ST-Link استفاده میکنم.
    ممنونم.

    پاسخ
    • سلام. خب شما کد هگز رو خوندید. همونو میتونید روی میکروکنترلر مشابه بریزید. به همون شکل کار میکنه. تنظیمات مربوط به کلاک هم توی کد هگز موجوده و وقتی روی میکروکنترلر جدید میریزید، میکروکنترلر جدید هم با همون تنظیمات کار میکنه. اما حالا اگه میخواید توی اون تغییراتی ایجاد کنید، یا کلاً میخواید ببینید برنامه چطور نوشته شده، باید جست و جو کنید ببینید چه ابزاری برای تبدیل کد هگز به C یا C++ وجود داره. ممکنه راه های دیگه هم وجود داشته باشه. خواهش میکنم

      پاسخ
  11. با سلام من با بورد دیسکاوری و میکرو کنترلر stm32f100rbt6 کار کردم.موقعی که یک ledرو روشن و خاموش کردم با jtagدفعه بعد که میخام برنامه را اجرا کنم jtag ارور میدهد .و دوم این که برنامه قبلی رو چجوری پاک کنم.ممنون

    پاسخ

یک دیدگاه بنویسید

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

ضبط پیام صوتی

زمان هر پیام صوتی 4 دقیقه است