آموزش STM32 : پروگرمر ST-link v2

  1. Home
  2. /
  3. آموزش STM32
  4. /
  5. شروع STM32

این مقاله برای کسانی هست که تصمیم به یادگیری برنامه نویسی میکروکنترلرهای STM32 گرفته اند، و سوالاتی دارند مثلا کدوم برد آموزشی STM32 برای شروع مناسبه ، کدوم پروگرمر رو برای برنامه نویسی میکروکنترلر های STM32 تهیه کنم ،  keil  بهتری یا STM32CubeIDE و … . این مباحث رو قراره بررسی کنیم.

برد آموزشی STM32

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

1- کدوم میکروکنترلر STM32 برای شروع مناسبه؟

2- از برد آموزشی چه انتظاری داریم؟

به نظر من بهترین میکروکنترلر برای شروع، میکروکنترلر های میان رده ی خانواده ی STM32 هستند و تعداد پین های زیادی هم نیاز نیست، مثلا یک میکروکنترلر STM32F1 یا STM32F4 با 48 یا 64 پین مناسبه. دلیل هم این که در شروع به یک میکروکنترلر با قیمت بالا و امکانات فراوان نیاز ندارید. 

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

برد بلوپیل ( Bluepill ) دارای میکروکنترلر STM32F103C8

به نظر من برد بلوپیل – bluepill یا قرص آبی دارای میکروکنترلر STM32F103C8 بهترین برد آموزشی STM32 برای شروع یادگیری این میکروکنترلر هست ، قیمت مناسبی داره و میکروکنترلر قدرتمندی داره که جوابگوی خیلی از کارهای hightech هست. برد بلوپیل فقط امکانات اولیه ی راه اندازی میکروکنترلر STM32F103C8 رو برامون فراهم کرده. ماژول ها رو میتونید با برد بورد و سیم جامپر خودتون به میکروکنترلر وصل کنید ، اینجوری بهتر هم یاد میگیرید. لازم نیست روی برد آموزشی پر از ماژول و آی سی باشه. برد های با امکانات زیاد برای شما بهتر نیستند. میمونه دو تا نکته:

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

– دقت کنید که حتما میکروکنترلر STM32F103C8 که روی برد بلوپیل هست اصل باشه. 

آمورش STM32 ، برد بلوپیل دارای میکروکنترلر STM32F103C8

تشخیص میکروکنترلر های STM32 اصل از تقلبی

تنها راهی که میتونیم مطمئن باشیم یک میکروکنترلر STM32 اصله اینه که با نرم افزار STM32CubeIDE پروگرمش کنیم ، اگر پروگرم شد ، اصله . البته میکروکنترلر های تقلبی STM32 رو هم میشه با STM32CubeIDE پروگرم کرد ولی نه با روش معمولی ، یکم پیچیده هست و باید از دیباگر Open OCD بجای GDB استفاده کنید.

بصورت چشمی و از اسم نوشته شده روی میکروکنترلر هم میشه تقلبی بودن رو تشخیص داد. میکروکنترلر های اورجینال STM32 ، اسمشون با STM32 شروع میشه، مثلا STM32F103C8 و نامگذاریشون مطابق نامگذاری میکروکنترلرهای STM32 شرکت ST هست. البته با این روش میتونید تقلبی بودن رو بفهمید ولی اصل بودن رو خیر.

آموزش STM32 ، نامگذاری میکروکنترلرهای STM32

میکروکنترلر های غیر اصل معمولا نامگذاریشون متفاوت هست ، در تصاویر زیر چند نمونه ی غیر اصل و نمونه اصل میکروکنترلر STM32F103C8 رو میبینید که میکروکنترلر STM32 روی برد Bluepill (قرص آبی) هست.

برد بلوپیل اصل و تقلبی ، میکروکنترلر STM32F103 اصل و تقلبی

برد های آموزشی STM32 شرکت ثالث – third party

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

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

