EmbeddedExpertIO
Need Help? Contact us at:
support@embeddedexpert.io

STM32 Development Learning Path

8 courses | 90+ hours | Complete Source Code Included

         Your free gift is on its way to your inbox, but before you go 
check out this very special offer, just for you!

1.  Mastering STM32CubeMX 5 and CubeIDE

Code Drivers and Firmware : PWM, USB,TIMER, SPI, ADC, UART, DMA,FreeRTOS,Embedded-C, Assembly etc

This course teaches you how build embedded systems firmware and peripheral drivers using the STM32CubeMX 5 framework and the STMCubeIDE development environment. This course has many sections but primarily the course can be divided into three parts. 

The first part deals with peripheral driver development. In this part we master how to use the STM32CubeMX framework to setup the clocks and register parameters of our peripheral drivers and then go on to the CubeIDE development environment to complete the development and testing of peripheral drivers. We shall master different setup configurations of our peripheral drivers in this part. These peripherals include the Universal Serial Bus (USB), the PWM, the SPI, the ADC, UART and the DMA.

The second part of this master course deals with developing embedded firmware applications using some of the Middleware provided by the STM32CubeMX framework. One of such Middleware we shall master is the FreeRTOS Realtime Kernel. We shall see how to use STM32CubeMX to create tasks and semaphores and other kernel components for realtime firmware development. We shall also see how to develop these kernel components from scratch using our CubeIDE development environment alone.

The third part of the course deals with working the CubeIDE as a standalone development environment. Over here we shall see how to develop bare-metal embedded-c firmware and drivers without using any libraries. We shall literally download the microcontroller chip's datasheet and develop our firmware and drivers using information from the datasheet only. We shall then go on to use this same datasheet information to develop firmware and peripheral drivers using ARM Assembly Language.
  • Introduction
  • ​Downloading Introduction 
  • ​Download CubeMX 5 and CubeIDE
  • ​Installing CubeMX 5 and CubeIDE
  • ​Quick Notice
  • ​Installing CubeMX 5 Packages
  • ​Overview of STM32CubeMX 5
  • ​Overview of the Clock Configuration Tab
  • ​Developing General Purpose Input/Output Drivers and Firmware
  • ​Coding an Input/Output Driver
  • ​Coding an Input Interrupt Driver
  • ​Coding an Input Interrupt Driver (Multiple Inputs)
  • ​Source Code Download
  • ​Embedded Systems Bare-Metal Embedded-C and Assembly Programming with CubeIDE
  • ​​Coding Gpio Drivers From Scratch Using Datasheet Information (Part I)
  • ​Coding Gpio Drivers From Scratch Using Datasheet Information (Part II)
  • ​Coding ARM Assembly Applications in CubeIDE
  • ​Coding Gpio Drivers From Scratch In Assembly Language (Part I)
  • ​Coding Gpio Drivers From Scratch In Assembly Language (Part II)
  • ​Converting Keil MDK ARM Assembly Syntax to GCC Assembly Syntax
  • ​Developing General Purpose Timers Drivers and Firmware
  • ​Coding a Hardware Timer to generate precise Delays
  • ​Coding a Hardware Timer Driver for Output Compare Functionality
  • ​Coding a Hardware Timer Driver for Counting Events
  • ​Coding a Hardware Timer Driver for Generating PWM Signals
  • ​Coding a Hardware Timer Driver for Generating Precise Interrupts
  • ​Developing Analog-to-Digital Conversion (ADC) Drivers and Firmware
  • ​ Coding an ADC Driver for Single Conversion Mode
  • ​Coding an ADC Driver for Continuous Mode Conversion
  • ​Coding an ADC Driver for Interrupt Conversion Mode
  • ​Coding an ADC Driver for Single-Channel DMA Mode
  • ​Coding an ADC Driver for Multi-Channel DMA Scan Mode
  • ​Developing Serial Peripheral Interface ( SPI ) Drivers and Firmware
  • ​Coding SPI Drivers for Polling Transfer Mode
  • ​Coding SPI Drivers for Interrupt Transfer Mode
  • ​Coding SPI Drivers for DMA Transfer Mode
  • Developing Universal Asynchronous Receiver-Transmitter ( UART ) Drivers
  • ​Coding UART Drivers for Polling Transfer Mode
  • ​Coding UART Drivers for Interrupt Transfer Mode
  • ​Coding UART Drivers for DMA Transfer Mode
  • ​Coding Multiple UART Modules
  • ​Developing Universal Serial Bus ( USB) Drivers and Firmware
  • ​Understanding the USB capabilities of different dev boards
  • ​Coding USB Drivers for Human Interface Device (HID) - Mouse Functionality
  • ​Coding USB Drivers for Human Interface Device (HID) - Keyboard Functionality
  • ​Coding USB Drivers for Virtual Com Port Functionality (TX Only)
  • ​Coding USB Drivers for Virtual Com Port Functionality (RX and TX )
  • ​Developing Real-time Firmware with FreeRTOS
  • ​Coding : Experimenting with Tasks and Priorities
  • ​Coding : Accessing Hardware Drivers from Multiple Threads
  • ​Coding : Accessing Hardware Drivers from Multiple Threads using a MUTEX
  • ​Coding : Creating Threads Manually
  • ​Coding : Sending Notifications Between Threads

