راه اندازی STM32 با آردوینو

توسط | 21 دی, 1399 | STM32, آردوینو, میکروکنترلر | 7 دیدگاه ها

راه-اندازی-stm32-آردوینو-arduino

آموزش STM32 یوبرد

شروع بازی ST

آموزش های رایگان STM32

فیلم های آموزش STM32

آموزش خصوصی STM32

راه اندازی STM32 با آردوینو یا راه اندازی STM32 در پلتفرم آردوینو، تنها نیازمند افزودن STM32 به آردوینو است. پس از افزودن میکروکنترلرهای STM32 به Arduino IDE، کدهای برنامه را مانند آنچه برای بردهای آردوینو داریم، می نویسیم. سپس با کلیک روی آیکون آپلود، میکروکنترلر STM32 یا برد مبتنی بر میکروکنترلر STM32 را پروگرام می کنیم. امروزه بعضی شرکت ها، بردهای توسعۀ خود را منطبق بر پلتفرم آردوینو تولید می کنند. مثل شرکت NXP که برد توسعۀ LPCXpresso را منطبق بر برد Arduino UNO تولید کرده است. یا بردهای توسعۀ Nucleo-64 و Nucleo-144 ساخت شرکت ST که منطبق بر Arduino UNO هستند. همچنین بردهای توسعۀ Nucleo-32 این شرکت که منطبق بر Arduino Nano V3 هستند. میکروکنترلرهای روی بردهای Nucleo، میکروکنترلرهای STM32 یا STM8 هستند. تعداد زیادی از میکروکنترلرهای STM32 و بردهای مبتنی بر آنها، در نرم افزارهای آردوینو پشتیبانی می شوند. و با اضافه کردن بردهای STM32 به نرم افزار Arduino IDE، می توان در پلتفرم آردوینو برای آنها برنامه نوشت. در این نوشته ابتدا روش افزودن بردهای STM32 به Arduino IDE را توضیح می دهیم. سپس یک برنامۀ سادۀ LED چشمک زن برای برد Nucleo-F103RB می نویسیم. در ادامه یک بوت لودر USB را معرفی می کنیم که می توانیم آن را برای برنامه ریزی میکروکنترلرهای STM32 به کار ببریم. بوت لودر USB را روی برد Blue pill می ریزیم. و برنامه ای را که برای برد Blue pill نوشته ایم با بوت لودر USB، روی آن آپلود و نتیجه را مشاهده می کنیم. این برنامه ها که آنها را در نرم افزار Arduino IDE نوشته ایم، در پیوست قرار دارند. همچنین بوت لودر USB که معرفی می کنیم، برای میکروکنترلرهای سری F103 و F407 و شامل چند فایل است. این فایل ها را نیز در پیوست قرار داده ایم.

نکته: از ورژن آخر Arduino IDE استفاده کنید.

آموزش های یوبرد مرتبط با این نوشته:

راه-اندازی-nucleo-f103rb-آردوینو

تصویر 1 – راه اندازی STM32 در آردوینو

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

برای راه اندازی STM32 با آردوینو، باید ابتدا آنها را به نرم افزار Arduino IDE اضافه کنیم. برای اضافه کردن STM32 به آردوینو، در نرم افزار Arduino IDE از منوی File روی Preferences کلیک می کنیم. در پنجرۀ Preferences در قسمت Additional Board Manager URLs، لینک زیر را قرار می دهیم. سپس روی OK کلیک می کنیم (1).

https://github.com/stm32duino/BoardManagerFiles/raw/master/package_stmicroelectronics_index.json

در این هنگام باید اتصال به اینترنت برقرار باشد. در ادامه از منوی Tools از قسمت Board روی Boards Manager کلیک می کنیم (2). در پنجرۀ باز شده، STM32 را جست و جو می کنیم. ممکن است در جست و جوی STM32 در Boards Manager، در ابتدای نام نتیجۀ یافت شده، کلمۀ Deprecated قرار گرفته باشد. که این به معنی منسوخ بودن آن است. برای رفع این مشکل باید در پنجرۀ Preferences لینک جدید را قرار داد. لینک جدید در سایت گیت هاب در صفحۀ مربوط به بردهای STM32 در آردوینو موجود است. این لینک (با پسوند json) در بخش توضیحات صفحۀ STM32duino/Arduino_Core_STM32 آورده شده است.

افزودن-آردوینو

تصویر 2 – افزودن میکروکنترلرها و بردهای STM32 به Arduino IDE

