STM32F1

آموزش میکروکنترلر stm32 قسمت اول

سلام وقتتون بخیر. با آرزوی سلامتی برای شما و تمام مردمان کشور عزیزم ایران شروع میکنیم قسمت اول آموزش میکرو کنترلر stm32 رو به تدریس کردن.
دوست دارم در اولین آموزش بهتون بگم که بر حسب تجربه و با پرسوجویی که از دوستانم کردم به این نتیجه رسیدم که، نوع نوشتار در یادگیری بسیار بسیار مهم هست؛ بنابراین تصمیم گرفتم نوع نوشتار خودم رو به شکل عامیانه انتخاب کنم تا نوشتار من به صورتی نباشه که دوستان برای یک آموزش فارسی، در لغتنامه دهخدا دنبال پیدا کردن معنی لغتی که بکار بردم باشند.(گرچه شخصا بر این باورم که باید لغت آموخت اما در آموزش ها این نوع نوشتار سخت با کلمات درشت جایی نداره)

خب بدون فوت وقت میریم سراغ بخش اول قسمت اول آموزش یعنی آشنایی مختصر با پردازنده arm که همین اول میگم وقت زیادی صرف این موضوع نمیکنم و سریع ازش گذر میکنم.

آشنایی مختصر با پردازنده arm:
ARM نوعی از معماری پردازنده‌های کامپیوتری هست که بر طبق طراحی RISC CPU و توسط کمپانی بریتانیایی ARM Holding طراحی شده‌. این معماری دستورالعمل‌های ۳۲ بیتی را پردازش می‌کنه و از دهه ۱۹۸۰ تا به امروز در حال توسعه هست. (خودم از اینجور اطلاعات زیاد لذت نمیبرم اما بدونید با چی دارید کار میکنید بد نیست)
ARM مخفف Advanced RISC Machine هست. از اونجایی که این معماری براساس طراحی RISC بنا شده، هسته اصلی CPU نیاز به ۳۵ هزار ترانزیستور داره و این در حالی هست که پردازنده‌های معمولی رایج x86 که براساس CISC طراحی شده‌ حداقل نیاز به میلیون‌ها ترانزیستور دارن. مهمترین دلیل مصرف بسیار پایین انرژی در پردازنده‌های مبتنی بر ARM که باعث استفاده بسیار بالای اونها در ابزارهایی مثل تلفن هوشمند یا تبلت شده نیز همین موضوع می باشد. جالبه بدونید که 98 درصد از تلفن های هوشمند در ساختارشون از این پردازنده استفاده میکنن.

RISC هم مخفف Reduced Instruction Set Computing یا مجموعه دستورهای ساده شده هست در واقع نوعی از طراحی CPU هستش که پایه و اساس اون، ساده‌ سازی دستورها است که منجر به بازدهی بالا و سرعت بخشیدن به اجرای دستورها میشه. به پردازنده هایی که با این معماری ساخته میشن RISC میگن. اما طراحی دیگری با نام CISC وجود داره که مخفف Complex Instruction Set Computing یا مجموعه دستورهای پیچیده است و معماری x86 اینتل بر این اساس طراحی شده و پردازنده کامپیوترهای رومیزی و لپ‌تاپ‌ها و بسیاری از ابزارهای دیگه از اون استفاده میکنن.( ما هم در دانشکاه با این پردازنده ها آشنا شدیم که من زیاد برام جالب نبود البته فقط در حد آشنایی بوده)

بنظرم آشنایی با پردازنده ARM کافی باشه و بریم سراغ آشنایی با میکروکنترلر STM32 البته قبلش عکسی رو قرار میدم که انواع پردازنده های ARM رو شامل میشه.

ARM Architecture Types
انواع پردازنده های ARM

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

پردازنده CORTEX-M3 یکی از پردازنده های با کارایی بالاست که 32 هست و برای اهداف تجاری طراحی شده. میکرو کنترلر STM32F10X هم بر مبنای هسته 32 بیتی CORTEX-M3 توسط کمپانی ST طراحی شده که تو جلسه بعد بهتون میگم که ما با چه بردی میخوایم کار کنیم.

میکرو کنترلری که میخوایم باهاش کار کنیم STM32F103RBT6 نام داره که با امکانات اون کمی آشنا میشیم و بعدش میریم سراغ روش های برنامه نویسی این میکرو کنترلر.