2.   Embedded  Systems STM32 HAL APIs Driver Development

STM32 Hardware Abstraction Layer (HAL) Drivers: ADC,UART,TIMERS, GPIO,SPI,I2C,RTC,RCC etc

The STM32 Low-Layer APIs ( as known as LL) offers a fast light-weight expert-oriented layer which is closer to the hardware than the HAL APIs (Hardware Abstraction Layer). The LL offers low-level APIs at the register level with better optimization. These require deep knowledge of the MCU and peripheral specifications which we shall cover in this course.

With a programming based approach, this course is designed to give you a solid foundation in firmware and peripheral driver development for the STM32 family of microcontrollers. The goal of this course is to teach you how to navigate the microcontrollers reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware using the STM32 Low-Layer APIs 

By the end of this course you will be able to develop drivers for peripherals like the ADC, UART,PWM, GPIO, TIMER,I2C, SPI, RTC, WWDG, IWDG, RCC, EXTI etc. You will also master the STM32 architecture and how to build professional embedded firmware for STM32 microcontrollers.
  • Introduction
  • ​Downloading the required documentation
  • ​Getting Started
  • ​Downloading CubeIDE
  • ​Installing Packages
  • ​Overview
  • Getting the right STM32 Package
  • ​General Purpose Input/Output Driver Development
  • ​​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding  : Getting familiar with the Setup and HAL
  • ​Coding  : Developing a GPIO Driver using information from the documentations
  • ​Universal Asynchronous-Synchronous Receiver-Transmitter (USART)
  • ​Overview of the UART Protocol
  • ​Coding : Developing a UART Driver (Pt. 1)
  • ​Coding : Developing a UART Driver (Pt. 2)
  • Coding : Retargeting printf
  • ​General Purpose Timer Driver Development
  • ​Understanding the System Tick (SysTick) Timer
  • ​Understanding STM32 Timers
  • ​Coding  : Developing a Hardware Timer Driver (Pt. 1)
  • ​Coding : Developing a Hardware Timer Driver (Pt. 2)
  • ​Analog-to-Digital Converters Driver Development
  • ​Understanding ADC Independents Modes
  • ​Coding  : Developing the ADC Single Conversion Driver
  • Interrupt Programming
  • ​Understanding Interrupts
  • ​Coding  : Developing the EXTI Input Interrupt Driver
  • ​Coding : Using Multiple EXTI Input Interrupts
  • ​Coding : Developing the ADC Interrupt Driver
  • ​Coding : Developing the UART Interrupt Driver
  • ​Coding : Using Multiple UART Modules
  • ​Direct Memory Access (DMA) Driver Development
  • Overview of the Direct Memory Access (DMA) Module
  • ​Coding : Developing the ADC DMA Driver
  • ​Coding : Developing the ADC Multi-Channel DMA Driver
  • ​Coding : Developing the UART DMA Driver
  • ​Coding : DMA Memory to Memory Transfer
  • ​Serial Peripheral Interface (SPI) Driver Development
  • Understanding the SPI Protocol
  • ​Coding : Developing the SPI Polling Driver
  • ​Coding : Developing the SPI Interrupt Driver
  • ​Coding : Developing the SPI DMA Driver
  • ​Inter- Integrated Circuit (I2C) Driver Development
  • Understanding the I2C Protocol
  • ​Coding : Writing an I2C Driver to read data from the ADXL345 Accelerometer (Pt1)
  • ​Coding : Writing an I2C Driver to read data from the ADXL345 Accelerometer (Pt2)
  • ​Real Time Clock (RTC) Programming
  • ​Understanding Real Time Clocks
  • ​Coding : Developing the Real Time Clock Driver

