همانطور که میدانید میکروکنترلرها یا پردازندههای ARM (تفاوت میکروکنترلر و پردازنده در ادامه ذکر خواهد شد، فعلاً این دو را معادل هم در نظر بگیرید) امروزه بیشترین استفاده را در بین سایر میکروکنترلرها، حداقل در کشور ما دارد. ما هم از همین رو بر آن شدیم تا یک مجموعه آموزشی کاربردی برای این دسته از میکروکنترلرها را گردآوری و منتشر کنیم.
ARM (Advanced RISC Machine)
ARM درواقع اسم یک شرکت و همینطور اسم یک نوع معماری است که تنها به طراحی پردازنده با معماری خاص خود میپردازد اما خود تولیدکننده یا فروشنده هیچ نوع پردازنده یا میکروکنترلری نیست و تنها مجوز پردازندههایی که طراحی کرده است را به سایر شرکتها میفروشد.
در این مقاله چندین شرکتی که این معماری را از شرکت ARM خریداری میکنند معرفی و درنهایت میکروکنترلر یکی از این شرکتها را برای ادامهی کار انتخاب خواهیم کرد.
انواع پردازندههای ARM
پردازندههای نسل جدید (نه همهی پردازندهها) شرکت ARM بهصورت کلی به سه خانواده برای ردههای کاری مختلف تقسیم میشود. البته اگر وارد جزئیات این سه دسته بشویم، خود شامل چندین زیرشاخه میشوند و انواع مختلفی از پردازندهها را شامل میشود. اجازه بدهید قبل از اینکه به سه دسته پردازنده مذکور بپردازیم، ابتدا تفاوت میکروکنترلر و پردازنده را بیان کنیم تا در ادامهی راه سردرگم نشوید.
تقریبا میتوان گفت که پردازنده همان CPU است، اما میکروکنترلر علاوه بر CPU، شامل حافظهها، پورتها، مبدلها، تایمرها، پروتکلهای ارتباطی و … نیز میشود.
حقیقت این است که پردازندههایی که شرکت ARM طراحی میکند و امتیاز آن را به سایر شرکتها میفروشد فقط یک CPU تنها نیست و کمی بیش از یک CPU درون این پردازندهها قرار دارد. اکنون جهت جلوگیری از سردرگمی شما از پرداختن به اینکه پردازنده ARM دقیقاً شامل چه چیزهایی است، صرفنظر میکنیم و این موضوع را به آینده موکول میکنیم. پس نتیجه میگیریم که پردازندههای شرکت ARM یک چیزی بین میکروکنترلر و CPU هستند.
و اما به بحث اصلی یعنی انواع خانواده پردازندههای نسل جدید ARM برگردیم.
پردازندههای ARM نوع Cortex-A
این نوع پردازندهها برای اجرای سیستمعاملهایی مانند اندروید، لینوکس و … در نظر گرفتهشده است. بسیاری از گوشیهای موبایل در حال حاضر از این نوع پردازندهها استفاده میکنند.
پردازندههای ARM نوع Cortex-R
این نوع پردازندهها برای برنامههایی بلادرنگ و حساس به ایمنی بهینهسازی شده است، بهعنوانمثال برای استفاده در خودروها یا جاهایی که نیاز به تصمیمگیری خیلی حساس باشد این نوع پردازندهها مورداستفاده قرار میگیرند.
پردازندههای ARM نوع Cortex-M
این نوع پردازندهها برای کاربردهای میکروکنترلری کمهزینه و کممصرف طراحیشده است که در دهها میلیارد دستگاه نهفته بهکار میرود. احتمالاً با توجه به کاربردها حدس زده باشید که تمرکز ما بر روی میکروکنترلرهای نوع Cortex-M خواهد بود.
بله تمرکز ما در این دورهی آموزشی بر روی این نوع پردازندهها یعنی پردازندههای نوع Cortex_M خواهد بود و درنهایت با واحدهای جانبی این نوع پردازندهها آشنا خواهیم شد و برای قسمتهای مختلف میکروکنترلرهای مبتنی بر این نوع پردازنده برنامهنویسی خواهیم کرد. اجازه بدهید کمی به معرفی پردازندهی Cortex-M بپردازیم و با انواع و جزئیات آن بیشتر آشنا شویم.
تا به امروز 10 نوع پردازندهی Cortex-M طراحیشده است که در جداول زیر امکانات آنها قابلمشاهده است:
در دو تصویر بالا امکانات انواع پردازندههای Cortex-M باهم مقایسه شده است، اگر شما اکنون با بسیاری از موارد مقایسه شده در بالا آشنا نیستید، اشکال ندارد و در طول زمان یادگیری با هر یک از آنها آشنا خواهید شد. اکنون فقط یک نگاه کلی به آنها بیندازید و رد شوید.
شرکتهای استفادهکننده از پردازندههای ARM
شرکتهای TI ،NXP ،ATMEL و ST ازجمله معروفترین شرکتهایی هستند که پردازندههای طراحیشده توسط شرکت ARM را خریداری میکنند و این پردازندهها را در میکروکنترلرهایی که خودشان طراحی میکنند بهکار میگیرند. پس خود این شرکتهای مذکور در طراحی پردازنده دخیل نیستند و فقط پردازندهها را میخرند و در کنار این پردازندهها، حافظهها، پورتها، مبدلها، تایمرها، پروتکلهای ارتباطی و … را قرار میدهند تا میکروکنترلر ساخته شود.
اما ما از کدامیک از میکروکنترلرهای شرکتهای بالا استفاده خواهیم کرد؟
ازآنجهت که میکروکنترلرهای شرکت ST در حال حاضر در کشور ما استفاده بیشتری دارند و بهوفور یافت میشوند و همینطور ابزارهای گستردهای که شرکت ST برای کار راحتتر با میکروکنترلرهای خودش در دسترس ما قرار داده است، ما از میکروکنترلرهای این شرکت استفاده خواهیم کرد. شرکت ST دو دسته میکروکنترلر STM8 که 8 بیتی هستند و STM32 که 32 بیتی هستند دارد، توجه کنید که میکروکنترلرهای STM8 ربطی به معماری ARM ندارند و فقط مربوط به شرکت ST است، ما هم با این دسته کاری نداریم.
اما آن دسته از میکروکنترلرهای که مدنظر ما هستند میروکنترلرهای STM32 هستند. عدد 32 هم مربوط به 32 بیتی بودن آنهاست. در نظر داشته باشید که میکروکنترلرهای ARM برخلاف AVR و سایر میکروکنترلرهای 8 یا 16 بیتی، 32 بیتی هستند.
پس تا اینجا متوجه شدیم که قرار است از پردازندههای Cortex_M شرکت ARM که در میکروکنترلرهای STM32 شرکت ST بهکاررفته است، استفاده بکنیم.
اجازه بدهید در ادامه به معرفی میکروکنترلرهای STM32 شرکت ST بپردازیم و درنهایت با یک جمعبندی این مقاله را بهپایان برسانیم.
انواع میکروکنترلرهای STM32
ابتدا به شکل زیر دقت کنید:
همانطور که از تصویر بالا مشخص است محور عمودی، مربوط به دستهبندی پردازندههای Cortex-M شرکت ARM و محور افقی مربوط به دستهبندی میکروکنترلرهای STM32 شرکت ST است. محور افقی که مربوط به پردازندههای Cortex-M میباشد راکمی قبلتر بررسی کردیم. اکنون میخواهیم محور عمودی که مربوط به دستهبندی شرکت ST میشود را بررسی کنیم و بگوییم که هر دسته برای چه کاربردهایی مناسب است.
سری Wireless عمدتاً برای کاربردهایی مثل IOT یا همان اینترنت اشیا بهکار میرود.
سری Ultra-low-power به دلیل مصرف کم توان برای دستگاههایی که با باتری کار میکنند بسیار مناسب است.
سری Mainstream کاربردهای عمومی دارد و غالباً در پروژههایی که از نظر مصرف توان، قدرت پردازشی و حافظهی زیاد محدودیتی ندارند مورد استفاده قرار میگیرد.
سری High performance پرقدرتترین میکروکنترلرهای شرکت ST هستند. این دسته از میکروکنترلرها قدرت پردازشی بیشتری نسبت به سریهای دیگر دارند و برای کارهایی پردازشی و کارهایی که نیاز بهسرعت بالایی دارند بسیار مناسب هستند.
خب در این مقاله بااینکه ARM چیست و چه پردازندههای دارد، و همینطور انواع میکروکنترلرهای مبتنی بر این نوع پردازندهها به خوبی آشنا شدیم و مشخص کردیم که در ادامهی راه قرار است با چه میکروکنترلری کار بکنیم.
فعلا تا همین جا کافی است، در قسمت دوم با ابزارها و نحوهی پیکرهبندی میکروکنترلرهای STM32 آشنا میشویم.
سلام
ممنون از مطالب مفیدی که نشر میدین
عبارات عمودی و افقی جابجا بکار برده شدن لطفا متن ویرایش بشه
سلام دوست عزیز
ممنونم برای نکته سنجی شما
اصلاح شد 🙂
سلام من تازه با برد اردینو سی آشنا شدم که ب مقاله شما برخورد کردم اگر ممکنه در مقام مقایسه یه توضیح بدید و اینکه اگر برای شروع جهت پیکربندی و برنامه نویسی آن نیاز ب یک پشتیبان قوی باشه چه کانالی رو پیشنهاد میکنید ممنون
سلام مهران جان. خب شما هدفتون رو نگفتید که میخواهید با آردوینو چکار کنید که من بهتر بتونم شما رو راهنمایی کنم. در کل خب توصیه نمیشه که اگه میخواهید به جای مناسبی در الکترونیک برسید رو همین آردوینو بمونید. به هر حال شما برا آردوینو کدهای خیلی زیادی در سطح اینترنت برای دیوایسهای مختلف میتونید پیدا کنید و فرومهای زیادی هم هست که به سوالات جواب میدن.
یه پیشنهاد خوب که دارم اینه که یه رفرنس انگلیسی هست به نام Beyond the Arduino که کتاب فارسی فراتر از آردوینو تالیف دکتر بوستان برگرفته از همین رفرنس شما میتونید از همین کتاب استفاده کنید که یکی از بهترین رفرنسها در زمینه آردوینو هست.
ایده این کتاب این بوده که ما وقتی داریم از آردوینو استفاده میکنیم به یه سری قابلیتها دسترسی کامل نداریم. راهحلش برا حل این مشکل هم اینه که ما فقط از محیط و قابلیت سختافزاری آردوینو که یه برد آماده داره و نیاز به پروگرامر هم نداره استفاده بکنیم. اما در اون محیط، کدهای AVR رو به کار بگیریم تا هم به قابلیتهای بیشتری از میکروکنترلر دسترسی داشته باشیم و هم اون انعطاف لازم رو بتونیم اجرا کنیم.
سلام مهندس جلیلی خسته نباشین ببخشید امکانش هست با خود شما حالا از طریق تلگرام واتس آپ یا … ارتباط بگیرم چون یه سوال داشتم از شما .ممنون
سلام مهندس جان. البته که ممکن است، اما بنده الان در حال دست و پنجه نرم کردن با کرونا هستم و با عرض پوزش از شما متاسفانه نمیتونم صحبت یا چت خیلی طولانی داشته باشم. شما اگر سوالی دارید همینجا بپرسید حتما میام و جواب میدم.
اگه نیاز بود و عمری باقی بود بعدا حتما به صورت خصوصی در واتساپ یا تلگرام با شما صحبت خواهم کرد. بازم ببخشید بابت اینکه نتونستم خصوصی جواب بدم.
سلام مهندس
مطلب جالب و خوبی بود ممنون!
یه سوال هم داشتم.راجع به LL منظورتون رو متوجه نشدم؟اگه اونطور که حدس زدم میخواید برنامه نویسی سطح پایین این میکروها رو بگید تا چه حد سطح پایین؟اسمبلی طور؟
سلام سعید جان. سپاس از نظر مثبت و لطفی که به ما دارید.
ببینید LL یه کتابخونه است که با زبان C نوشته شده است نه اسمبلی، پس ما قصد داریم که با سطح پایینترین کتابخونهای که برای این دسته از میکروکنترلرها وجود داره برنامه بنویسیم (کتابخونه LL سطحپایینتر از کتابخونه HAL که احتمالا برایتان آشنا باشد، است و هر دو نیز به زبان C نوشته شدهاند).
برای این دسته از میکروکنترلرها تا به حال هیچ کتابخونهای به زبان اسمبلی ارائه نشده است.
همچنین در نظر داشته باشید که این پردازندهها برای زبان C هم بهینه شدهاند و به طور کامل از این زبان پشتیبانی میکنند، پس اگر زمان توسعهی کد را هم در نظر بگیریم (با زبان اسمبلی توسعهی کد بسیار زمانبر است) زبان Cمیتونه انتخاب بهتری باشه.
سلام
خیلی خوب بود
ممنون
فقط کاش مثل بعضی دیگر از سری آموزشها ناقص و نا تموم نمونه
درود بر شما دوست عزیز. سپاس از نظر مثبت شما.
خیر، این مجموعه تمامی قسمتهایش از قبل مشخص شده است و فقط باید نگارش و در نهایت منتشر گردد.
ممنون از مطالب آموزنده شما و زحمتی که می کشید
سپاس از نظر مثبت شما امید جان.