1- فرکانس کاری این میکرو 72 مگاهرتز هست که با اورکلاک کردن تا 100 مگاهرتر هم میرسه.
2- 128 یا 64 کیلوبایت حافظه FLASH
3- 20 کیلوبایت SRAM
4- ADC یا همون مبدل آنالوگ به دیجیتال 12 بیتی
5- DMA برای اشغال نشدن CPU هنگام کار کردن: تایمر ها، مبدل های آنالوگ به دیجیتال، SPIs ،I2Cs USARTs
6- تا 80 پین ورودی و خروجی
7- 3 تایمر 16 بیتی همه منظوره هر کدوم تا چهار OC/PWM  یا شمارنده پالس یا ورودی انکودر
8- تایمر 16 بیتی برای راه اندازی موتور همراه با سیستم ترمز سریع موتور (FAST STOP)
9- 2 تا WATCH DOG مستقل از CPU  و دیگر قسمت ها
10- یک تایمر 24 بیتی downcounter به منظور system tick
و … که توی بلوک دیاگرام زیر میتونید بقیه امکانات رو خودتون مشاهده کنید؛ همچنین تو برگه دیتاشیت اطلاعات کامل تری وجود داره.

Circuit Diagram
بلوک دیاگرام میکرو کنترلر STM32F103RBT6

بحث شیرین نحوه برنامه نویسی برای این میکرو کنترلر ها:
برای اینکه بتونیم این میکرو کنترلر رو راه اندازی کنیم میتونیم به چند روش براش برنامه بنویسیم که اونها رو مختصر توضیح میدم منتها باید قبلش با چند مورد از IDE ها یا همون کامپایلر هایی که میشه باهاشون برای STM32 برنامه نوشت رو بهتون فقط و فقط معرفی کنم و بگم ما از کدوم مورد استفاده میکنیم.

  1. IAR
  • برنامه‌نویسی به زبان‌های C و ++C و اسمبلی
  • پشتیبانی از تمام میکروکنترلرهای ARM
  • امکان شبیه‌سازی برنامه نوشته شده
  • سرعت اجرای بالا
  • داشتن توابع کتابخانه‌ای کم
  • دارای منابع آموزشی متوسط
  • محیط حرفه‌ای و استفاده از ویرایش‌گر قوی

2. WinARM

  • برنامه‌نویسی به زبان‌های C و ++C
  • پشتیبانی از میکروکنترلرهایی که از ARM7 استفاده می‌کنند.
  • عدم شبیه‌سازی برنامه نوشته شده
  • متن‌باز بودن نرم‌افزار
  • داشتن توابع کتابخانه‌ای زیاد
  • دارای منابع آموزشی متوسط
  • محیط حرفه‌ای و استفاده از ویرایش‌گر قوی

3. KEIL

  • برنامه‌نویسی به زبان‌های C و ++C و اسمبلی
  • پشتیبانی از تمام میکروکنترلرهای ARM
  • امکان شبیه‌سازی برنامه نوشته شده
  • محیط حرفه‌ای و استفاده از ویرایش‌گر قوی
  • دارای منابع آموزشی متوسط
  • یادگیری سریع نرم‌افزار

اما کامپایلری که ما میخوایم ازش استفاده کنیم کیل هستش همین مورد آخر که توضیحات هم کنارش خورده

روشهای مختلف برنامه نویسی میکروکنترلر STM32:

  1. رجیستری
  2. CMSIS
  3. SPL
  4. HAL
  5. شاید روشهای دیگری وجود داشته باشه که من ندونم اگه شما اطلاعاتی در اینباره دارید برای ما زیر همین آموزش کامنت کنید.

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

CMSIS هم یکسری اسم است که بر روی آدرس رجیسترهای میکرو گذاشته‌شده تا ما بتوانیم راحت‌تر با این رجیسترها کارکنیم.

اما دو مورد آخر SPL یا Standard Peripheral Library و HAL یا Hardware Abstraction Layer که از لحاظ کلی شبیه به هم هستن؛ هردو از توابع های مختلف برای اسفاده از قسمت های میکروکنترلر تشکیل شده اند. جالبه بدونید که توابع HAL و SPL از کتابخانه CMSIS بحره میبرن.

SPL قدیمی تر از HAL هست و هردو توسط کمپانی ST توسعه داده شدن اما پیشنهاد خود ST بر این بوده که از توابع HAL استفاده کنیم؛ ما هم از این توابع در آموزشهامون استفاده میکنیم. کمپانی ST نرم افزار CUBEMX رو ساخت تا ما بتونیم به راحتی از توابع HAL استفاده کنیم.

میشه گفت تقریبا CUBEMX یک کد ویزارد برای تولید و پیکربندی توابع HAL برای کامپایلر مورد نظر خودمون هست.