برد های آموزشی STM32 ساخت شرکت ST : نوکلئو و دیسکاوری

برد های نوکلئو و دیسکاوری ، برد های آموزشی STM32 ساخت خود شرکت ST هستند و تقلبی هم نداره. این برد ها متنوع هستند ، بسیار با کیفیت اند و قیمت نسبتا بالاتری هم دارند و تقریبا همشون دارای پروگرمر ST-link v2 هم هستند و دیگه نیازی به پروگرمر ندارید. اطلاعات مربوط به برد های دیسکاوری و نوکلئو و شماتیک این برد ها رو میتونید در سایت شرکت ST ببینید. در تصویر زیر چند نمونه از این برد ها رو میبینید.

برد های آموزشی STM32 ساخت شرکت st ، برد های دیسکاوری و نوکلئو

پروگرمر ST-link برای میکروکنترلرهای STM32

برای لود کردن و دیباگ کد در میکروکنترلرهای STM32 به یک پروگرمر ST-link v2 نیاز داریم. از ST-link v3 هم میشه استفاده کرد ولی قیمتش خیلی بالا هست ، برای کسی که تازه میخواد شروع کنه مزیتی نداره و کلا ارزش خرید نداره (البته اگر تو بازار پیداش کنید). خب برمیگردیم به پروگرمر های ST-link v2 ، این پروگرمر ها با یک میکروکنترلر STM32 ساخته میشن ، معمولا STM32F103 و با پروتکل JTAG یا SWD به میکروکنترلرهای STM32 متصل میشن. پروتکل SWD تعداد پین های کمتری نیاز داره و مخصوص میکروکنترلرهای آرم هست ولی JTAG استفاده ی عمومی برای کاربرد های مختلف داره. اگر دارید یادگیری STM32 رو شروع میکنید ، به JTAG کاری نداشته باشید ، SWD هر امکانی که بخواهید رو داره و استفاده ازش راحت تره. لازم هم نیست پروگرمر ST-link که تهیه میکنید بطور کامل از JTAG پشتیبانی کنه.

پروگرمر های ST-link v2 برای پروگرم کردن میکروکنترلر های STM32

در خرید پروگرمر ST-link v2 برای میکروکنترلر های STM32 به چه نکاتی توجه کنیم

– آیا نرم افزار پروگرمر ، یعنی کدی که روی پروگرمر هست با استفاده از نرم افزار STM32CubeIDE آپدیت میشه؟ اگر پروگرمر ST-link v2 که خریداری میکنید ، با استفاده از میکروکنترلرهای غیر اصل STM32 ساخته شده باشه ، نمیتونید با استفاده از STM32CubeIDE ، نرم افزارش رو آپدیت کنید.

– برای پروگرم کردن میکروکنترلر STM32 میخواهید از پروتکل JTAG یا SWD استفاده کنید؟ اگر دلیل خاصی برای استفاده از JTAG ندارید ، از SWD استفاده کنید. هر سه نوع پروگرمر ST-link که بررسی میکنیم SWD رو پشتیبانی میکنند ، ولی فقط یک نوع ST-link پروتکل JTAG  رو کاملا پشتیبانی میکنه.

– قابلیت printf رو میخواهید یا خیر؟ برای استفاده از printf در زمان دیباگ میکروکنترلر های STM32 با پروتکل SWD، لازمه پروگرمر ST-link v2 پین SWO رو داشته باشه ، ST-link v2 dongle این پین رو ندارند.  

پروگرمر ST-link v2 dongle

این پروگرمر ها فقط از پروتکل SWD پشتیبانی میکنند و البته پین SWO که برای printf بهش نیاز داریم هم ندارند. معمولا هم با استفاده از چیپ های غیر اصل STM32 ساخته شدن و قابلیت آپدیت در نرم افزار STM32CubeIDE رو ندارند.

– jtag پشتیبانی نمیکند 

– در پروتکل SWD ، پین SWO رو نداره ، از printf نمیتونید استفاده کنید

