ARM, STM32, توصیه شده, مقاله

آموزش میکروکنترلر STM32 و نرم افزار CubeMx (قسمت اول)

آموزش میکروکنترلر STM32 ARM

سلام دوستان به امید خدا به واسطه سیسوگ سعی داریم به آموزش کاربردی میکروکنترلر های سری STM32 داری هسته پردازنده ARM ؛ در محیط نرم افزارهای CubeMx و keil بپردازیم.

ابتدا باید بیان کنم که، وقتی من بعد از مدتی برای انجام یک سری پروژه نسبتاً سنگین و پیچیده از میکروهای STM32 خصوصاً خانواده های CORTEXM0 , M3 و محیط CUBEMX استفاده کردم ، توانستم تجربیات تقریباً زیادی در چگونگی کار کردن با ادوات مختلف این میکروکنترلر ها و چگونگی برنامه نویسی با استفاده از کتابخانه HAL بدون اینکه برنامه بعد از مدتی هنگ کند بدست بیاورم. لازم دیدم  این تجربیات را از طریق سیسوگ در اختیار علاقمندان الکترونیک قرار دهم.

یکی از دلایلی که ما سعی می‌کنیم تأکید زیادی روی سری Cortex-M3 و Cortex-M0 داشته باشیم این هست که وقتی شما دوستان وارد بازار کار تولید مدارات میکروکنترولر ی می‌شوید قیمت قطعات اولویت ها را تعیین می‌کند، به عنوان مثال میکروکنترلر STM32F030F4P6 را با حدود قیمت 3000 تومان (در هنگام نگارش این مقاله) و میکروکنترلر STM32F030C8T6 را با قیمت حدود 5000 تومان(در هنگام نگارش این مقاله) و همچنین میکرو STM32F103C8T6 را با قیمت حدود 7000 تومان(در هنگام نگارش این مقاله) می توانید تهیه کنید؛ چنین قیمت های برای یک پردازنده قدرتمند 32 بیتی ARM واقعا اقتصادی است که البته خیلی به نسبت میکروکنترلرهای 8 بیتی AVR  و PIC  مناسب‌تر بشمار می‌آیند. البته این نکته ناگفته نماند که آموزش بعضی قسمتها تنها به خانواده Ccortex-M4 به بالا اختصاص خواهد داشت. معمولا پردازنده های ARM ، از توان مصرفی پایینی برخوردار هستند که آنها را بسیار پر کاربرد کرده است مخصوصا در دستگاه های همراه.

اغلب گوشی های موبایل امروزه از پردازه ARM استفاده می‌کنند، معمولا پردازنده ARM به صورت هسته ارائه می شود و شرکت های تولید کننده Chip آنها را به صورت پردازنده و میکروکنترلر ارائه می کنند ، شرکت ST نیز از این قائده جدا نیست دست به تولید میکروکنترلرهای بسیار اقتصادی با هسته ARM کرده است.

در این سری از آموزش ها سعی می‌کنیم تا جایی که ممکن است از دستورات کتابخانه HAL ، برای بالا رفتن کیفیت کد(سرعت اجرا و حجم مورد استفاده) استفاده نکنیم و همچنین با نقطه ضعف های این کتابخانه و طریقه برطرف کردن آن آشنا شویم. در کنار آن شیوه برنامه نویسی بهینه را آموزش دهیم همچنین تلاش می‌کنیم تا آنجا که امکان دارد تمام قسمت های cubemx و میکروکنترلر را آموزش دهیم بدین منظور از قسمت های ساده مثل GPIO و وقفه خارجی شروع می‌کنیم تا آموزش‌های رابط های سریال مثل UART و I2C و SPI و بخصوص قسمت های پیشرفته‌تر مثل رابط سریال CAN و رابط USB در مدهای مختلف و البته مقداری هم آموزش ارتباط رابط USB بخصوص در مد HID با نرم افزار ویژوال استودیو.

همچنین در ادامه رابط اترنت و قسمت های مختلف تایمرها و کار با مبدل آنالوگ به دیجیتال و دیجیتال به آنالوگ و کار با حافظه های جانبی و خیلی قسمت های دیگر میکروکنترولر را توضیح می‌دهیم.