آنچه را که مربوط به STMicroelectronics است، نصب می کنیم (3). صبر می کنیم تا دانلود و نصب به اتمام برسد (4). در نهایت روی Close کلیک می کنیم (5).

پس از نصب شدن بردها و میکروکنترلرهای STM32 در Arduino IDE، می توان آنها را از بخش Boards در منوی Tools انتخاب کرد. همان طور که در تصویر زیر مشخص است، بردها به دو دسته تقسیم شده اند. یک دسته مربوط به بردهای آردوینوی مبتنی بر میکروکنترلرهای AVR و دستۀ دیگر مربوط به بردهای STM32 است. برای انتخاب برد Nucleo-F103RB باید در اینجا Nucleo-64 را انتخاب کنیم. همچنین برای انتخاب برد Blue pill باید Generic STM32F1 series را انتخاب کنیم. در ادامه، برنامه نویسی میکروکنترلرهای STM32 با Arduino IDE را بررسی می کنیم.

بردهای-st-آردوینو

تصویر 3 – بردهای STM32 در Arduino IDE

راه اندازی STM32 با آردوینو

در این بخش برای ذکر مثالی از راه اندازی STM32 در آردوینو، برنامه ای ساده برای برد Nucleo-F103RB می نویسیم. ابتدا از منوی Tools و از بخش Board، روی Nucleo-64 کلیک می کنیم. سپس در همین منو از بخش Board part number، بردهای Nucleo-64 را می بینیم که ما برد Nucleo-F103RB را انتخاب می کنیم. برد را از طریق رابط USB به کامپیوتر متصل می کنیم. سپس در قسمت Port، پورت COM اختصاص داده شده به برد را تیک می زنیم. تنظیمات دیگر می توانند در حالت پیش فرض و به این صورت باشند:

  • بخش USART support: روی Enabled (generic “Serial”)؛
  • بخش USB support: روی None؛
  • بخش USB speed: روی Low/Full Speed؛
  • بخش Optimize: روی Smallest (-Os default)؛
  • بخش C Runtime Library: روی Newlib Nano (default)؛
  • بخش Upload method: روی Mass Storage؛

تنظیمات-nucleo-f103rb-آردوینو

تصویر 4 – تنظیمات مربوط به برنامه نویسی برد Nucleo-F103RB در آردوینو

برنامه نویسی STM32 با آردوینو در برخی موارد، تفاوت هایی با برنامه نویسی بردهای آردوینوی مبتنی بر AVR دارد. دلیل این تفاوت ها، واحدهای داخلی میکروکنترلرهای STM32 است که نسبت به واحدهای داخلی AVR ویژگی های پیشرفته تری دارند. برای مثال تعداد مدهای GPIO در STM32 نسبت به مدهای پورت IO در AVR بیشتر است. یا این که وقفه خارجی در STM32 می تواند با سطح High روی پایۀ ورودی هم اتفاق بیفتد. در حالی که وقفه خارجی در AVR با سطح High سیگنال نمی تواند اتفاق بیفتد. برنامه ای که ما نوشته ایم به صورت زیر است. در تابع setup پایۀ متصل به LED روی برد و همچنین پایۀ PC0 را خروجی می کنیم. در تابع loop نیز وضعیت این پایه ها را با تأخیر 1000 میلی ثانیه، تغییر می دهیم.

void setup() {
	// put your setup code here, to run once:
	pinMode(LED_BUILTIN, OUTPUT);
	pinMode(PC0, OUTPUT);
}

void loop() {
	// put your main code here, to run repeatedly:
	
	delay(1000);
	digitalWrite(LED_BUILTIN, HIGH);
	digitalWrite(PC0, LOW);

	delay(1000);
	digitalWrite(LED_BUILTIN, LOW);
	digitalWrite(PC0, HIGH);
}

برای پروگرام کردن میکروکنترلر روی برد Nucleo-F103RB، روی آیکون آپلود کلیک می کنیم. نتیجۀ برنامه ای که نوشته ایم، در تصویر زیر آمده است. یک LED هم به پایۀ PC0 متصل کرده ایم.

نتیجه-راه-اندازی-nucleo-f103rb

تصویر 5 – نتیجۀ راه اندازی STM32 با آردوینو، چشمک زدن LED

راه اندازی Blue pill در آردوینو