– اگر میکروکنترلر استفاده شده غیر اصل باشه ، قابلیت آپدیت نداره ، معمولا میکروکنترلر STM32 استفاده شده در ساخت این پروگرمر ها غیر اصل هست

اتصال پروگرمر ST-link v2 دانگل USB به برد بلوپیل دارای میکروکنترلر STM32F103C8

پروگرمر ST-link v2 شرکت st

این پروگرمر ها ساخت شرکت ST هستند ، البته اگر اورجینال تهیه کنید ، که کم پیدا میشه. مدل های کپی هم در بازار موجوده ، مسئله ی مهم اینه که آیا میکروکنترلر STM32 استفاده شده در ساخت پروگرمر اصل هست یا نه . اگر اصل باشه ، میشه با STM32CubeIDE آپدیتش کرد. این پروگرمر های تمام پین های مورد نیاز پروتکل jtag و SWD رو دارند.  

– JTAG و SWD کاملا پشتیبانی میکند 

– اگر اصلی خریدید که مشکلی نیست ، اگر کپی خریدید دقت کنید که میکروکنترلر STM32 استفاده شده در ساخت پروگرمر اورجینال باشه، اگر غیر اصل باشه قابلیت آپدیت در STM32CubeIDE نداره

اتصال پروگرمر ST-link v2 ساخت شرکت ST به برد بلوپیل با میکروکنترلر STM32F103C8

پروگرمر ST-link v2 روی برد های دیسکاوری یا نوکلئو

برد های دیسکاوری یا نوکلئو برد های آموزشی میکروکنترلرهای  STM32 ، ساخت خود شرکت ST هستند و تقلبی ندارند. روی اکثر این برد ها یک پروگرمر ST-Link v2 وجود داره برای پروگرم کردن میکروکنترلر STM32 روی برد ، ولی میشه از پروگرمر ST-link v2 روی برد برای پروگرم کردن هر میکروکنترلر STM32 که بخواهیم استفاده کنیم. قبل از استفاده از st-link v2 روی برد های دیسکاوری یا نوکلئو ، دیتاشیت برد رو مطالعه کنید ، چون باید دو تا جامپر رو از روی برد بردارید.

– پروتکل SWD رو کاملا پشتیبانی میکنه ، پین SWO که برای printf استفاده میشه هم داره

– پروتکل JTAG هم پشتیبانی میکنه ولی تمام پین ها رو نداره

– برد های نوکلئو و دیسکاوری اورجینال هستند و به راحتی در بازار پیدا میشن

– اگر برد های دیسکاوری یا نوکلئو رو خریداری کنید ، هم یک پروگرمر ST-link v2 دارید و هم یک برد آموزشی و این هم خودش یک مزیت هست ، البته قیمت بالاتری دارند

اتصال پروگرمر ST-link روی برد نوکلئو به برد بلوپیل دارای میکروکنترلر STM32F103C8

پروگرمر ST-link v2 انتخاب من

انتخاب خود من پروگرمر های روی برد های دیسکاوری و نوکلئو هست. خودم از پروگرمر روی برد دیسکاوری STM32F429 و پروگرمر روی برد نوکلئو F446 زیاد استفاده کردم.

برنامه نویسی STM32 در نرم افزار Keil یا STM32CubeIDE

نرم افزار های زیادی برای نوشتن و دیباگ کردن کد برای میکروکنترلر های STM32 وجود داره ولی Keil و STM32CubeIDE از بقیه معروف تر هستند ، قبل از اینکه STM32CubeIDE بیاد خودم از Keil استفاده میکردم. من به دلایل زیر از STM32CubeIDE استفاده میکنم:

– نرم افزار STM32CubeIDE ساخت خود شرکت ST هست و بر خلاف keil رایگان هست

– نرم افزار STM32CubeIDE بر اساس ecilipse ساخته شده و محیط کد نویسی عالی داره ، مثلا بر خلاف keil در نرم افزار STM32CubeIDE در فایل های Header هم وقتی یک عبارتی رو مینویسیم برامون کاملش میکنه، این امکان در نرم افزار keil فقط در فایلهای سورس کد وجود داره.