و برای کامل تر شدن آموزش به بررسی سیستم عامل FreeRtos  و چگونگی راه اندازی آن از طریق نرم افزار cubemx خواهیم پرداخت. فقط توجه داشته باشید که خیلی از قسمت های میکروکنترلر مثل رابط های سریال مدهای مختلفی برای راه اندازی دارند که آموزش آنها را طولانی می‌کند و ممکن است تمام جزئیات یک قسمت از میکرو را نتوان در یک سری آموزشی ارائه کرد که به مرور در قسمت های جداگانه به آنها خواهیم برداخت. نکته مهم اینکه ممکن است خیلی نکته‌ها در مورد برنامه نویسی و تنظیمات در آموزش‌ها ذکر شود که بدلیل جلوگیری از اتلاف وقت در آموزش‌های بعد بیان نگردد به همین علت لازم است گام به گام همراه با سیسوگ آموزش ها را دنبال کنید.

 

شروع آموزش میکروکنترلر STM32 و GPIO

آموزش را با رابط GPIO شروع می‌کنیم. در این آموزش تصمیم داریم از میکروکنترلر STM32 F 103C8T6 استفاده کنیم. از آنجا که سری‌های Cortex-M0 ,  Cortex-M3 مشابه هستند آنها را به صورت جداگانه بررسی نمی‌کنیم.

طبق تصویر زیر نرم افزار CubeMX را باز میکنیم و سپس گزینه NEW PROJECT را انتخاب می‌کنیم و سپس از آن لیست میکروکنترلر مورد نظرمان را انتخاب می‌کنیم:

 

محیط نرم افزار CubeMx برای میکروکنترلر STM32

 

 

انتخاب میکروکنترلر STM32 در نرم افزار CubeMX

 

بعد از انتخاب میکروکنترلر صفحه زیر به نمایش در می‌آید:

محیط ویرایش میکروکنترلر ARM در نرم افزار CubeMX

 

که قسمت سمت چپ “محل انتخاب و ویرایش پرفال‌های میکروکنترلر” و سمت راست  “محل ویرایش و انتخاب عملکرد پایه های میکروکنترلر” است.

اولین کاری که باید انجام دهیم مشخص کردن کلاک STM32 است. در زبانه Pinout گزینه RCC را انتخاب می‌کنیم توجه داشته باشید در حالت عادی تنظیمات کلاک میکروکنترلر روی گزینه HSI یا همان کلاک سریع داخلی با فرکانس 8 مگاهرتز تنظیم شده است ما در این پروژه می‌خواهیم از کریستال خارجی استفاده کنیم بنابراین طبق تصویر زیر گزینه Crystal را انتخاب می‌کنیم:

 

حال به صفحه Clock Configuration می‌رویم تا توسط ضرب و تقسیم کننده‌ها(واحد PLL) فرکانس را روی حداکثر فرکانس این میکروکنترلر یعنی 72 مگاهرتز قرار دهیم.

Input Frequeny: محل انتخاب فرکانس کریستال خارجی

HSE:  انتخاب کلاک سریع خارجی

PLLCLK: انتخاب خروجی ضرب کننده

 

حال دوباره به صفحه Pinout برمی‌گردیم و نوع پروگرامر و دیباگر را تنظیم می‌کنیم و همچنین  تأخیر مورد استفاده در برنامه را دقیقا طبق عکس زیر تنظیم می‌کنیم:

حال پین A9 میکرو را طبق عکس زیر به خروجی  تبدیل میکنیم:

با کلیلک راست روی پین، طبق عکس های زیر  نام مستعار LED را برای آن انتخاب می‌کنیم:

 

و در ادامه پین A15 را هم به عنوان ورودی تعریف می‌کنیم و برای آن نام مستعار BUTTON را انتخاب می‌کنیم:

 

چطور می توانیم پایه ورودی پول آپ یا پول دان کنیم؟

برای اینکار باید به صفحه Configuration برویم و گزینه GPIO را طبق عکس زیر انتخاب کنیم تا صفحه مربوط به تنظیمات آن باز شود:

 

انتخاب PullUp یک پایه در CubeMx

GPIO Pull-up/Pull-down: محل انتخاب مقاومت داخلی پول آپ یا پول دان برای پین ورودی

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

  1. GPIO output level: سطح صفر یا یک بودن خروجی در هنگام پیکره بندی اولیه
  2. GPIO mode: پوش پول و یا اپن کلکتور بودن پایه خروجی
  3. Maximum output speed: حداکثر سرعت این پین
  4. برچسب این پین

