ARM, RTOS, STM32, آموزش های متنی

آموزش نصب و راه اندازی سیستم عامل Free RTOS روی STM32

آموزش نصب و راه اندازی سیستم عامل Free RTOS برای STM32 با cubeMX

آموزش نصب و راه اندازی سیستم عامل Free RTOS روی STM32

جهت نصب و راه اندازی سیستم عامل FreeRTOS مستقیم به سراغ cubeMX می رویم، تنظیمات مربوط به میکروکنترلر STM32 را انجام می دهیم. بعد از اینکه با نحوه ی نصب و راه اندازی سیستم عامل آشنا شدیم، پروژه را در محیط Keil اجرا می کنیم و اولین تجربه عملی با سیستم عامل RTOS را رقم خواهیم زد. آماده اید ؟!

اگر از لحاظ مفهومی اطلاعاتی از سیستم عامل بلادرنگ و RTOS ها ندارید، در انتهای این مقاله، لینک های مفید را بررسی کنید، مطالب زیادی در این باره منتشر کردم.

مشاهده ویدئو

تنظیمات محیط cubeMx

شروع برنامه نویسی در محیط Keil

منبع پیشنهادی جهت یادگیری کامل FreeRTOS


حداقل سخت افزار مورد نیاز

در این مطلب از برد معروف و محبوب mini STM32 استفاده می کنیم که تصویر آن را در زیر مشاهده می کنید. بردی ارزان از نسل ARM Cortex-M3 که برای شروع و وارد شدن به دنیای RTOS کاملا مناسب است.

آموزش نصب و راه اندازی سیستم عامل Free RTOS برای STM32 با cubeMX

تنظیمات RTOS در cubeMx

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

اگر با نرم افزار cubeMX و آماده سازی پروژه آشنایی ندارید، اینجا کلیک کنید.

آموزش نصب و راه اندازی سیستم عامل Free RTOS برای STM32 با cubeMX

شروع برنامه نویسی به روش RTOS

تنظیمات انجام شده در محیط cubeMX را می توانیم در محیط Keil به صورت کدهای برنامه نویسی ببینم. cubeMX به صورت پیش فرض از CMSIS-RTOS استفاده می کند و پروژه را تولید می کند. cmsis-rtos صرفا یک لایه روی API های خود FreeRTOS است. بنابراین دقت کنید که یک سیستم عامل جداگانه به حساب نمی آید، تنها شکل برنامه نویسی را تغییر می دهد. محیط Keil را مطابق تصویر زیر خواهیم داشت.

آموزش نصب و راه اندازی سیستم عامل Free RTOS برای STM32 با cubeMX

با استفاده از کد زیر اقدام به ایجاد و تعریف دو تسک Task می کنیم. به این مفهوم که مادامی که پردازنده روشن است، سیستم عامل این دو تسک را رسیدگی می کند.

#define LED1_SET(x)		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, x)
#define LED2_SET(x)		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, x)
#define DELAY_LOW		(300)
#define DELAY_HIGH		(350)


//--> tasks handle definitions
osThreadId led1TaskHandle;
osThreadId led2TaskHandle;

//--> tasks routine definitions	
void led1Task(void const * arg);
void led2Task(void const * arg);

int main(void)
{	
      //--> Init System
      HAL_Init();
      SystemClock_Config();

      //--> Config peripherals
      MX_GPIO_Init();
      MX_USART1_UART_Init();

      //--> Task1 Definition
      osThreadDef(task1, led1Task, osPriorityNormal, 0, 128);
      led1TaskHandle = osThreadCreate(osThread(task1), NULL);

      //--> Task2 Definition
      osThreadDef(task2, led2Task, osPriorityNormal, 0, 128);
      led2Taskhandle = osThreadCreate(osThread(task2), NULL);

      //--> Start Scheduler
      osKernelStart();
 
      while (1)
      {

      }
}


//--> task1 routine	
void led1Task(void const * arg)
{
	while(1)
	{
		LED1_SET(1);
		osDelay(DELAY_LOW);
		LED1_SET(0);
		osDelay(DELAY_LOW);
	}
}


//--> task2 routine
void led2Task(void const * arg)
{
	while(1)
	{
		LED2_SET(1);
		osDelay(DELAY_HIGH);
		LED2_SET(0);
		osDelay(DELAY_HIGH);
	}
}

همانطور که مشاهده می شود بعد از اجرا شدن تابع osKernelStart در تابع main ، حالت اجرای برنامه از روش bare metal به RTOS تغییر می کند و برنامه زین پس در روتین تسک های تعریف شده اجرا می شود و نه در تابع main

اگر در روش تعریف تسک Task ها کنجکاو هستید، قبلا مقاله ای در این باره نوشته شده است. برای اطلاعات بیشتر روی لینک زیر کلیک کنید.

