ARM, STM32, توصیه شده, دوره آموزشی 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 ببریم و کدنویسی در این محیط را آموزش دهیم. با سیسوگ همراه باشید.

 

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

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

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

  1. Avatar photo محمدرضا گفت:

    سلام
    در رابطه با Maximum output speed نکته عملی یا تجربه ای دارید که ذکر کنید؟ من داخل اینترنت اینو پیدا کردم:

    If you select GPIO pin as low speed, that is if the speed register is 00, then the maximum achievable switching frequency of that GPIO pin will be 8MHz. For medium speed, then the maximum frequency is up to 50MHz. For maximum high-speed frequency up to 100MHz. For very high-speed maximum switching frequency up to 180Mhz.

    By increasing the GPIO speed, you increase the rate of change of the output voltage (reducing rise time). However, power consumption and noise radiated by the circuit increases along with the GPIO speed. By default, you should keep GPIO speed low unless there is a specific reason for increasing it.

    1. Avatar for کامین جلیلی کامین جلیلی گفت:

      سلام محمدرضا. این اطلاعات در دیتاشیت قطعه ذکر شده و قابل تنظیم هم هست.

  2. Avatar for مرادی مرادی گفت:

    با سلام من میخوام یه مبدل آنالوگ به دیجیتال رو برنامه نویسی کنم با میکرو کنترلرstm32f407vgt6 ولی سرعت خواندن پایین است در واقع سنسور لغزشی میباشد که به کند خوانده میشود اگه بتونید راهنمایی کنید که من بتونم با حداکثر سرعت بخونم ممنون میشم

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

      سلام دوست عزیز
      فکر میکنم منظورتون از کند بودن اینه که سرعت نمونه گیری پایین است.
      خوب بذارید اول چند تا سوال از شما بپرسم – چطور از adc استفاده می کنید ؟ (چطور و با چه کدی نمونه ها رو میخونید)
      دوم این که چه سرعت نمونه برداری ای مد نظر شماست ؟

  3. Avatar for امین امین گفت:

    سلام
    ضمن تشکر از زحمات شما و آموزش های خوبتون
    می خواستم بپرسم چه جوری میکرو STM32 را قفل کنیم!

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

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

  4. Avatar for صفا صفا گفت:

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

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

      ببینید بردی خوبه که تمام io های میکروکنترلر رو در اختیارتون قرار بده هر بردی که چنین ویژگی رو داشته باشه اوکیه
      حتی میتونید برد رو خودتون بسازید – ما pcb یه برد متن باز رو روی سایت قرار دادیم
      دانلود رایگان PCB BluePill

  5. Avatar for سیاوش سیاوش گفت:

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

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

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

    1. Avatar for سیاوش سیاوش گفت:

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

      1. Avatar for Phoenix Phoenix گفت:

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

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

  6. Avatar for نگار نگار گفت:

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

    1. Avatar photo electronic girl گفت:

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

  7. Avatar for علی علی گفت:

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

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

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

  8. Avatar for mahdijn mahdijn گفت:

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

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

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

      1. Avatar for mahdijn mahdijn گفت:

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

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

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

  9. Avatar for سجاد سجاد گفت:

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

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

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

  10. Avatar for حامد حامد گفت:

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

    1. Avatar photo electronic girl گفت:

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

  11. Avatar for حامد حامد گفت:

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

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

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

  12. Avatar for علی علی گفت:

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

    1. Avatar photo electronic girl گفت:

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

  13. Avatar for محمود محمود گفت:

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

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

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

  14. Avatar for rasoul moezi rasoul moezi گفت:

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

    1. Avatar photo electronic girl گفت:

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

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

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

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

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

  16. Avatar for Amir Amir گفت:

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

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

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

  17. Avatar for محمد محمد گفت:

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

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

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

  18. Avatar for علی علی گفت:

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

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

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

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

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