در نهایت به صفحه Pinout برمی‌گردیم، حالا باید تنظیمات پایه های میکرو را به شکل زیر داشته باشیم. در این مرحله پروژه خود را ذخیره می‌کنیم:

 

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

 


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

 

نوشته های مشابه

31 دیدگاه در “آموزش میکروکنترلر STM32 و نرم افزار CubeMx (قسمت اول)

  1. S a A سیاوش گفت:

    با عرض سلام و تشکر از شروع این مبحث مهم و ارزشمند

    بنده با استفاده از STM32CubeMX 5.3.0 و KEIL 5.27.1.0 سعی در ایجاد پروژه شما کردم.
    در بخش Clock Configuration در زمان تنظین PLLMul به X9 با خطا مواجه میشوم. حداکثر ضریب ممکن X4 است که نهایت سرعت به 32 میرسد.

    البته خاطرنشان میکنم که برنامه بدون اتصال هرگونه سخت افزار و صرفاً جهت آشنایی با محیط کار می باشد.

    1. S a A سیاوش گفت:

      خودم پیداش کردم.
      شرمنده که دیر به دیر جواب میدین.
      متاسفم که مصدع اوقات شریفتون شدم.

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

        ضمنا اگر درست متوجه شده باشم فکر کنم مشکل‌تان به این موضوع بر می‌گردد که ضرائب را جوری تنظیم کردید که کلاک بخشی از میکرو از حداکثر کلاک مجاز، تجاوز کرده است.

  2. Avatar نگار گفت:

    سلام اموزشstm32.f1 میشه ورژن بزنامه های استفاده شده رو بگین برای من همkeilهم cubemx محیطش خ متفاوت هست

    1. N H N H گفت:

      سلام دوست عزیز
      از ورژن STM32CubeMX 4.26.0 استفاده شده.
      موفق باشید.

  3. Avatar علی گفت:

    سلام
    من کتابخانه nrf24l01 دارم البته با کدویژن
    خواستم اون رو تبدیل به stm کنم که بلد نیستم
    چند روزه دنبال یه کتابخانه برای stm32f0 می گردم ولی من سوادم قد نمیده
    شما یه کتابخانه در این زمینه دارید؟؟؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز میتونید از کتابخانه زیر استفاده کنید که برای stm32 نوشته شده است والبته با استفاده از توابع hal
      https://github.com/r2aiv/NRF24L01-1

  4. Avatar mahdijn گفت:

    با تشکر از اینکه حوصله به خرج می دید و جواب می دید
    من یه مشکلی توی کار با پروگرامر دارم. سری stm32f100 که به st-link وصل می کنم، یکی دو بار وصل میشه، بعد دیگه پروگرامر آی سی رو پیدا نمی کنه!
    8 تا آی سی هم حیف کردم
    این مشکل رو با stm32f051 ندارم
    ممنون می شم راهنمایی کنید

    1. زئوس Zeus زئوس Zeus گفت:

      چه پایه هایی از میکروکنترلر رو به پروگرامر متصل میکنید ؟ آیا پایه Reset رو هم متصل میکنید ؟

      1. Avatar mahdijn گفت:

        از طریق swd پروگرام کردم
        بعد از قفل شدن پایه ریست هم وصل کردم فایده نکرد
        ممکنه به خاطر فعال نکردن دیباگ توی cubemx باشه؟

        1. زئوس Zeus زئوس Zeus گفت:

          ببینید توی STM چند مرحله قفل وجود داره ؛ ولی همه اونا با اتصال پایه ریست و انتخاب حالت Connect Under Reset میتونید میکرو رو پاک کنید و از حالت قفل خارج کنید.
          از اون میتونه باشه ولی در نهایت با Erase میکرو این مشکل رو برطرف کنید.

  5. Avatar سجاد گفت:

    سلام. میخواستم کتابهایی ( انگلیسی یا فارسی ) در زمینه آموزش stm32 با hal بهم معرفی کنید.
    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      امم والا بهترین مرجعی که من الان میشناسم یوزمنوال های خود شرکت ST هست که به خوبی توضیح داده.

  6. Avatar حامد گفت:

    درود
    لطفا در مورد میکروی stm32f373 هم آموزش بذارید. چون آموزش فارسی نداره

    1. N H N H گفت:

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

  7. Avatar حامد گفت:

    سلام
    میخام کار با STM رو شروع کنم و فقط از لینوکس استفاده میکنم
    میشه بگید از چه پروگرامر و کامپایلری استفاده کنم؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام
      خوب لینوکس که حرف نداره ؛ من از GCC استفاده میکنم و فکر میکنم بهترین گزینه موجود حتی توی ویندوزم همون GCC باشه ؛ و برای پروگرامر هم میتونید از OpenOCD استفاده کنید که تقریبا تمام پروگرامرهای موجود رو پشتیبانی میکنه
      البته هم ST و j-Link نرم افزار تحت لینوکس هم دارند.
      ویرابشگر هم که Eclipse علیه سلام بهترین انتخابه 🙂

  8. Avatar علی گفت:

    سلام برای برنامه نویسی stm باید از نرم افزار cube استفاده کنیم یا keil ؟

    1. N H N H گفت:

      سلام دوست عزیز
      در واقع نرم‌افزار CubeMX ابزار کمکی ای هست که میتونین به راحتی پایه‌های GPIO و دیگر تنظیمات مثل وقفه و … را به راحتی و بدون نوشتن برنامه تنظیم کنید و سپس این تنظیمات را به نرم‌افزار Keil انتقال بدین ولی استفاده از این نرم‌افزار ضرورتی نداره بلکه فقط روال برنامه‌نویسی را راحتتر میکنه. برنامه اصلی در نرم‌افزار Keil نوشته میشه و میتونین بدون استفاده از CubeMX تمام تنظیمات را به صورت دستی کدنویسی کنید.

  9. Avatar محمود گفت:

    مرسی از مطالب خوبتون

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز

  10. Rasoul Moezi Rasoul Moezi گفت:

    سلام بسیار عالی و کامل توضیح دادید، مرسی بخاطر این دوره اموزشی??

    1. N H N H گفت:

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

  11. Avatar سید امیر گفت:

    عالی… من مدتی روی میکرو های LPC وقت گذاشتم ولی متاسفانه تنوع خیلی کمی داره و قیمت بالایی دارند.. بعد از اون با stm آشنا شدم که هم تنوع بسیاری بالایی داره و هم قیمت بسیار مناسبی داره.
    تازه دارم stm را شروع میکنم و فکر میکنم آموزش ها شما به من خیلی کمک کنه..
    متشکر

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز ، تمام سعی ما ایجاد بستر مناسب برای یادگیری الکترونیک به صورت رایگان و متن باز هست و همراهی دوستان در این مسیر باعث خوشحالی و دلگرمی ما است
      بسیار عالی – البته میکروکنترلر های NXP واقعا عالی هستند ولی بله به دلیل عدم استقبال و البته قیمت بالاتر نسبت به st با استقبال کاربر های ایرانی قرار نگرفته

  12. Avatar Amir گفت:

    سلام
    من نمیدونم چرا هر کس که این آموزش رو شروع میکنه بعدش دیگه ادامه نمیده !!!!
    همین مباحث ساده رو میگن بعد از 3-4 جلسه دیگه ادامه نمیدن !!
    سایت های این چنینی زیاده !!
    امیدوارم سایت شما اینجوری نباشه …. و مباحث مهمتری هم آموزش بده مثل ADC و اترنت و …
    ممنون از سایت خوب و باحال و جذاب سیسوگ
    و ممنون از اساتید گرامی

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود دوست عزیز
      فعلا 6 قسمت از این مقالات آماده شده که به تدریج منتشر خواهیم کرد.

  13. محمدرضا عابدینی محمد گفت:

    سلام بی صبرانه منتظر اموزش میکروکنترلرهای stm8 و stm32 هستیم ..
    در رابطه با برنامه نویسی برای میکرو کنترلرها بااستفاده از gcc/gnu هم اموزشی ترتیب بدید ممنون میشم ..
    امیدوارم همینجور پرقدرت ادامه بدید

    1. زئوس Zeus زئوس Zeus گفت:

      سعی می‌کنیم هر روز یک مطلب در خصوص این آموزش ها منتشر کنیم
      این بحث رو حتما در دستور کار قرار می‌دهیم که با استفاده از ابزار متن باز Gcc آموزش قرار دهیم.
      انشالله

  14. Avatar علی گفت:

    بسیار عالی
    در انتظار قسمت های دیگر

    1. زئوس Zeus زئوس Zeus گفت:

      متشکر دوست عزیز
      انشالله ، منتظر قسمت های هیجان انگیز دیگه باشید 🙂

پاسخی بگذارید

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