3.   Embedded Systems STM32 Low-Layer APIs(LL) Driver Development

STM32 Low-Level (LL) Drivers: ADC, UART, TIMERS, GPIO, SPI, I2C, RTC, WWDG, IWDG, RCC etc

The STM32 Low-Layer APIs ( as known as LL) offers a fast light-weight expert-oriented layer which is closer to the hardware than the HAL APIs (Hardware Abstraction Layer). The LL offers low-level APIs at the register level with better optimization. These require deep knowledge of the MCU and peripheral specifications which we shall cover in this course.

With a programming based approach, this course is designed to give you a solid foundation in firmware and peripheral driver development for the STM32 family of microcontrollers. The goal of this course is to teach you how to navigate the microcontrollers reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware using the STM32 Low-Layer APIs 

By the end of this course you will be able to develop drivers for peripherals like the ADC, UART,PWM, GPIO, TIMER,I2C, SPI, RTC, WWDG, IWDG, RCC, EXTI etc. You will also master the STM32 architecture and how to build professional embedded firmware for STM32 microcontrollers.
  • Introduction
  • ​Downloading the required documentation
  • ​Getting Started
  • ​Downloading CubeIDE
  • ​Installing Packages
  • ​Overview
  • Getting the right STM32 Package
  • ​General Purpose Input/Output Driver Development
  • ​​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding : Developing a GPIO Output Driver
  • ​Coding : Developing a GPIO Input Driver
  • ​Universal Asynchronous-Synchronous Receiver-Transmitter (USART)
  • ​Overview of the UART Protocol
  • ​Coding : Developing a UART Transmitter
  • ​Coding : Developing a UART Receiver
  • Coding : Retargeting printf
  • ​General Purpose Timer Driver Development
  • ​Understanding the System Tick (SysTick) Timer
  • ​Coding : Configuring Systick
  • ​Understanding STM32 Timers
  • ​Coding : Creating timer delays
  • ​Coding : Timer output compare
  • ​Coding : Timer Input Capture
  • ​Analog-to-Digital Converters Driver Development
  • ​Understanding ADC Independents Modes
  • ​Coding : ADC basic driver
  • ​Coding : Transmitting ADC values through the UART
  • ​Real Time Clock (RTC) Programming
  • Understanding Real Time Clocks
  • ​Coding : Developing the RTC Alarm Driver Pt.1 - Configuring the RTC module
  • ​Coding : Developing the RTC Alarm Driver Pt.2 - Initializing the Alarm
  • ​Coding : Developing the RTC Alarm Driver Pt.3 - Displaying the time and dateCoding : Developing the RTC Alarm Driver Pt.4 - Testing the Alarm
  • ​Coding : Capturing Timestamp of events using the RTC
  • ​Coding :Exiting Standby mode using the RTC WakeUp Timer
  • ​Coding : Detecting System Intrusions using the RTC Tamper detector
  • ​Programming the Independent Watchdog (IWDG)
  • ​Overview of the Independent Watchdog
  • ​Coding : Developing the Independent Watchdog driver
  • ​Programming the Power (PWR) Module
  • ​Coding : Putting the system into Standby mode
  • Interrupt Programming
  • ​Understanding Interrupts
  • ​Coding : Input Interrupt Driver
  • ​Coding : ADC Interrupt Driver
  • ​Coding : UART Interrupt Driver
  • ​Direct Memory Access (DMA) Driver Development
  • ​Overview of the Direct Memory Access (DMA) Module
  • ​Coding : ADC Multichannel Driver with DMA (Part I)
  • ​Coding : ADC Multichannel Driver with DMA (Part II)
  • ​Coding : ADC Multichannel Driver with DMA (Part III)
  • ​Coding : ADC Multichannel Driver with DMA (Part IV)
  • ​Coding : ADC Injected Mode Driver (Part I)
  • ​Coding : ADC Injected Mode Driver (Part II)
  • ​Coding : ADC Analog WatchDog Mode Driver
  • ​Coding : UART DMA Case Study (Part I )
  • ​Coding : UART DMA Case Study (Part II)
  • ​Coding : UART DMA Case Study (Part III )
  • ​Coding : UART DMA Case Study (Part IV )
  • ​Inter- Integrated Circuit (I2C) Driver Development -TX
  • ​Understanding the I2C Protocol
  • ​Coding : Implementing the I2C Master Init Function
  • ​Coding : Implementing the I2C Slave Init Function
  • ​Coding : Implementing the I2C Callback Functions
  • ​Coding : Finalizing the application
  • ​Inter- Integrated Circuit (I2C) Driver Development -RxTx
  • ​Coding : Implementing the Init functions
  • ​Coding : Implementing the Callback Functions
  • ​Coding : Implementing the DMA Init Function
  • ​Coding : Implementing the Slave and Master Config Functions
  • ​Coding : Implementing the Interrupt Request Handlers
  • ​Coding : Finalizing the application
  • ​Serial Peripheral Interface (SPI) Driver Development
  • Understanding the SPI Protocol
  • ​Coding : Configuring the SPI Pins
  • ​Coding : Implementing the SPI Master Init functions
  • ​Coding : Implementing the SPI Slave Init functions
  • ​Coding : Implementing the SPI Callback functions
  • ​Coding : Finalizing the project
  • ​Programming the Window Watchdog (WWDG)
  • ​Overview of the Window Watchdog
  • ​Coding : Understanding the STM32 Clock Tree
  • ​Coding : Configuring the Window Watchdog to reset the MCU after a time window

