معرفی داکیومنت‌های رسمی میکروکنترلرهای STM32 و ARM

داکیومنت‌های رسمی مربوط به میکروکنترلرهای STM32 و کلاً داکیومنت‌های رسمی مربوط به میکروکنترلرهای ARM، برخلاف داکیومنت(های) رسمی میکروکنترلرهای دیگه‌ای مثل ATmega328P، خیلی زیاد هستن و شاید کمی درهم به‌نظر برسن. معمولاً بیشتر اطلاعات مورد نیاز برای استفاده از ATmega328P درون یه داکیومنتی تحت عنوان دِیْتاشیت (Data Sheet یا Datasheet) وجود داره و معمولاً مراجعه به همون یه‌دونه داکیومنت، کافیه. اما وقتی وارد دنیای ARM بشید، با تعداد زیاد و حجیمی داکیومنت مواجه می‌شین. دیگه خبری از یه تک‌داکیومنت دیتاشیت نیست. گاهی برای پیدا کردن اطلاعات مورد نیاز خودتون، باید مثلاً ۳تا داکیومنت رو بررسی کنید.

نترسید!

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

یه نکته‌ای که، به‌خصوص در مورد داکیومنت‌های حجیم، باید بهش توجه بشه اینه که وقتی شما با یه قطعه‌ی خاص سروکار دارید (مثلاً می‌دونید که الآن دارید از میکروکنترلر STM32F030K6T6 استفاده می‌کنید)، حجم واقعی و مفید داکیومنت برای شما، به‌شدت کاهش پیدا می‌کنه؛ یکی از دلایل اصلی این قضیه هم اینه که این داکیومنت‌ها، صرفاً مربوط به یه قطعه‌ی خاص نیستن و بلکه یک خانواده‌ی کامل از میکروکنترلرها رو توصیف می‌کنن. قطعه‌ی شما ممکنه USB نداشته باشه، ولی داخل داکیومنت، یه فصل کامل ۳۰ صفحه‌ای درباره‌ی این پریفرال اومده که شما هیچ نیازی بهش ندارید. خیلی از شکل‌ها و جدول‌های داکیومنت، برای اعضای متفاوت خانواده تکرار شده، ولی خب شما فقط به اون شکل یا جدولی مراجعه می‌کنید که درباره‌ی میکروکنترلر خودتون هست. جملات و توضیحات خیلی زیادی ممکنه وجود داشته باشه که اصلاً ربطی به میکروکنترلر شما نداره. به‌همین خاطر، حجم واقعی داکیومنت برای شما خیلی‌خیلی کمتر می‌شه. به‌علاوه، شما که قاعدتاً نیازی ندارین که یهو با جزئیات کامل تمامی پریفرال‌ها آشنا بشید که! بلکه این آشنایی شما به‌صورت یه روال هست که به مرور زمان اتفاق می‌افته.

خلاصه اینکه: نترسید!

در ادامه‌ی این مقاله، یه مروری بر داکیومنت‌های میکروکنترلر STM32F030K6T6 داریم.

داکیومنت دیتاشیت (Datasheet)

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

در بخش ۲ با عنوان Description، جدولی وجود داره که می‌تونه به شما کمک کنه تا ببینید که میکروکنترلر شما چه امکاناتی رو داره و مثلاً چه مقدار فلش و رم داره یا از چه پروتکل‌های ارتباطی‌ای پشتیبانی می‌کنه.

در بخش ۳ با عنوان Functional overview، علاوه بر آشنایی مقدماتی با بخش‌های مختلف میکروکنترلر و پریفرال‌هاش، می‌تونید به‌صورت خیلی دقیق‌تر، وجود یا عدم وجود پریفرال‌ها و امکانات اون‌ها رو در میکروکنترلر خاص خودتون بررسی کنید؛ مثلاً اگر از بخش ۲ متوجه شده باشید که میکروکنترلر شما ۵تا تایمر داره، حالا داخل بخش ۳، می‌تونید بررسی کنید که هر کدوم از اون تایمرها، چه ویژگی‌هایی دارن.