برای راه اندازی STM32 با آردوینو می توان از برد Blue pill استفاده کرد. برد توسعۀ Blue pill یکی از بردهای ساده و ارزان قیمتی است که میکروکنترلر آن، STM32F103C8 یا STM32F103CB است. تفاوت STM32F103CB با STM32F103C8 در ظرفیت حافظۀ Flash آنهاست. ظرفیت حافظۀ Flash این میکروکنترلرها به ترتیب 128 و 64 کیلوبایت است. روی این بردها یک کانکتور Micro USB وجود دارد که به واحد USB میکروکنترلر متصل است. در حالت عادی برای برنامه ریزی این برد نمی توان از این کانکتور Micro USB استفاده کرد. روش های برنامه ریزی این برد در حالت عادی، سه روش SWD و JTAG و بوت لودر UART هستند. که دو روش اول نیازمند پروگرامر خارجی و روش سوم نیازمند مبدل سطح منطقی یا مبدل USB به سریال است. اما با روشی می توانیم از طریق کانکتور Micro USB و استفاده از یک کابل USB آن را پروگرام کنیم. برای این کار کافی است یک بوت لودر USB برای Blue pill داشته باشیم. برد Blue pill را پروگرام می کنیم و بوت لودر USB را روی آن می ریزیم. در این صورت می توان میکروکنترلر برد Blue pill را با کابل USB برنامه ریزی کرد. یکی از بوت لودرهایی که برای این کار استفاده می شود، بوت لودر STM32 HID است. این بوت لودر را در پیوست قرار داده ایم. همچنین نسخۀ آخر آن را می توان از اینجا دانلود کرد. تعدادی  بوت لودر در فایل دانلودی وجود دارد. بوت لودر USB برای برد Blue pillی که LED آن به پایۀ PC13 متصل است، فایل hid generic pc13 در پوشۀ F103 و پوشۀ low and medium density است.

بوت-لودر-usb-hid

تصویر 6 – بوت لودر USB بلو پیل

راه اندازی STM32 با آردوینو از طریق بوت لودر USB

برای راه اندازی STM32 با آردوینو، هم می توان با بوت لودر سریال عملیات برنامه ریزی را انجام داد و هم از طریق SWD و JTAG و استفاده از پروگرامر خارجی. پیشتر دیدیم که برد Nucleo-F103RB را بدون انجام کار خاصی با Arduino IDE پروگرام کردیم. پروگرامر روی این برد، ST-Link است. و ما با کلیک روی آیکون آپلود، این برد را با پروگرامر خودش برنامه ریزی کردیم. اما برد Blue pill پروگرامر ندارد. می توان آن را با پروگرامر خارجی (مثل پروگرامر J-Link) با رابط های SWD یا JTAG برنامه ریزی کرد. یا آن را با مبدل USB به سریال، به کامپیوتر متصل و از طریق بوت لودر UART برنامه ریزی کرد. با یکی از روش های مذکور که آنها را در نوشتۀ «پروگرام کردن STM32 با JTAG و SWD و بوت لودر» تشریح کرده ایم، بوت لودر STM32 HID را روی برد Blue pill می ریزیم. در صورتی که پروگرامر داریم، SWD روش ساده تری است. که می توانیم با نرم افزار ST-Link Utility یا STM32CubeProgrammer، بوت لودر را به حافظۀ Flash میکروکنترلر منتقل کنیم. اما اگر پروگرامر نداریم، می توانیم از مبدل USB به سریال استفاده کنیم. در این روش می توان از نرم افزار Flasher-STM32 یا نرم افزار STM32CubeProgrammer استفاده کرد. (به نوشتۀ پروگرام کردن STM32 مراجعه شود.)

نکته: پس از انتقال بوت لودر به میکروکنترلر STM32، به ترتیب تغذیه را قطع، اتصالات مبدل USB به سریال را جدا می کنیم و پایه های BOOT را به حالت اولیه برمی گردانیم.

حال برد Blue pill را با کابل USB به کامپیوتر وصل می کنیم. در نرم افزار Arduino IDE آن را انتخاب می کنیم و تنظیمات را مطابق تصویر زیر انجام می دهیم. بعد از آن هر بار که روی آیکون آپلود کلیک کنیم، برد Blue pill از طریق رابط USB برنامه ریزی می شود.

تنظیمات-آردوینو-بوت-لودر-usb

تصویر 7 – تنظیمات منوی Tools برای بوت لودر USB برد Blue pill و نتیجۀ آپلود یک برنامه روی آن

