Learn FreeRTOS from scratch
4.1 (20 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
1,297 students enrolled
Wishlisted Wishlist

Please confirm that you want to add Learn FreeRTOS from scratch to your Wishlist.

Add to Wishlist

Learn FreeRTOS from scratch

Learn about FreeRTOS basics. Practise it's APIs with different examples.
4.1 (20 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
1,297 students enrolled
Last updated 5/2017
Current price: $10 Original price: $50 Discount: 80% off
5 hours left at this price!
30-Day Money-Back Guarantee
  • 2 hours on-demand video
  • 17 Articles
  • 4 Supplemental Resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
What Will I Learn?
  • Understand RTOS Concepts in FreeRTOS context
  • Working knowledge of FreeRTOS APIs
  • Understand of FreeRTOS Environment and Coding Style
  • Use Hardware Peripherals in FreeRTOS Application Development
  • Apply for Job in Embedded Industry
View Curriculum
  • Basic C Programming
  • Some familiarity with Embedded Systems
  • Hardware: Any STM32 Board
  • Motivation!

Welcome to this FREE course on FreeRTOS. This Course will help you getting started with FreeRTOS. It includes hands-on practice on STM32. All Software Tools used in this course are freely available. All you need is a STM32 Board!

This course will teach you the best way to work with FreeRTOS. Using STM32CubeMX design interface, we will generate basic code for our Application Project. Then we will use SW4STM32 IDE to write, compile and debug our application code. We will also learn how to visualize the trace output.

Why this Course?

The basic aim of this course was to remove the knowledge-and-practice gap between engineering universities and embedded industry by providing interested students with the opportunity to Learn about RTOS and practice it on some hardware, for FREE!

Course Curriculum explained

The first Section gives you an introduction to the course. Then we will get all required tools, software and hardware in section two and will create and run a Hello World Project to make sure we have everything we need setup.

Next four section, Section 3-6, introduces and explains to you different RTOS concepts in context of FreeRTOS. These section introduces different APIs provided by freeRTOS to implement those concepts. These section include a variety of application to work on those APIs explaining how to actually programming them, showing there output and verifying the result by visualizing the trace output.

Now that we you have a understanding of different APIs provided by freeRTOS, Its time to move forward and start interacting with hardware. For this purpose, following sections will be included shortly:

  • Section   7: Interfacing Hardware (INCLUDED!!!)
  • Section   8Serial Communication (coming soon)
  • Section   9: I2C Communication (coming soon)
  • Section 10: SPI Communication (coming soon)
  • Section 11: Using Watchdog timer (coming soon)

Now, we have a good knowledge of RTOS concepts in context of FreeRTOS and writing application for freeRTOS. It time for us to look at "freeRTOS" itself. Following Section will be included to familiarize ourselves with freeRTOS

  • Section 12: Writing Code, the "freeRTOS" Style (coming soon)
  • Section 13: freeRTOSConfig.h (coming soon)
  • Section 14: freeRTOS Scheduling (coming soon)

Now, that we have dealt with the basic stuff one-by-one, let rap this course up by creating a Final Project, that will include all that we have previously learned. 

  • Section 15: A Practical Problem: Elevator Management System (coming soon)

About Course Content:

Most of the content i.e. Section 1,2, 7-15, of this course is written and produced by me for this course. However, Some of the concepts in Sections 3-6 are taken from different sources specially the from book “Using the FreeRTOS Real Time Kernel - A Practical Guide - Cortex-M3 Edition” by Richard Barry.

Hardware Requirements:

To follow along this course all you need is a STM32 Board! I am using STM32F103RbT6. You can use any STM32 board you want. When ever changes are required to be made, it's mentioned explicitly, both in lecture videos and code also.

Who is the target audience?
  • Any one interested in learning FreeRTOS
  • Fresh Graduates looking to join Embedded Industry
  • Engineering Students
  • Software Development Engineers
  • Embedded Engineers
  • IoT Developers
Compare to Other RTOS Courses
Curriculum For This Course
55 Lectures
6 Lectures 10:52

This Lecture gives you an introduction to the Video.

Preview 02:27

This lecture gives you an introduction to the FreeRTOS.

Preview 01:09

This lecture helps you to figure out why you should use a Real-Time Kernel.

Preview 03:53

This lecture gives you an introduces you to Multi-Tasking in Small Embedded Systems.

Preview 02:42

This Lecture lists down all Tools and Hardware you are going to need through out this course.

Required Tools and Hardware

This Lecture contains the things you should know before you start...

Before you Start...
Getting started with FreeRTOS
9 Lectures 20:11

This Lecture introduces this section.


This lecture contains a list of all software we are going to use through out this course and links to download them.

Download all Required Software

STM32 Board Firmware: Checking if up-to-date and Updating

This lecture shows you how to add you STM32 MCU/Board to your STM32CubeMX Software before you can start creating the project.

Adding you STM32 Board to STM32CubeMX

This Lecture shows you how to create a Example project in STM32CubeMX.

Hello World: STM32CubeMX

Hello World: SW4STM32

Hello World: Running and Debugging

Adding Tracealyzer to Project

This lecture contains a list of Reference Document for STM32 devices. This lecture also contains screenshots of commonly used pinouts for different STM32 devices.

STM32 References documents
Task Management
17 Lectures 42:26

This Lecture introduces this section.

Introduction to Task Management

This lecture teaches you the theory of creating tasks.

Creating Tasks

Let's create some Tasks.

Example 1 Creating Tasks

Remember Task Parameters? Let's use'em.

Example 2 Using Task parameter

This Lecture help you understand the concept of priorities in Tasks.

Task Priorities

Get Ready! We are about to prioritize our tasks.

Example 3 Experimenting with priorities

This lecture shows you different states inside, "Non-Running" state.

Expanding the 'Non Running' State

Let's put that famous "Blocking" state to use and use it to create a delay.

Example 4 Using the Blocked state to create a delay

This lecture teaches you about the delay API function provided by FreeRTOS, itself.


Let's get our hands dirty and practice with this delay API provided by FreeRTOS.

Example 5 Converting the example tasks to use vTaskDelayUntil()

Lets work with both the delays we have studied up-till now understand their differences in detail.

Example 6 Combining blocking and non-blocking tasks

Well, you can still do something while sitting IDLE. This lecture teaches you how tasks can do that.

The Idle Task and the Idle Task Hook

Let's get those IDLE Tasks do some work for us.

Example 7 Defining a Idle task hook function

This lecture looks into the details of changing a task priority.

Changing Priority of a Task

Let play with Task priorities on a higher level.

Example 8 Changing Task Priorities

Deleting Task

Let's Delete some tasks.

Example 9 Deleting Tasks
Queue Management
6 Lectures 24:06

This Lecture introduces this Section.

Introduction to Queue Management

Characteristics of a Queue

Using a Queue

Example 10 Blocking when receiving from a queue

Example 11 Blocking when sending to a queue or sending structures on a queue

Working with Large Data
Interrupt Management
8 Lectures 28:13

This Lecture introduces this Section.

Introduction to Interrupt Management

Deferred Interrupt Procesing

Writing FreeRTOS interrupt handler

Example 12 Using a binary semaphore to synchronize a task with an interrupt

Counting Semaphores

Example 13 Using a counting semaphore to synchronize a task with an interrupt

Using Queues within an Interrupt Service Routine

Example 14 Sending and receiving on a queue from within an interrupt
Resource Management
3 Lectures 05:35

This Lecture introduces this Section.

Introduction to Resource Management

Mutexes (and Binary Semaphores)

Example 15 Rewriting vPrintString() to use a semaphore
Interfacing Hardware Components
6 Lectures 06:23

This lecture introduces you to this section.


This lecture is the heart of this section. It teaches you about GPIO's on STM32. This lecture look at the GPIO types, there states and HAL GPIO driver. Understanding of content in this lecture is a pre-req. for example in the next lecture.


In this lecture, we will see how we can Blink our on-board LED from a Task.

Blinking OnBoard LED

Let's take input from a button from a Task and Turn LED ON/OFF accordingly.

Taking Input from OnBorad Button

Why wait for button to change its state when we have Interrupts! Lets look at 'em.

The Button Trigger

On-Board sounds good but what about External GPIOs? In this Lecture, we will look see how we can get input/set output from/to External GPIOs.

Using External GPIO pins
About the Instructor
Abdur Rehman Khalil
4.2 Average rating
43 Reviews
1,420 Students
3 Courses
Electrical Engineer

I completed my Electrical Engineering from SEECS, NUST. I love programming. I have a lot of experience in IoT. I have some experience in Web Development and Game Development. For last 4 Years, I taught in Many different workshop organized by different societies at my University on Arduino, STM32 and nodeMCU etc.

Most of what I learned, like you, was online. i.e. Mostly Free. I always wanted to give back to the community. Here, I am accomplishing this goal by creating complete courses on what I learned and make this learning process easy for other.

Like all rest of Humanity, I am also imperfect. I am trying my best to present the error-free content to all of my fellow learners but sometimes, there might be some mistake. I am Sorry If something like that happens to you. Please correct me if necessary or at-lest point out whats the error and I will be very thankful to you.