آموزش تعریف Task در FreeRTOS


نحوه ی سیم بندی سخت افزار

به منظور دیدن نتیجه، سخت­ افزار ساده ­ای به شرح تصویر زیر بر روی برد­بورد می­ بندیم.

آموزش نصب و راه اندازی سیستم عامل Free RTOS برای STM32 با cubeMX

کامپایل برنامه و پروگرام کردن برد

همه چیز آماده است، با کلیک کردن بر روی Icon دانلود مطابق تصویر زیر در محیط Keil ، برد برنامه ریزی می شود.

آموزش نصب و راه اندازی سیستم عامل Free RTOS برای STM32 با cubeMX

در صورتی که با نحوه ی برنامه ریزی برد با St-link و یا JLINK آشنایی ندارید، لینک های زیر انواع روش های برنامه ریزی را با جزئیات به شما نشان خواهند داد.

پروگرام کردن STM32 با ST-Link

پروگرام کردن STM32 با J-Link

پروگرام کردن STM32 با ST-Link Utility


منابع پیشنهادی جهت یادگیری بیشتر FreeRTOS

در لینک زیر می توانید کتاب الکترونیکی را دانلود کرده و یک شروع سریع با سیستم عامل FreeRTOS برای میکروکنترلر STM32 داشته باشید.

دانلود کتاب شروع کار با RTOS

همینطور می توانید در دوره جامع آموزش سیستم عامل FreeRTOS در لینک زیر شرکت کنید.


لینک های مرتبط

آموزش نحوه استفاده از صف Queue در FreeRTOS

آموزش نحوه استفاده از میوتکس Mutex در FreeRTOS


لینک های مفید

استفاده از سیستم عامل RTOS در میکروکنترلرها

مقایسه برنامه نویسی به روش RTOS و Super Loop

RTOS یا سیستم عامل بلادرنگ چیست؟


اگر سوال، پیشنهاد، نظر و یا … دارید، از قسمت نظرات در پایین همین صفحه، می توانید با ما و بقیه ی خوانندگان درمیان بگذارید.

author-avatar

درباره مرتضی زندی

خلق کردن شماره 1 علاقه مندی های من هست. برنامه نویسی بهترین ابزاری بوده که تا الان برای این کار پیدا کردم. بیس الکترونیک دارم و دستی بر آتش در دنیای رشته های مجاور. تجربه سال ها فعالیت در تیم های R&D رو دارم، در این بین در حوزه ی امبدد سیستم ها فعالیتم پررنگ تر هست. عاشق یادگیری و یاد دادن هستم و تلاش می کنم تجربیاتم رو به زبانی ساده از طریق EasyMCU.org به نحوی کاربردی و موثر با علاقه مندان این حوزه به اشتراک بذارم.

10 نظر در “آموزش نصب و راه اندازی سیستم عامل Free RTOS روی STM32

  1. mahdi.h گفت:

    سلام
    ممنون از شما
    آموزش رو با کیفیت و عالی تهیه کردید

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

  2. farshad گفت:

    مثل همیشه عالی
    کلا یه وقت می خوام خالی کنم
    یه بارکی با دوره های شما این RTOS رو شروع کنم

    1. درود بر شما آقا فرشاد گرامی
      سپاس از فیدبک شما.
      خوشحالم مفید بوده و لذت بردید.
      همراه شما هستیم.
      با آرزوی بهترین ها.

  3. پارسا گفت:

    سلام وقت بخیر
    من با توابع HAL کار کردم میتونم RTOS کار کنم ؟ یا قبلش حتما باید با CMMSIS کار کرده باشم ؟

    1. درود بر شما آقا پارسا عزیز
      برای کار کردن با RTOS نیاز نیست CMSIS کار کرده باشید. کافیه با سبک عادی برنامه نویسی ( که اصطلاحا برمتال یا سوپر لوپ گفته میشه) کار کرده باشید و قدری تجربه در برنامه نویسی میکروکنترلر و زبان C داشته باشید. اگر با توابع HAL آشنایی دارید، بنابراین بنظر میرسه که تجاربی در این زمینه دارید و میتونید RTOS رو شروع بفرمایید.
      با آرزوی بهترین ها

  4. مهدی گفت:

    عالی بود امیدوارم ادامه بدید
    با اینکه بلد بودم باز نشستم تا آخرشو دیدم
    از اموزشتون لذت بردم

    1. درودها آقا مهدی …
      مرسی از کامنت انرژی بخش شما.
      با آرزوی بهترین ها

  5. مهدی آقاجانزاده گفت:

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

    1. درودها
      ممنون از فیدبک شما. خوشحالم مفید بوده.
      با آرزوی بهترین ها.

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

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.