Need Help? Contact us at:
Course Description Video (Must Watch)

Advanced Embedded Systems Bare-Metal Programming Ground Up™

No libraries : RTC, IWDG, WWDG, DMA-ADC, DMA-I2C, DMA-SPI, DMA-UART, DMA-PWM, Standby, Wakeup

 22+ hours | Complete Source Code Included

Are you tired of Copying and Pasting code you don't understand?
Here’s an overview of what you’re getting in this advanced level course...

Developing bare-metal DMA Drivers

This course completely demystifies the Direct Memory Access (DMA) peripheral. Over 50% of the course is spent on this topic, so that by the end of this course you would have mastered the DMA peripheral.

 We shall thoroughly look at developing the following bare-metal DMA drivers.

    - Bare-Metal DMA Memory-to-Memory Transfer Driver
    - Bare-Metal ADC DMA Regular Conversion Driver
    - Bare-Metal ADC DMA Timer Triggered Conversion Driver
    - Bare-Metal UART RX/TX DMA Driver
    - Bare-Metal SPI RX/TX DMA Driver
    - Bare-Metal I2C  RX/TX DMA Driver
    - Bare-Metal PWM DMA Driver

Developing bare-metal RTC Drivers

The Realtime Clock (RTC) peripheral is another advanced peripheral demystified in this course. We shall study the theory of realtime clocks, take a look at the capabilies of the realtime clock on our microcontroller and then develop the following drivers for the realtime clock.

    - Bare-Metal RTC Calendar Driver
    - Bare-Metal RTC Alarm Driver
    - Bare-Metal RTC Timestamp Driver
    - Bare-Metal RTC Tamper Detection Driver

Developing bare-metal Watchdog Timer Drivers

Watchdog Timers are an essential component of any robust embedded device. In my opinion, no embedded device should be released onto the market without the implementation of an Independent Watchdog Timer (IWDG). You will understand why I hold this opinion in the course.

In this course we shall develop the following Watchdog Timer drivers:

- Bare-Metal Independent Watchdog (IWDG) Timer Driver
- Bare-Metal Windowed Watchdog (WWDG) Timer Driver

Working with Standby Mode and Wakeup

Knowing how to put your embedded devics into Low-power mode and coming out of it will greatly improve your ability to developer power efficient embedded solutions. This course will teach you how to put your device into Standby mode and come out of it using different methods.

Specifically, we shall develop the following drivers:

   - Bare-Metal Standby Mode and Wakeup Pin  Driver
   - Bare-Metal Standby Mode and RTC Wakeup Timer Driver

The Art of Debugging

Knowing how to properly debug your firmware will save you lots of time and money, and may even prolong your life because of the level of frustration and stress you will avoid.

In this course you shall grasp the theoretical aspects of debugging, understand the various types of debugging such functional debugging and performance debugging, and learn the various tools and methods used in different scenarios.

       Some of the techniques we you will master include:

            - Methods of identifying the cause of HardFault
            - Catching anomalous results
            - Measuring execution time of an algorithm using a Timer
            - Measuring execution time of an algorithm using a Logic Analyzer
            - Working with arrays dumps
            - Debugging techniques for Timers


 Lesson : Testing the DMA Driver