بعد از اینکه موضوعات بالا رو بهتون گفتم حالا باید نوع پروگرامر خودتون رو انتخاب کنید.(فرض میکنم میدونید پروگرامر چیه)

دو مورد از پروگرامر هایی که بیشتر مطرح هستن و میتونید به راحتی ازشون استفاده کنید:

  • STLINK
  • JLINK

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

1. STLINK

این پروگرامر ساخت شرکت ST هست و فقط برای میکروکنترلر های STM32 و STM8 ساخته شده و ما از این پروگرامر استفاده میکنیم.

2. JLINK

این پروگرامر برای میکروکنترلر های ARM ساخته شده و من این پروگرامر رو هم دارم اما هم قیمتش بالاتر هستش و اینکه چون ما در ایران هستیم، از نسخه اصلی پروگرامر استفاده نمیکنیم؛ برای همین باید فریمور این پروگرامر بعد از مدتی تعویض بشه که این خود یه نوع ضعف محسوب میشه تو ایران.

در نهایت برای استفاده از این سری آموزش ها STM32 یکسری نرم افزار و دانش برنامه نویسی زبان C نیازه که لیست نرم افزار ها رو براتون قزار میدم.(دانش برنامه نویسی به زبان C رو هم به خودتون میسپارم اما در طی آموزش سعی میکنم به نکاتی در زبان C بپردازم)

  1. KEIL
  2. STM32 CUBEMX
  3. ST-LINK Utility

امکان بارگذاری فایل ها تو سایت برای من وجود داره به دلیل فضای کم هاست اما لینک ساین هایی که میتونید از اونجا فایل ها رو دریافت کنید براتون قرار دادم. آموزش نصب کردن نرم افزار هم با یه سرچ کوچیک میتونید پیدا کنید.

شما میتونید سوالات خودتون رو در گروه تلگرامی کدنیک که لینکش تو کانال وجود داره مطرح کنید.

برچسب ها
نمایش بیشتر

sahandrjb

دانشجوی الکترونیک دانشگاه چمران رشت، مدیر و بنیانگذار مجموعه کدنیک. تجربه تدریس برنامه نویسی برای میکروکنترلر ها مشتاق برای یادگیری، آماده برای تدریس.

‫۱۴ نظرها

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

    1. ممنون از نظرت در حین آموزش رجیستری هم کمی آموزش میدم منتها برای مطالعه بیشتر لینک آموزش سیسوگ رو گذاشتم در مورد ویدیو آموزشی هم به فکر هستم منتها فعلا یه سری مشکلات هست که ان شالله اگه رفع بشه بعد از این آموزش، آموزش ویدیویی هم تهیه و بارگذاری میکنم.

  2. سلام. من تو تلگرام هم عضو گروه کدنیک هستم و هم عضو کانالش
    قبلا تجربه تهیه آموزش داشتم و میدونم که چقدر کار سخت و زمان بری هست که ازتون تشکر میکنم. دوم اینکه کارتون خیلی ارزشمند هست که دانسته هاتون رو بدون چشم داشت با بقیه به اشتراک میگذارید و همچنین این کار دل بزرگی هم میخواد که هرکسی نداره.
    خلاصه دمتون گرم
    اگر در تهیه آموزش ها حالا هر آموزشی کمکی نیاز بود یک جایی تو سایت یا گروه و کانال اعلام کنید که کاری از دستم براومد انجام بدم. ممنون

  3. با سلام راستش استوری شمارو توی اینستا گرام دیدم و خوشحالم که تونستید این مطالب اموزشی رو تهیه کنید و در نهایت باز ازتون تشکر میکنم .میدونم که چقدر سخت و زمان بره اینجور مطالب اموزشی رو تهیه کردن اما اگه واقعا زمان انجام چنین کاری رو دارین در هر صورت هم براتون خوشحالم و هم ازتون تشکر میکنم .خیلی خوب بود به شخصه چندین مدته که میخواستم شرو کنم به یاد گیریش اما چون برنامه نویسی رو خیلی وقته گذاشتم کنار و فقط با طراحی pcbسرو کار دارم اونم نه در حد حرفه ای نتونسته بودم ادامه بدم یادگیریمو .انشاا..که بتونم هم زمان با شما شرروع کنم.یعنی در واقع شما استارت منو زدین تا برم به سمت یادگیری .خیلی هم ممنونم .حداقل زکات علمتون به نتیجه رسید .قربانت خسته نباشی.بازم منتظرم.لینک سایتتم پین میکنم تا مطلبی اومد ببینم .روز خوش

دیدگاهتان را بنویسید

دکمه بازگشت به بالا
بستن
بستن