4.   Embedded Systems Bare-Metal Programming Ground Up (STM32F4)

No Libraries used, Professional CMSIS Standard, ARM Cortex, ADC,UART,TIMERS, DMA,SPI,I2C,RTC,GPIO etc.

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for  ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right  information to professionally  build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.

Still keeping it simple, this course comes in different ARM Cortex-M development boards  so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics  STM32F4-NUCLEO which has an ARM Cortex-M4 microcontoller.

By the end of this course you will be able configure microcontroller peripherals  like ADC, UART,PWM, GPIO, TIMER,I2C, SPI, etc.  You will also master the ARM architecture and how to build professional embedded firmware for ARM processors.
  •  Setting Up Keil uVision 5
  • ​Download Keil uVision 5
  • ​Installing Keil uVision 5
  • ​Installing Packs
  • ​Changing the Compiler
  • ​Setting Up Option 2 - STM32CubeIDE
  • ​Download CubeIDE
  • ​Setting Up STM32CubeIDE
  • ​Installing Packages
  • ​Overview
  • ​Writing Bare-Metal C Code with STM32CubeIDE
  • ​​Coding : Writing a GPIO Driver from Scratch (PART I)
  • ​Coding : Writing a GPIO Driver from Scratch (PART II)
  • ​General Purpose Input/Output(GPIO)
  • ​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding : Developing GPIO Driver Using Information from the Datasheet
  • ​Coding : Controlling GPIO using the BSRR Register
  • ​Coding : Reading GPIO Inputs
  • ​Interrupts Programming
  • ​Introduction to Interrupts
  • ​Understanding External Interrupts
  • ​Coding : Developing the GPIO Interrupt Driver
  • ​Coding : Working with Multiple GPIO Interrupts
  • ​Coding : Developing the UART Interrupt Driver
  • ​Coding : Developing the System Tick Interrupt Driver
  • ​Coding : Developing the General Purpose Timer Interrupt Driver
  • ​Interfacing with a Liquid Crystal Display (LCD)
  • ​Coding : Developing the Liquid Crystal Display (LCD) Driver
  • ​Coding : Configuring the Liquid Crystal Display for 4-bit Data Mode
  • ​Inter-Integrated Circuit (I2C)
  • ​Introduction to I2C
  • ​Analyzing the DS1307 Realtime Clock
  • ​Coding : Developing an I2C Driver
  • ​Universal Asynchronous Receiver-Transmitter(UART) 
  • ​Coding : Developing the UART Driver Using Information from the Datasheet
  • ​Overview of the UART Protocol
  • Further discussion on UART Alternate Function configuration
  • ​Coding : Receiving Data with the UART
  • ​Coding : Two-way UART Communication
  • ​System Tick and General Purpose Timers
  • ​Overview of the System Tick Timer
  • ​Overview of General Purpose Timers
  • ​Coding : Developing the System Tick Timer Driver
  • ​Further discussion on System Tick Registers
  • ​Coding : Creating a Delay Function using the System Tick Timer
  • ​Coding : Developing the General Purpose Timer (GPTM) Driver
  • ​Coding : Configuring the General Purpose Timer for Output Compare
  • ​Coding : Configuring the General Purpose Timer for Input Capture
  • ​Coding : Input capture frequency measurement
  • ​Coding : Configuring the General Purpose Timer for PWM Output
  • ​Analog -to- Digital Converter (ADC) Driver Development
  • ​Introduction to Analog to Digital Conversion
  • ​Coding : Developing the ADC Driver
  • ​Coding :Reading the CPU Temperature with the ADC and Displaying it with the UART
  • ​Serial Peripheral Interface (SPI)
  • ​Introduction to Serial Peripheral Interface (SPI)
  • ​Coding : Developing a Simple SPI Driver
  • ​Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part I)
  • ​Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part II)
  • ​Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part III)
  • ​Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part IV)
  • ​...
  • ​...
  • ​...
  • ​so much more