بخش ۴ با عنوان Pinouts and pin descriptions، اطلاعات حیاتی درباره‌ی پین‌های میکروکنترلر به شما ارائه می‌ده. اول، با توجه به پکیج IC خودتون، می‌تونید که جای دقیق پایه‌ها رو ببینید. بعد از اون، دوتا جدول وجود داره که اطلاعات خیلی مهمی درباره‌ی تک‌تک پین‌ها داره. نوع پین و ولتاژ قابل‌تحمل پین، اطلاعاتی خیلی حیاتی هستن که شوخی‌بردار هم نیستن. در جدول دوم، می‌تونید ببینید که هر پین، علاوه بر کارکرد اصلی خودش، چه کارکردهای دیگه‌ای هم ممکنه که بتونه داشته باشه. این کارکردهای دیگه، Alternate functions هستن و در ادامه‌ی این بخش، جداولی وجود داره که لیست دقیق Alternate functionها رو برای هر پورت آورده. وقتی که بخواین از یه پریفرالی مثل USART استفاده بکنید، دونستن این اطلاعات ضروری هست.

در بخش ۵ با عنوان Memory mapping، یه شکل کلی از فضای آدرس این خونواده از میکروکنترلرها رو می‌بینید و بعد از اون، جدولی وجود داره که آدرس‌های مربوط به تمامی پریفرال‌ها رو مشخص می‌کنه. دونستن این اطلاعات، برای نوشتن linker scriptها و محاسبه‌ی آدرس رجیسترها، ضروریه.

بخش ۶ هم که عنوانش Electrical characteristics هست، اصلاً شوخی بردار نیست. این بخش برای طراحی سخت‌افزاری قطعاً حیاتیه؛ ولی حتی اگه نگاه شما بیشتر نرم‌افزاری باشه، باز هم باید حواستون رو جمع کنید و از اطلاعات این بخش، غافل نشید. در این بخش، مثلاً می‌تونید ببینید که میکروکنترلر شما باید در چه ولتاژی کار کنه و چه ولتاژی رو می‌شه روی پین‌های مختلفش قرار داد. آیا وصل کردن اون ماجولی که دیروز خریدید، به پین‌های مدنظرتون ممکن هست یا نه؟ حد و حدود جریانی که می‌شه از پین‌ها گرفت (یا واردشون کرد) چقدره؟ پین‌ها رو با چه سرعتی می‌شه toggle کرد؟ فرکانس کاری ADC چقدره؟ ماجول‌های ارتباطی چه ویژگی‌هایی دارن؟ پاسخ به همه‌ی این سؤال‌ها، در این بخش قرار داره. پس دوباره تأکید می‌کنیم که حتی اگر متخصص نرم‌افزار هم باشید، به بعضی از اطلاعات این بخش نیاز واقعی دارید.

بخش ۷ که Package information باشه، حاوی اطلاعاتی هست که قاعدتاً بیشتر به درد طراحان سیستم سخت‌افزاری می‌خوره.

بخش ۸ هم با عنوان Ordering information بخش جالبیه. با استفاده از این بخش، می‌تونید متوجه بشید که اجزای مختلف اسم میکروکنترلر شما چه معنی‌ای داره و می‌تونید اعضای مختلف این خونواده رو راحت‌تر از روی اسمشون بشناسید. البته اگر قصد طراحی و تولید داشته باشید، خب جزئیات قطعه براتون اهمیت اساسی پیدا می‌کنه و اطلاعات این بخش برای سفارش قطعه به تعداد زیاد، ضروری می‌شه.

داکیومنت Reference Manual