نتایج راه اندازی STM32 با آردوینو

  1. برای راه اندازی STM32 در آردوینو، گام اول اضافه کردن بردها و میکروکنترلرهای STM32 به نرم افزار آردوینو است.
  2. بعضی شرکت ها بردهای توسعۀ خود را منطبق بر بردهای آردوینو می سازند. همچنین برخی بردهای توسعۀ منطبق بر بردهای آردوینو، در نرم افزار آردوینو پشتیبانی می شوند. مثل تعداد زیادی از بردهای STM32.
  3. برای افزودن میکروکنترلرها و بردهای STM32 به آردوینو باید یک URL جدید در پنجرۀ Preferences قرار داد. سپس در Boards Manager کلمۀ STM32 را سرچ و در نتیجۀ یافت شده روی Install کلیک کرد. پس از مدتی STM32 به آردوینو اضافه می شود. دقت شود که ارتباط اینترنتی باید برقرار باشد.
  4. برای راه اندازی STM32 با Arduino IDE کافی است برد مورد نظر را در قسمت Board منوی Tools انتخاب و سپس تنظیمات آن را تعیین کرد.
  5. برنامه نویسی STM32 در Arduino IDE تا حدود زیادی شبیه برنامه نویسی برای بردهای آردوینو است.
  6. برای برنامه ریزی برد Blue pill در حالت عادی سه روش وجود دارد: روش JTAG و SWD و بوت لودر UART. بنابراین نمی توان آن را با استفاده از کانکتور Micro USB پروگرام کرد. مگر این که بوت لودر USB روی آن پروگرام شود.
  7. می توان بوت لودر USB را با یکی از سه روش JTAG یا SWD یا بوت لودر UART با پروگرامر یا مبدل USB به سریال، روی میکروکنترلرهای STM32 سری F1 پروگرام کرد. بعد از آن می توان میکروکنترلر را از طریق رابط USB نیز پروگرام کرد.

رضا بداغی

رضا بداغی

عضو هیئت مدیره یوبرد، طراح و برنامه نویس سیستم های دیجیتال مبتنی بر میکروکنترلر، طراح PCB و مدرس آموزش های میکروکنترلر، طراحی PCB و برنامه نویسی میکروکنترلر

سفارش پروژه میکروکنترلر یوبرد

زیرساخت مطمئن صنعت

جدیدترین تاپیک های STM32

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

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

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

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

راه اندازی UART در STM32، رجیستری و HAL

راه اندازی UART در STM32، اتصالات و نرم افزار مورد نیاز، نمونه کد USART در STM32 به صورت رجیستری، نمونه کد رجیستری USART با وقفۀ دریافت، نمونه کد HAL برای راه اندازی USART در STM32، نمونه کد HAL با وقفۀ دریافت، نحوه محاسبه Baud rate در USART میکروکنترلرهای STM32F1

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

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

نصب VisualGDB روی ویژوال استودیو، ساخت پروژه برای برنامه نویسی میکروکنترلرها با ویژوال استودیو، ساخت پروژه برای STM32 در ویژوال استودیو، کدنویسی STM32 در ویژوال استودیو، ساخت پروژه برای AVR در ویژوال استودیو، ساخت پروژه برای LPC در ویژوال استودیو، ساخت پروژۀ آردوینو در ویژوال استودیو

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

راه اندازی ADC در STM32، رجیستری و HAL

راه اندازی ADC در STM32، استفاده از پیکربندی Independent، کانال تکی، تبدیل Discontinuous و کانال Regular، اتصالات لازم برای راه اندازی واحد ADC در STM32، نمونه کد رجیستری، نمونه کد ADC میکروکنترلر STM32 با HAL، خواندن از چند کانال ADC با توابع HAL، توابع HAL راه اندازی ADC