5.   ARM Cortex-M7 STM32F7 Bare-Metal Programming 

No libraries used : ADC, UART, TIMERS, GPIO, SPI, I2C, INTERRUPT etc

Welcome to the ARM Cortex-M7 STM32F7 Bare-Metal Programming course.

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.

Still keeping it simple, this course comes in different ARM Cortex-M development boards so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics STM32F7-NUCLEO which has an ARM Cortex-M7 microcontroller.

By the end of this course you will be able configure microcontroller peripherals like ADC, UART,PWM, GPIO, TIMER,I2C, SPI, etc. You will also master the ARM architecture and how to build professional embedded firmware for ARM processors.
  • Introduction
  • ​Downloading the required documentation
  • ​Getting Started
  • ​Downloading CubeIDE
  • ​Installing Packages
  • ​Overview
  • Getting the right STM32 Package
  • ​General Purpose Input/Output Driver Development
  • ​​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding : Developing a GPIO Output Driver
  • ​Coding : Developing a GPIO Input Driver
  • ​Universal Asynchronous-Synchronous Receiver-Transmitter (USART)
  • ​Overview of the UART Protocol
  • ​Coding : Developing a UART Transmitter
  • ​Coding : Developing a UART Receiver
  • Coding : Retargeting printf
  • ​General Purpose Timer Driver Development
  • ​Understanding the System Tick (SysTick) Timer
  • ​Coding : Configuring Systick
  • ​Understanding STM32 Timers
  • ​Coding : Creating timer delays
  • ​Coding : Timer output compare
  • ​Coding : Timer Input Capture
  • ​Analog-to-Digital Converters Driver Development
  • ​Understanding ADC Independents Modes
  • ​Coding : ADC basic driver
  • ​Coding : Transmitting ADC values through the UART
  • Interrupt Programming
  • ​Understanding Interrupts
  • ​Coding : Input Interrupt Driver
  • ​Coding : ADC Interrupt Driver
  • ​Coding : UART Interrupt Driver
  • ​Inter- Integrated Circuit (I2C) Driver Development -TX
  • ​Understanding the I2C Protocol
  • ​Coding : Implementing the I2C Master Init Function
  • ​Coding : Implementing the I2C Slave Init Function
  • ​Coding : Implementing the I2C Callback Functions
  • ​Coding : Finalizing the application
  • ​Inter- Integrated Circuit (I2C) Driver Development -RxTx
  • ​Coding : Implementing the Init functions
  • ​Coding : Implementing the Callback Functions
  • ​Coding : Implementing the DMA Init Function
  • ​Coding : Implementing the Slave and Master Config Functions
  • ​Coding : Implementing the Interrupt Request Handlers
  • ​Coding : Finalizing the application
  • ​Serial Peripheral Interface (SPI) Driver Development
  • Understanding the SPI Protocol
  • ​Coding : Configuring the SPI Pins
  • ​Coding : Implementing the SPI Master Init functions
  • ​Coding : Implementing the SPI Slave Init functions
  • ​Coding : Implementing the SPI Callback functions
  • ​Coding : Finalizing the project