داکیومنت Reference Manual یا RM، داکیومنت خیلی حجیم‌تری هست (با حدود ۸۰۰ صفحه، احتمالاً کلمه‌ی «کتاب» براش مناسب‌تر باشه - البته حجم زیادش شما رو نترسونه؛ به یادداشت اول این مقاله مراجعه کنید.) و بیشتر اجزای مخصوص به میکروکنترلر ما رو به‌تفصیل، معرفی و بررسی می‌کنه. اگر نگاهی به فهرست مطالب این داکیومنت بندازید، می‌بینید که هر کدوم از پریفرال‌ها فصل مخصوص به خودشون رو دارن. ممکنه بعضی از اطلاعاتی که داخل این داکیومنت هست، داخل دیتاشیت هم وجود داشته باشه؛ اما آخرش به هر دوتا داکیومنت نیاز داریم. اگر دنبال اطلاعاتی درباره‌ی یکی از پریفرال‌های مخصوص به STM32 باشید، اطلاعات رجیسترهاش رو بخواین، یا روش کار باهاش براتون سؤال باشه، بهتره RM اولین داکیومنتی باشه که بهش مراجعه می‌کنید. مطالعه‌ی چند فصل اول این داکیومنت، برای راه‌اندازی سطح پایین میکروکنترلر، ضروریه.

داکیومنت Programming Manual

داکیومنت Programming Manual یا PM، همون‌طوری که از اسمش پیداست، خیلی بیشتر درباره‌ی جنبه‌های نرم‌افزاری و محاسباتی سیستم صحبت می‌کنه. درحقیقت این داکیومنت، درباره‌ی قلب میکروکنترلر شماست: اون چیزی که باعث می‌شه شما به قطعه‌ی STM32 خودتون بگین یه میکروکنترلر ARM. تمرکز این داکیومنت، روی خود پردازنده و Core Peripheralهاست و کاری به پریفرال‌های مخصوص STM32 نداره. این داکیومنت، درباره‌ی خود پردازنده و Core Peripheralها، نحوه‌ی کارشون، و رجیسترهاشون حرف می‌زنه و Instruction Set ماشین رو (که دستورالعمل‌های سطح پایین پردازنده باشن) هم معرفی می‌کنه. اگر درباره‌ی نحوه‌ی کار CPU یا Core Peripheralها اطلاعاتی لازم دارید یا خلاصه جنبه‌ای از سیستم براتون مهم هست که مخصوص پریفرال‌های STM32 نیست و بلکه مربوط به کارکرد پردازشی سیستمه، بهتره اول از همه به این داکیومنت مراجعه کنید. خوندن بخش‌های قابل‌توجهی از این داکیومنت هم برای راه‌اندازی سطح پایین میکروکنترلر، لازمه.

داکیومنت‌های موردنیاز برای پروگْرَم کردن میکروکنترلر

این ۳تا داکیومنت قبلی، روی هم حدود ۱۰۰۰ صفحه هستن (و البته همون‌طوری که گفتیم، لزوماً نیازی به خوندن همه‌ی این ۱۰۰۰ صفحه ندارید. اگر ترسیدید، به یادداشت اول این مقاله مراجعه کنید.) و جالبه که بعد از اون ۳تا داکیومنت، هنوز هم نمی‌دونیم که خب حالا آخرش وقتی برنامه‌مون رو نوشتیم، چطوری بفرستیمش روی میکروکنترلر و خلاصه، نحوه‌ی پروگرم کردن این میکروکنترلر چجوریه… این اطلاعات، داخل Application Noteهای STM32 اومده. برای میکروکنترلر ما که حاوی یه بوت‌لودِر (Bootloader) هست، دوتا از این داکیومنت‌ها جالب توجه هستن:

  • در داکیومنت AN2606، نحوه‌ی ورود به بوت‌لودر شرح داده شده و گفته شده که بوت‌لودر، از USART1 استفاده می‌کنه. به‌علاوه، یک سری اطلاعات دیگه‌ای هم درباره‌ی بوت‌لودر ذکر شده. توجه کنید که فقط چند صفحه از این داکیومنت حدوداً ۴۰۰ صفحه‌ای، ممکنه که برای ما اهمیت داشته باشه. باز هم تأکید می‌شه که هیچ‌وقت از حجم داکیومنت‌ها نترسید.
  • داکیومنت AN3155، جزئیات پروتکل ارتباطی بوت‌لودر رو بیان می‌کنه که ممکنه بهش نیاز پیدا کنید.

