HOME > Development > Embedded Systems Bare-Metal Programming Ground Up™ (STM32)

Embedded Systems Bare-Metal Programming Ground Up™ (STM32)

  • Development
  • Apr 28, 2025
SynopsisEmbedded Systems Bare-Metal Programming Ground Up& (STM32 , a...
Embedded Systems Bare-Metal Programming Ground Up™ (STM32)  No.1

Embedded Systems Bare-Metal Programming Ground Up& (STM32), available at $109.99, has an average rating of 4.56, with 136 lectures, based on 2570 reviews, and has 15461 subscribers.

You will learn about Write firmware using only bare-metal embedded-c Understand the Cortex-M Architecture Write Analog-to-Digital Converter (ADC) drivers using bare-metal embedded-c Write PWM drivers using bare-metal embedded-c Write UART drivers using bare-metal embedded-c Write TIMER drivers using bare-metal embedded-c Write Interrupt drivers using bare-metal embedded-c Write SPI drivers using bare-metal embedded-c Write I2C drivers using bare-metal embedded-c Master the ARM-Cortex CMSIS standard Write DMA drivers using bare-metal embedded-c Build every single line of code from scratch by writing to the microcontroller鈥檚 memory space directly. Use No third party libraries or header files Understand and write every single line of code yourself- no Copy/Paste Use the debugger effectively to analyze and resolve any bugs Develop proficiency in your embedded development skills and confidently take the next steps Define addresses for the different peripherals Analyze the chip documentation Create registers from the addresses This course is ideal for individuals who are If you are an absolute beginner to embedded systems, then take this course. or If you are an experienced embedded developer and want to learn how to professionally develop embedded applications for ARM processors, then take this course. It is particularly useful for If you are an absolute beginner to embedded systems, then take this course. or If you are an experienced embedded developer and want to learn how to professionally develop embedded applications for ARM processors, then take this course.

Enroll now: Embedded Systems Bare-Metal Programming Ground Up& (STM32)

Summary

Title: Embedded Systems Bare-Metal Programming Ground Up& (STM32)

Price: $109.99

Average Rating: 4.56

Number of Lectures: 136

Number of Published Lectures: 136

Number of Curriculum Items: 136

Number of Published Curriculum Objects: 136

Original Price: $109.99

Quality Status: approved

Status: Live

What You Will Learn

  • Write firmware using only bare-metal embedded-c
  • Understand the Cortex-M Architecture
  • Write Analog-to-Digital Converter (ADC) drivers using bare-metal embedded-c
  • Write PWM drivers using bare-metal embedded-c
  • Write UART drivers using bare-metal embedded-c
  • Write TIMER drivers using bare-metal embedded-c
  • Write Interrupt drivers using bare-metal embedded-c
  • Write SPI drivers using bare-metal embedded-c
  • Write I2C drivers using bare-metal embedded-c
  • Master the ARM-Cortex CMSIS standard
  • Write DMA drivers using bare-metal embedded-c
  • Build every single line of code from scratch by writing to the microcontroller鈥檚 memory space directly.
  • Use No third party libraries or header files
  • Understand and write every single line of code yourself- no Copy/Paste
  • Use the debugger effectively to analyze and resolve any bugs
  • Develop proficiency in your embedded development skills and confidently take the next steps
  • Define addresses for the different peripherals
  • Analyze the chip documentation
  • Create registers from the addresses
  • Who Should Attend

  • If you are an absolute beginner to embedded systems, then take this course.
  • If you are an experienced embedded developer and want to learn how to professionally develop embedded applications for ARM processors, then take this course.
  • Target Audiences

  • If you are an absolute beginner to embedded systems, then take this course.
  • If you are an experienced embedded developer and want to learn how to professionally develop embedded applications for ARM processors, then take this course.
  • Are you tired of Copying and Pasting code you don’t understand?

    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 themicrocontroller 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.

    So with that understood, let me tell you鈥?/p>

                                                                                         Exactly What You鈥檙e Getting

    This is dramatically different from any course you have ever taken because it鈥檚 more of a professional hands-on 鈥渇ield guide鈥?to stm32 bare metal firmware development.
    The reason why is because there鈥檚 no fluff or filler. It immediately gets down to the actual subject, showing you exactly what to do, how to do it, and why.

    Plus, it鈥檚 easy.

    And you鈥檒l immediately 鈥済et鈥?the entire mythology I personally use to build firmware for consumer devices in my professional life.

                                                                         

                                                                             It’s About MORE Than Just Getting the Code to Work

    See, this course will change your professional life forever. Here is what one student had to say about the course :

      “I would suggest this course for all the beginners. The concepts have been covered in the right sequence.And also the best part of this lecture series is getting to know how to explore the reference manual and datasheets.”

    Here is what another student had to say :

        “Extremly helpful to get to understand the uC programming deeper! For me it is much easier from now to develop code because I undertstand the base behind, so I’m more confident and more experienced to develop and debug the code. Really, this course is very useful to link the hardware knowledge with the coding skills. This fills the gap between them. Thanks for it! 馃檪

    A third student :

    I am a professional semiconductor chipset application engineer with 30 years in global embedded product design in system applications. I can say this teacher is very straight forward by sharing his many years knowledge to the students with his true heart. Yes. I love his teaching pace and style!

                                                                                   Taken by 8000+ Students with 1000+ Reviews

    If at least one of the following applies to you then keep reading if not then simply skip this course:

    Escape From “

    1. Copying/Pasting code you don鈥檛 understand

    2. Using third party libraries and header files like HAL, LL and StdPeriph

    3. Experiencing bugs you don鈥檛 understand

    4. Being afraid of technical documentations like the reference manual and datasheet of the chip

    5. Imposter syndrome

    ” Arrive At

    1. Building every single line of code from scratch by writing to the microcontroller鈥檚 memory space directly.

    2. Using No third party libraries or header files

    3. Understanding and writing every single line of code yourself- no Copy/Paste

    4. Using the debugger effectively to analyze and resolve any bugs

    5. Developing proficiency in your embedded development skills and confidently take the next steps

    So like I said, there鈥檚 more than just getting each piece of code to work.

    Here鈥檚 an overview of what you鈥檙e getting

  • Analyzing the chip documentations:

    Before developing the firmware for any chip you have to learn how to read the documentation provided by the chip manufacturer.

  • Defining Peripheral address

    All components on the microcontroller have an address range. To write to a component or read from a component you need to locate its address range in the documentation and properly define the addresses in your code.

  • Creating registers from the address:

    The addresses in the address range of a component represent the registers of that component. To access these registers you have effectively typecast the addresses.

  • Understanding CMSIS:

    Cortex-Microcontroller Interface Standard (CMSIS)CMSIS is a standard developed by Arm for all Cortex-Microcontrollers. This is the standard used in professional firmware development

  • But it gets better because you鈥檙e also getting鈥?/p>

                                                             Deep Lessons on Developing Peripheral Drivers

    You will learn how to develop bare-metal drivers for the following peripherals :

  • Analog-to-Digital Converter (ADC)

  • 鈥婼erial Peripheral Interface (SPI)

  • Inter-Integrated Circuit (I2C)

  • Direct Memory Access (DMA)

  • Nested Vector Interrupt Controller (NVIC)

  • General Purpose Timers (TIM)

  • System Tick Timer (SysTick)

  • General Purpose Input/Output (GPIO)

  •                                                            Specially Designed For People Who Hate Copy/Paste

    Listen. If you don鈥檛 like 鈥淐opy/Paste鈥?you鈥檙e not alone. I can鈥檛 stand it either. I鈥檇 literally rather have a piece of code that I wrote from scratch that doesn鈥檛 work than someone else鈥檚 working code I copied and pasted.

    And that鈥檚 why I鈥檝e spent months designing and recording this course in which I show you how to locate every single register used and the meaning of every hexadecimal value written into the register.

    Also it comes with a money back guarantee so you have nothing to loose.

    Course Curriculum

    Chapter 1: Getting Started – Constructing Peripheral Registers from Memory Addresses

    Lecture 1: Downloading our Integrated Development Environment (IDE)

    Lecture 2: Installing our Integrated Development Environment (IDE)

    Lecture 3: Getting the right Documentation for Bare-Metal Development

    Lecture 4: Coding : Locating the Ports and Pins of Components on the Nucleo board

    Lecture 5: Coding : Defining Addresses of Modules using information from the Documentation

    Lecture 6: Coding : Creating required Registers using Information from Documentation

    Lecture 7: Coding : Configuring Pins using the Registers we Created

    Lecture 8: Coding : Creating Registers from Structure Members

    Lecture 9: Notice

    Chapter 2: General Purpose Input/Output(GPIO)

    Lecture 1: Overview of ARM Cortex-M General Purpose Input/Output Module

    Lecture 2: Coding : Developing the GPIO Output Driver

    Lecture 3: Coding : Controlling GPIO Outputs using the Bit Set/Reset Register (BSRR)

    Lecture 4: Coding : Developing the GPIO Input Driver

    Chapter 3: Universal Asynchronous Receiver-Transmitter(UART)

    Lecture 1: Overview of the UART Protocol

    Lecture 2: Coding : Developing the UART Transmitter Driver

    Lecture 3: Coding : Testing the UART Transmitter Driver

    Lecture 4: Coding : Retargeting printf

    Lecture 5: Coding : Making the Driver more Modular

    Lecture 6: Coding : Developing the UART Receiver Driver

    Lecture 7: Coding : Testing the UART Receiver Driver

    Chapter 4: Analog to Digital Conversion (ADC)

    Lecture 1: Introduction to Analog to Digital Conversion

    Lecture 2: Understanding ADC Independents Modes

    Lecture 3: Coding : Developing the ADC Single Conversion Driver

    Lecture 4: Coding : Developing the ADC Continuous Conversion Driver

    Chapter 5: The System Tick (SysTick) Timer

    Lecture 1: Overview of the System Tick Timer

    Lecture 2: Coding : Developing the System Tick Timer Driver

    Chapter 6: General Purpose Timers

    Lecture 1: Overview of General Purpose Timers

    Lecture 2: Commonly used Timer registers

    Lecture 3: Coding : Developing the General Purpose Timer Driver

    Lecture 4: Coding : Developing the Timer Output Compare Driver

    Lecture 5: Coding : Developing the Timer Input Capture Driver

    Chapter 7: Interrupt Programming

    Lecture 1: Introduction to Interrupts

    Lecture 2: Coding : Developing the GPIO Interrupt Driver

    Lecture 3: Coding : Testing the GPIO Interrupt Driver

    Lecture 4: Coding : Developing the UART Receiver Interrupt Driver

    Lecture 5: Coding : Developing the ADC Interrupt Driver

    Lecture 6: Coding : Developing the Systick Interrupt Driver

    Lecture 7: Coding : Developing the Timer Interrupt Driver

    Chapter 8: Direct Memory Access (DMA) Driver Development

    Lecture 1: Overview of the Direct Memory Access (DMA) Module

    Lecture 2: Coding : Developing the UART Transmitter DMA Driver Pt.1

    Lecture 3: Coding : Developing the UART Transmitter DMA Driver Pt.2

    Lecture 4: Coding : Testing the UART Transmitter DMA Driver

    Chapter 9: Inter-Integrated Circuit (I2C)

    Lecture 1: Introduction to I2C

    Lecture 2: Coding : Implementing the I2C Init function

    Lecture 3: Coding : Implementing the I2C Byte Read function

    Lecture 4: Coding : Implementing the I2C Burst Read function

    Lecture 5: Coding : Implementing the I2C Burst Write function

    Lecture 6: Coding : Configuring the ADXL345 Accelerometer using the I2C driver

    Lecture 7: Coding : Testing the ADXL345 Accelerometer using the I2C driver

    Chapter 10: Serial Peripheral Interface (SPI)

    Lecture 1: Introduction to Serial Peripheral Interface (SPI)

    Lecture 2: Coding : Implementing the SPI GPIO Initialization function

    Lecture 3: Coding : Configuring the SPI Parameters

    Lecture 4: Coding : Implementing the SPI Transmit

    Lecture 5: Coding : Implementing the SPI Receive

    Lecture 6: Coding : Configuring the ADXL345 Accelerometer using the SPI Driver

    Lecture 7: Coding : Testing our ADXL345 Driver

    Chapter 11: Start of Old Version of the Course – Introduction

    Lecture 1: Introduction

    Chapter 12: Set Up

    Lecture 1: Download Keil uVision 5

    Lecture 2: Installing Keil uVision 5

    Lecture 3: Notice

    Lecture 4: Installing Packs

    Lecture 5: Changing the Compiler

    Chapter 13: General Purpose Input/Output(GPIO)

    Lecture 1: Overview of ARM Cortex-M General Purpose Input/Output Module

    Lecture 2: Coding : Developing GPIO Driver Using Information from the Datasheet

    Lecture 3: Understanding the BSRR Register

    Lecture 4: Coding : Controlling GPIO using the BSRR Register

    Lecture 5: Coding : Reading GPIO Inputs

    Lecture 6: Notice

    Chapter 14: Writing Bare-Metal C Code with STM32CubeIDE

    Lecture 1: Notice

    Lecture 2: Coding : Writing a GPIO Driver from Scratch (PART I)

    Lecture 3: Coding : Writing a GPIO Driver from Scratch (PART II)

    Chapter 15: Universal Asynchronous Receiver-Transmitter(UART)

    Lecture 1: Overview of the UART Protocol

    Lecture 2: Commonly used UART registers

    Lecture 3: Coding : Developing the UART Driver Using Information from the Datasheet

    Lecture 4: Further discussion on UART Alternate Function configuration

    Lecture 5: Coding : Receiving Data with the UART

    Lecture 6: Coding : Two-way UART Communication

    Chapter 16: System Tick and General Purpose Timers

    Lecture 1: Overview of the System Tick Timer

    Lecture 2: Overview of General Purpose Timers

    Lecture 3: Commonly used Timer registers

    Lecture 4: Coding : Developing the System Tick Timer Driver

    Lecture 5: Further discussion on System Tick Registers

    Lecture 6: Coding : Creating a Delay Function using the System Tick Timer

    Lecture 7: Coding : Developing the General Purpose Timer (GPTM) Driver

    Instructors

  • Embedded Systems Bare-Metal Programming Ground Up™ (STM32)  No.2
    Israel Gbati
    Embedded Firmware Engineer
  • Embedded Systems Bare-Metal Programming Ground Up™ (STM32)  No.3
    BHM Engineering Academy
    21st Century Engineering Academy
  • Rating Distribution

  • 1 stars: 28 votes
  • 2 stars: 42 votes
  • 3 stars: 248 votes
  • 4 stars: 903 votes
  • 5 stars: 1349 votes
  • Frequently Asked Questions

    How long do I have access to the course materials?

    You can view and review the lecture materials indefinitely, like an on-demand channel.

    Can I take my courses with me wherever I go?

    Definitely! If you have an internet connection, courses on Udemy are available on any device at any time. If you don’t have an internet connection, some instructors also let their students download course lectures. That’s up to the instructor though, so make sure you get on their good side!