6.   STM32L4 Bare-Metal Peripheral Drivers Development

No Libraries used, Professional CMSIS Standard, ARM Cortex, ADC,UART,TIMERS, GPIO,SPI,I2C etc.

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.

Still keeping it simple, this course comes in different ARM Cortex-M development boards so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics STM32L4-NUCLEO which has an ARM Cortex-M4 microcontroller.

By the end of this course you will be able configure microcontroller peripherals like ADC, UART,PWM, GPIO, TIMER,I2C, SPI, etc. You will also master the ARM architecture and how to build professional embedded firmware for ARM processors.
  • Introduction
  • ​Downloading the required documentation
  • ​Getting Started
  • ​Downloading CubeIDE
  • ​Installing Packages
  • ​Overview
  • Getting the right STM32 Package
  • ​General Purpose Input/Output Driver Development
  • ​​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding : Developing a GPIO Output Driver
  • ​Coding : Developing a GPIO Input Driver
  • ​Universal Asynchronous-Synchronous Receiver-Transmitter (USART)
  • ​Overview of the UART Protocol
  • ​Coding : Developing a UART Transmitter
  • ​Coding : Developing a UART Receiver
  • Coding : Retargeting printf
  • ​General Purpose Timer Driver Development
  • ​Understanding the System Tick (SysTick) Timer
  • ​Coding : Configuring Systick
  • ​Understanding STM32 Timers
  • ​Coding : Creating timer delays
  • ​Coding : Timer output compare
  • ​Coding : Timer Input Capture
  • ​Analog-to-Digital Converters Driver Development
  • ​Understanding ADC Independents Modes
  • ​Coding : ADC basic driver
  • ​Coding : Transmitting ADC values through the UART
  • Interrupt Programming
  • ​Introduction to Interrupts
  • ​Coding : Developing the GPIO Interrupt Driver
  • ​Coding : Testing the GPIO Interrupt Driver
  • ​Coding : Developing the Systick Interrupt Driver
  • ​Coding : Developing the Timer Interrupt Driver
  • ​Inter- Integrated Circuit (I2C) Driver Development 
  • ​Introduction to I2C
  • ​Coding : Implementing the I2C Slave Config function
  • ​Coding : Implementing the I2C Master Config function
  • ​Coding : Handling the I2C Master Communication sequence
  • ​Coding : Implementing the I2C Slave Device Interrupt Handler
  • ​Serial Peripheral Interface (SPI) Driver Development
  • ​Introduction to Serial Peripheral Interface (SPI)
  • ​Coding : Configuring the SPI Parameters
  • ​Coding : Implementing the SPI Master Config function
  • ​Coding : Implementing the SPI Slave Config function
  • ​Coding : Testing the SPI RxTx Driver

7.   STM32L0 Bare-Metal Peripheral Drivers Development

No libraries used : ADC, UART, TIMERS, GPIO, SPI, INTERRUPT etc

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.

Still keeping it simple, this course comes in different ARM Cortex-M development boards so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics STM32L0-NUCLEO which has an ARM Cortex-M0+ microcontoller.