– کامپایلر پیش فرض در نرم افزار STM32CubeIDE ، کامپایلر GCC هست ، من این کامپایلر رو به کامپایلر پیش فرض در Keil که Clang هست ترجیه میدم ، چون GCC بر خلاف Clang متن باز هست و محبوب تره

– در نرم افزار STM32CubeIDE امکانات بیشتری داریم ، که البته مثال های زیادی داره ، مثلا در محیط دیباگ در پنجره ی SFRs میتونیم مقدار بیتهای رجیسترها رو در لحظه تغییر بدیم ، این امکان در Keil وجود نداره

– STM32CubeIDE زود زود نسخه های جدیدش میاد ، keil اصلا اینجوری نیست

– نرم افزار STM32CubeIDE محیط زیباتر و بروزتری نسبت به keil داره 

– STM32CubeMx بخشی از نرم افزار STM32CubeIDE هست

مقایسه ی نرم افزار keil و STM32CubeIDE برای برنامه نویسی میکروکنترلر های STM32

کتابخونه HAL ، نرم افزار STM32CubeMx و برنامه نویسی رجیستری میکروکنترلر های STM32

اول باید بدونی پریفرال چیه. پریفرال مدارهای الکترونیکی قابل تنظیم در میکروکنترلر هستند که برای انجام کارهای مشخصی طراحی شدن، مثل تایمر ، مبدل آنالوگ به دیجیتال ، SPI و … . هر پریفرال تعدادی خونه ی حافظه با آدرس مشخص داره که بهشون میگیم رجیسترها ، برای تنظیم عملکرد هر پریفرال باید اعداد مشخصی رو در بیت های رجیسترهای پریفرال نوشت ، توضیحات این مسئله در رفرنس منوال میکروکنترلر هست. حالا برای تغییر رجیسترهای پریفرال سه روش داریم:

1- برنامه نویسی رجیستری : خودمون مستقیم بریم رجیسترها رو تغییر بدیم. امکان دسترسی به رجیسترها رو لایه ی نرم افزاری CMSIS برامون فراهم میکنه . کار لایه ی نرم افزاری CMSIS این هست که برامون پوینتر بسازه.

2- کتابخونه HAL : از توابع کتابخونه HAL برای تغییر محتوای رجیسترهای پریفرال ها استفاده کنیم. کتابخونه HAL خودش برای دسترسی به رجیسترها از لایه ی نرم افزاری CMSIS استفاده میکنه. 

 3- نرم افزار STM32CubeMx : میتونیم در نرم افزار CubeMx تنظیمات پریفرال ها رو بصورت گرافیکی انجام بدیم و این نرم افزار کد مورد نیاز برای تنظیم رجیسترهای پریفرال ها رو با استفاده از توابع کتابخونه HAL یا LL برامون مینویسه.

مزیت های برنامه نویسی رجیستری میکروکنترلر های STM32 نسبت به استفاده از کتابخونه HAL

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

مزیت های استفاده از کتابخونه HAL نسبت به برنامه نویسی رجیستری STM32

در مورد پریفرال هایی مثل USB ، خیلی زمان بره که عملکرد پریفرال رو یاد بگیرید و برنامه نویسی رجیستری رو انجام بدید، اگر برای خودتون سخته که این کار رو انجام بدید باید از کتابخونه ای که یه نفر مثل من برای USB میکروکنترلر STM32 با CMSIS نوشته استفاده کنید یا از همون کتابخونه HAL استفاده کنید. که استفاده از کتابخونه HAL منطقی تر هست . وقتی هم از کتابخونه HAL مثلا برای راه اندازی USB در پروژه تون استفاده میکنید ، میتونید بقیه پروژه رو بصورت رجیستری انجام بدید.

آردوئینو IDE برای STM32

گیت AND