Table of Contents

  • Setting Up
  • ​Downloading CubeIDE
  • ​Installing CubeIDE
  • Getting the required documentation
  • ​Getting the required package for bare-metal development
  • ​Testing the project setup
  • ​Essentials of Firmware Debugging
  • ​Getting familiar with the Debug View
  • ​Working with the Instrumentation Trace Macrocell (ITM)
  • ​Retargetting "printf()" and creating Log functions
  • ​Debugging with UART - Analyzing the Documentation
  • ​Debugging with UART - Writing the UART Driver
  • ​Debugging with UART - Testing the UART Driver
  • ​Debugging GPIO with Serial Wire Viewer (SWV)
  • ​Developing Bare-Metal Memory-to-Memory Direct Memory Access (DMA) Drivers
  • ​​Overview of the Direct Memory Access (DMA) Module
  • ​Analyzing the DMA Documentation
  • ​Writing the DMA Memory-to-Memory Driver
  • ​Implementing the DMA Data Transfer function
  • ​Testing the DMA Driver
  • ​Developing Bare-Metal ADC DMA Drivers
  • ​Understanding ADC Independents Modes
  • ​Analyzing the ADC Documentation
  • ​Writing the ADC DMA Driver (Part I)
  • ​Writing the ADC DMA Driver (Part II)
  • ​Developing Bare-Metal ADC Timer Trigger DMA Drivers
  • ​Writing the ADC Timer Triggered Driver
  • ​Testing the ADC Timer Triggered Driver
  • ​Developing Bare-Metal UART DMA Drivers
  • Overview of the UART Protocol
  • ​Listing the Steps
  • ​Implementing the UART RX TX Initialization functions
  • ​Implementing the DMA Stream RX TX Configuration function (Part I)
  • ​Implementing the DMA Stream RX TX Configuration function (Part II)
  • ​Implementing the DMA Stream RX TX Configuration function (Part III)
  • ​Testing the UART DMA Driver
  • ​Developing Bare-Metal SPI DMA Drivers
  • ​Understanding the SPI Protocol
  • ​Analyzing the SPI Documentation
  • ​Implementing the SPI DMA Initialization function
  • ​Implementing the TX Stream Configuration function
  • ​Implementing the RX Stream Configuration function
  • ​Implementing the Transfer and Receive functions
  • ​Implementing the MPU9250 Mems Device SPI DMA Driver (Part I)
  • ​Implementing the MPU9250 Mems Device SPI DMA Driver (Part II)
  • ​Implementing the MPU9250 Mems Device SPI DMA Driver (Part III)
  • ​Implementing the MPU9250 Mems Device SPI DMA Driver (Part IV)
  • ​Testing the MPU9250 Mems Device SPI DMA Driver
  • Developing Bare-Metal I2C DMA Drivers
  • ​Understanding the I2C Protocol
  • ​Analyzing the I2C Documentation
  • ​Implementing the I2C DMA Initialization function (Part I)
  • ​Implementing the I2C DMA Initialization function (Part II)
  • ​Implementing the I2C DMA Tx Stream Initialization function
  • ​Implementing the I2C DMA Rx Stream Initialization function
  • ​Implementing the I2C DMA Stream Transfer function
  • ​Implementing the I2C DMA Stream Receive function
  • ​Implementing the I2C DMA Read function
  • ​Implementing the I2C DMA Write function
  • ​Implementing the I2C DMA Stream IRQHandlers
  • ​Testing the I2C DMA Driver with the MPU9250 Mems Device
  • ​Developing Bare-Metal PWM DMA Drivers
  • Understanding STM32 Timers
  • ​Analyzing the PWM Documentation
  • ​Implementing the PWM Initialization function
  • ​Developing the "set_dutycycle()" function
  • ​Implementing the PWM DMA Initialization function(Part I)
  • ​Implementing the PWM DMA Initialization function(Part II)
  • ​Testing the PWM DMA Driver
  • More on Debugging
  • ​Catching Anomalies with Breakpoints
  • ​Catching HardFaults
  • ​Debugging Timers using SWV Graph
  • ​Measuring the Execution Time of an Algorithm
  • ​Dumping Register Information
  • ​Determining Execution Time and Place using Profiling
  • Developing Bare-Metal RTC Drivers
  • ​Understanding Real Time Clocks
  • ​Listing the Steps for Configuring the RTC Calendar
  • ​Implementing the RTC Calendar Initialization function (Part I)
  • ​Implementing the RTC Calendar Initialization function (Part II)
  • Setting the Timer Prescalers
  • ​Exiting the Initialization Mode
  • ​Getting the Calendar Information
  • ​Testing the RTC Calendar Driver
  • ​Implementing the RTC Alarm Initialization function (Part I)
  • ​Implementing the RTC Alarm Initialization function (Part II)
  • ​Implementing the RTC Alarm Interrupt Handler and Testing
  • ​Analyzing the Steps to Configure the RTC Timestamp
  • ​Implementing the RTC Timestamp Initialization function
  • ​Implementing the RTC Timestamp Interrupt Handler
  • ​Testing the RTC Timestamp Driver
  • ​Implementing the RTC Tamper Detection Initialization function
  • ​Testing the RTC Tamper Detection Driver​
  • Developing Bare-Metal Independent Watchdog (IWDG) Timer Drivers
  • ​​Overview of the Independent Watchdog
  • ​Analyzing the Steps for Initializing the IWDG Timer
  • ​Implementing the IWDG Initialization function
  • ​Implementing other Modules for Testing the IWDG Driver
  • ​Testing the IWDG Driver
  • Developing Bare-Metal Windowed Watchdog (IWDG) Timer Drivers
  • ​Overview of the Window Watchdog
  • ​Implementing the WWDG Initialization function
  • ​Testing the WWDG Driver
  • Developing Bare-Metal Drivers for Standby Mode and Wakeup
  • ​Implementing the Standby and Wakeup Setup Function
  • ​Getting the Source of a "Reset"
  • ​Testing the Standby and Wakeup Driver
  • ​Analyzing Steps for Developing an RTC Wakeup Timer Driver
  • ​Implementing the RTC Wakeup Timer Initializationf Function
  • ​Implementing the "rtc_enter_standby_mode()" Function
  • ​Testing the RTC Wakeup timer Driver
A little about me : Israel Ninsaw Gbati
Some of you may have taken some of my embedded systems courses from other online platforms. 
This is my private channel. 

I have been writing embedded firmware for years, I have built embedded devices like consumer products and robotic arms.
Till date I have 
trained over 75,000 students in embedded
 firmware development online till date
...including third year undergraduate university students in-person.

If you have taken any of my courses before you will know I start from the absolute basics, I do not assume that the student has any prior knowledge of the topic under discussion. You will also know that by the end of the course you understand the functions of every register used in developing the particular firmware or driver.

This method is the same for all of my published embedded systems courses. 

Our courses have been reviewed by 1000+ students
Here are some of the reviews

 30 Day Money Back Guarantee

    • Advanced Embedded Systems Bare-Metal Programming Ground Up™($79.99 Value) 
    Total Value: $79.99
    But today, you're getting all of this...
    For Only $12.75
             Your free gift is on its way to your inbox (it may take a few minutes to arrive), but before you go, 
    check out this very special offer, just for you!
    I have got an "ethical bribe" or bonus that I
     want to give you to make sure you take action TODAY.

    Super Cool Bonus 

    Micrium uC/OS-III RTOS Programming From Ground Up on ARM

    This course teaches you how to build real-time applications using Micrium's uC /OS-III, one of the most popular industry grade real-time operating systems for embedded systems.  

    The course gives a detailed overview of the characteristics of the uC/OS real-time kernel, provides a detailed tutorial of the API's to implement the various features of the uC/OS RTOS and then goes on to build some real-time projects .
    (value = $97)