By the end of this course you will be able configure microcontroller peripherals like ADC, UART,PWM, GPIO, TIMER,I2C, SPI, etc. You will also master the ARM architecture and how to build professional embedded firmware for ARM processors.
  • Introduction
  • ​Downloading the required documentation
  • ​Getting Started
  • ​Downloading CubeIDE
  • ​Installing Packages
  • ​Overview
  • Getting the right STM32 Package
  • ​General Purpose Input/Output Driver Development
  • ​​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding : Developing a GPIO Output Driver
  • ​Coding : Developing a GPIO Input Driver
  • ​Universal Asynchronous-Synchronous Receiver-Transmitter (USART)
  • ​Overview of the UART Protocol
  • ​Coding : Developing a UART Transmitter
  • ​Coding : Developing a UART Receiver
  • Coding : Retargeting printf
  • ​General Purpose Timer Driver Development
  • ​Understanding the System Tick (SysTick) Timer
  • ​Coding : Configuring Systick
  • ​Understanding STM32 Timers
  • ​Coding : Creating timer delays
  • ​Coding : Timer output compare
  • ​Coding : Timer Input Capture
  • ​Analog-to-Digital Converters Driver Development
  • ​Introduction to Analog to Digital Conversion
  • ​Understanding ADC Independents Modes
  • ​Coding : Developing the ADC Driver - Pt.1 Locating the ADC Bus
  • ​Coding : Developing the ADC Driver - Pt.2 Implementing the ADC Init Function
  • ​Coding : Developing the ADC Driver - Pt.3 Testing the ADC Driver
  • ​Coding : Developing the ADC Driver - Pt.3 Testing the ADC Driver
  • ​Coding : Developing the ADC Single Conversion Driver
  • Interrupt Programming
  • ​Introduction to Interrupts
  • ​Coding : Developing the GPIO Interrupt Driver
  • ​Coding : Testing the GPIO Interrupt Driver
  • ​Coding : Developing the Systick Interrupt Driver
  • ​Coding : Developing the Timer Interrupt Driver
  • ​Serial Peripheral Interface (SPI) Driver Development
  • ​Introduction to Serial Peripheral Interface (SPI)
  • ​Coding : Configuring the SPI GPIO pins
  • ​Coding : Configuring the SPI Parameters
  • ​Coding : Implementing the SPI Transmit function
  • ​Coding : Implementing the SPI Receive function
  • ​Coding : Developing the SPI ADXL345 accelerometer driver
  • ​Coding : Testing the Accelerometer driver

8.    STM32F3 Bare-Metal Peripheral Drivers Development

No libraries used : ADC, UART, TIMERS, GPIO, SPI, SYSTICK, INTERRUPT etc

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.

Still keeping it simple, this course comes in different ARM Cortex-M development boards so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics STM32F33-NUCLEO which has an ARM Cortex-M4 microcontroller.