7 دیدگاه ها

  1. خیلی ممنون از مطالب آموزشیتون من تلاش کردم بوت لودر usb رو بریزم رو برد بلوپیل اما نمیشه. نرم افزار flasher هنگ میکنه و مجبور میشم ببندمش ممنون میشم راهنمایی کنید

    پاسخ
    • سلام. خواهش میکنم. این مشکل به خاطر ارتباط ناصحیح بین کامپیوتر و میکروکنترلر به وجود میاد. یا پورت COM اشتباه رو توی Flasher انتخاب می کنید. یا باود ریت خیلی کم یا خیلی زیاده. یا مبدل USB به سریال (یا مبدل سطح ولتاژ)ی که استفاده میکنید مشکل داره. یا TX و RX رو اشتباه متصل می کنید. و یا جامپرهای Boot0 و Boot1 رو اشتباه وصل می کنید. و دقت داشته باشید که باید از USART1 میکروکنترلر استفاده کنید. که پایه هاش میشه پایه های PA9 و PA10. نوشتۀ پروگرام کردن STM32 توی وبلاگ هست. اون رو مطالعه کنید. بخش بوت لودرش. هم اتصالات توضیح داده شدن و هم روش کار با نرم افزار Flasher. موفق باشید

      پاسخ
  2. سلام. من برنامه نویسی آردواینو بلدم و چند تا پروژه انجام دادم. قصد دارم stm32 یاد بگیرم و سوالم اینه که الان که stm32 با آردواینو راه اندازی میشه باز نیازی هست که برم برای یادگیری stm32؟

    پاسخ
    • سلام. اگه بخواید STM32 یاد بگیرید که تا حدود زیادی با اون چیزی که توی آردوینو هست متفاوته. پلتفرم آردوینو یکی از اهدافش “تسهیل روند پیاده سازی پروژه های الکترونیکی دیجیتال برای افراد کم آشنا و ناآشنا با دنیای میکروکنترلرها” است. و توی آردوینو چه برای میکروکنترلرهای AVR و چه برای میکروکنترلرهای STM32، راه اندازی واحدهای داخلی به شکل ساده ای هست که کار ما رو راه بندازه. اما اگه بیرون از پلتفرم آردوینو و با کدنویسی به صورت دستی یا استفاده از کتابخونه های آماده بخواید همون واحد داخلی رو راه اندازی کنید، میتونید به همۀ قابلیت های اون واحد داخلی دسترسی داشته باشید. البته خب کار سخت ترهست. هم باید تئوری اون واحد داخلی رو خوب یاد بگیرید و هم کدنویسی رو به صورت صحیح انجام بدید. پس با پلتفرم آردوینو نمیتونیم از همۀ قابلیت های بعضی واحدهای داخلی استفاده کنیم. موارد دیگه ای وجود داره که توی بخش «معایب آردوینو» و «کاربرد آردوینو در صنعت، پروژه های پیچیده و محدودیت های آردوینو» نوشتۀ آردوینو میتونید مطالعه کنید.

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

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

      پاسخ
  3. باسلام خسته نباشید، من کلیه مراحل را به درستی انجام میدهم ولی در انتها هنگام اجرا خطای raw binary میدهد، لطفا راهنمایی بفرمایید ضروری است، با تشکر

    پاسخ
  4. سلام وقت بخیر
    من یک میکرویstm32f103 دارم که میخوام با روش uart اون رو پروگرم کنم برای این کار از یک ماژول f232r استفاده کردم تمام وایرها هم به درستی نصب کردم ولی به هنگام اجرا در آردینو پیغلم خطای raw binary دریافت میکنم.ضمن اینکه در boot loader وقتی com رو انتخاب و next میزنم خطای no target میده .لطفا راهنمایی بفرمایید

    پاسخ
    • سلام. وقتتون بخیر. تنظیمات توضیح داده شده توی این نوشته، برای برنامه ریزی STM32 با استفاده از پروگرامر ST Link هستش که روی برد Nucleo-F103RB وجود داره. برای برنامه ریزی با رابط USART، اول با نرم افزار آردوینو فایل هگز تولید کنید، بعدش از نرم افزار STM32 Cube Programmer یا STM32 Flasher استفاده کنید. میتونید به نوشتۀ پروگرام کردن STM32 توی وبلاگ مراجعه کنید.

      پاسخ

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

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

دیگر آموزش های یوبرد

آموزش FreeRTOS یوبرد

زمان واقعی در میکروکنترلر و پردازنده های کوچک با FreeRTOS

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

تجسم دنیای الکترونیک

آموزش زبان C و MISRA-C یوبرد

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

آموزش لحیم کاری و IPC-A-610 یوبرد

ساخت دنیای الکترونیک

آموزش آردوینو یوبرد

جادۀ آسفالت میکروکنترلر

آموزش ماژول های SIM800 یوبرد

تلفن همراه صنعت

آموزش زبان ++C و ++MISRA-C یوبرد

لمس شی گرایی در میکروکنترلرها

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

شاهکار 8 بیتی Atmel

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

یادگار فیلیپس

آموزش های شاخص

ضبط پیام صوتی

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