داکیومنت‌های خود ARM

گاهی اوقات، ممکنه بخواین که یه شناخت عمیق‌تری نسبت به پردازنده‌ی Cortex-M0 پیدا کنید؛ پردازنده‌ای که قلب میکروکنترلر شماست، و ممکنه خیلی جاهای دیگه و داخل خیلی میکروکنترلرهای دیگه هم باهاش مواجه بشید. اگر اطلاعاتی که نیاز دارید، خاص پردازنده‌ی Cortex-M0 هست و ارتباطی به STM32 نداره، ممکنه که لازم باشه تا به داکیومنت‌هایی مراجعه کنید که توسط خود ARM منتشر می‌شن. در ادامه، یه بررسی کوتاه روی چندتا از این داکیومنت‌ها هم داریم. یه بخش خیلی خوبی که داخل داکیومنت‌های زیر وجود داره، بخش واژه‌نامه یا Glossary هست. اگر کلمه‌ی داخل اکوسیستم STM32 و ARM براتون ناآشناست، ممکنه بتونید که توضیحات خوبی رو در موردش داخل این واژه‌نامه‌ها پیدا کنید. نکته‌ی دیگه در مورد این داکیومنت‌ها، اینه که گاهی‌اوقات داخلشون داکیومنت‌های دیگه‌ای معرفی می‌شه که مربوط به یه موضوع خاص هستن. اگر تمایل داشته باشید که درباره‌ی یه موضوعی مطالعه‌ی بیشتری داشته باشید، ممکنه داکیومنت‌هایی که در متن یا بخش‌های Additional reading داکیومنت‌های زیر اومده، بتونه به شما کمک کنه.

  • داکیومنت Cortex-M0 Technical Reference Manual: این داکیومنت، یه داکیومنت سبک‌تره که شامل یک‌سری تعاریف و اطلاعات خلاصه‌تری درباره‌ی پردازنده‌ی ما هست.
  • داکیومنت Cortex-M0 Devices Generic User Guide: بیشتر مطالب این داکیومنت، مشابه مطالب داکیومنت PM هست.
  • داکیومنت ARMv6-M Architecture Reference Manual: که گاهی به‌طرز گمراه‌کننده‌ای، ازش تحت عنوان داکیومنت ARMv6-M ARM (!) یاد می‌شه، حاوی اطلاعات بسیار عمیقی هست که احتمالاً فقط زمانی بهش مراجعه می‌کنید که به اطلاعات موجود درش، «واقعاً» نیاز داشته باشید. به‌هرحال، گاهی‌اوقات ممکنه که اطلاعات لازم رو در مورد یه بیت خاص داخل یه رجیستر خاص، فقط داخل این داکیومنت پیدا کنید.

جمع‌بندی

در این مقاله، یه معرفی سطحی از داکیومنت‌های رسمی اکوسیستم STM32 و ARM داشتیم. باید توجه داشته باشیم که هرچند تعداد و حجم این داکیومنت‌ها خیلی زیادتر از معماری‌هایی مثل AVR هست، ولی عموماً نیازی به مطالعه‌ی یکجای این حجم خیلی زیاد، وجود نداره. به‌هرحال، داشتن یه آشنایی کلی با انواع داکیومنت‌هایی که منتشر شده‌اند، می‌تونه به ما کمک کنه تا اطلاعات مورد نیاز خودمون رو بهتر پیدا کنیم.