By the end of this course you will be able configure microcontroller peripherals like ADC, UART,PWM, GPIO, TIMER,I2C, SPI, etc. You will also master the ARM architecture and how to build professional embedded firmware for ARM processors.

  • Introduction
  • ​Downloading the required documentation
  • ​Getting Started
  • ​Downloading CubeIDE
  • ​Installing Packages
  • ​Overview
  • Getting the right STM32 Package
  • ​General Purpose Input/Output Driver Development
  • ​​Overview of ARM Cortex-M General Purpose Input/Output Module
  • ​Coding : Developing a GPIO Output Driver
  • ​Coding : Developing a GPIO Input Driver
  • ​Universal Asynchronous-Synchronous Receiver-Transmitter (USART)
  • ​Overview of the UART Protocol
  • ​Coding : Developing a UART Transmitter
  • ​Coding : Developing a UART Receiver
  • Coding : Retargeting printf
  • ​General Purpose Timer Driver Development
  • ​Understanding the System Tick (SysTick) Timer
  • ​Coding : Configuring Systick
  • ​Understanding STM32 Timers
  • ​Coding : Creating timer delays
  • ​Coding : Timer output compare
  • ​Coding : Timer Input Capture
  • ​Analog-to-Digital Converters Driver Development
  • ​Introduction to Analog to Digital Conversion
  • ​Understanding ADC Independents Modes
  • ​Coding : Developing the ADC Driver - Pt.1 Locating the ADC Bus
  • ​Coding : Developing the ADC Driver - Pt.2 Implementing the ADC Init Function
  • ​Coding : Developing the ADC Driver - Pt.3 Testing the ADC Driver
  • ​Coding : Developing the ADC Driver - Pt.3 Testing the ADC Driver
  • ​Coding : Developing the ADC Single Conversion Driver
  • Interrupt Programming
  • ​Introduction to Interrupts
  • ​Coding : Developing the GPIO Interrupt Driver
  • ​Coding : Testing the GPIO Interrupt Driver
  • ​Coding : Developing the Systick Interrupt Driver
  • ​Coding : Developing the Timer Interrupt Driver
  • ​Serial Peripheral Interface (SPI) Driver Development
  • ​Introduction to Serial Peripheral Interface (SPI)
  • ​Coding : Configuring the SPI GPIO pins
  • ​Coding : Configuring the SPI Parameters
  • ​Coding : Implementing the SPI Transmit function
  • ​Coding : Implementing the SPI Receive function
  • ​Coding : Developing the SPI ADXL345 accelerometer driver
  • ​Coding : Testing the Accelerometer driver
NOT UNDERSTANDING THE CODE


Sometimes I could get my firmware to work but I couldn’t understand a large portion of the code.

I didn’t know what some of the registers were doing. "Why do we write this hexadecimal number into that particular register ?" I would often ask.
CODE NOT WORKING - WASTED TIME

Other times I could understand every line of code in the firmware but couldn’t get the firmware to work.
CANNOT BUILD ANYTHING NEW -LACK OF CONFIDENCE, IMPOSTER

Because I wasn’t good enough, I couldn’t build exactly what I wanted if there were no already made drivers and libraries out there that I could use. Worst of all I couldn’t even get another microcontroller to work apart from the microcontroller used in class.
Long story short, I overcame all of this....
I devised a plan to master the fundamentals...
Quickly read the sections of interest in the datasheet...
Created my own firmware development checklist...
Created my own study guide...

I started creating courses to help other people like yourself master embedded systems development in the most efficient way possible, no waste of time, no frustrations. There is no need for you to go through the same roadblocks and frustrations I went through  some years ago.
Our  courses have been reviewed by 1000+ students
Here are some of the reviews

Now it's time for you also to benefit from the...

Modern Embedded-C 
From Ground Up

Here's a recap of

EVERYTHING You'll Get

When You Purchase This AMAZING Offer!

  • 1. Mastering STM32CubeMX 5 and CubeIDE ($49.99 Value)
  • ​2. Embedded Systems STM32 HAL APIs Driver Development ($49.99 Value)
  • 3. Embedded Systems STM32 Low-Layer APIs(LL) Driver Development ($49.99 Value)
  • 4. Embedded Systems Bare-Metal Programming Ground Up(STM32F4) ($49.9 Value)
  • 5. ARM Cortex-M7 STM32F7 Bare-Metal Programming ($39.99 Value)
  • ​6. STM32L4 Bare-Metal Peripheral Drivers Development ($39.99 Value)
  • ​7. STM32L0 Bare-Metal Peripheral Drivers Development ($39.99 Value)
  • ​8. STM32F3 Bare-Metal Peripheral Drivers Development ($39.99 Value)
Total Value: $359.92
But today, you're getting all of this...
For Only $159.98

 30 Day Money Back Guarantee

Remember, I have no doubt you will love the training but should in case you are not completely satisfied you can request a refund within 30 days of purchase and you shall be fully refunded with no questions asked.

Sounds fair ? 
I know there are some websites out there that offer you something cool for a low price, but then stick you into some program that charges your card every month.
This isn't one of them. There's NO hidden cost.

Thanks for taking the time to read this letter and I hope you enjoy the training!

-Israel N Gbati