Course Highlights
  • 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’s 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
Skills you will learn!
Curriculum

9 Topics
Downloading our Integrated Development Environment (IDE)
Installing our Integrated Development Environment (IDE)
Getting the right Documentation for Bare-Metal Development
Coding : Locating the Ports and Pins of Components on the Nucleo board
Coding : Defining Addresses of Modules using information from the Documentation
Coding : Creating required Registers using Information from Documentation
Coding : Configuring Pins using the Registers we Created
Coding : Creating Registers from Structure Members
Notice

4 Topics
Overview of ARM Cortex-M General Purpose Input/Output Module
Coding : Developing the GPIO Output Driver
Coding : Controlling GPIO Outputs using the Bit Set/Reset Register (BSRR)
Coding : Developing the GPIO Input Driver

7 Topics
Overview of the UART Protocol
Coding : Developing the UART Transmitter Driver
Coding : Testing the UART Transmitter Driver
Coding : Retargeting printf
Coding : Making the Driver more Modular
Coding : Developing the UART Receiver Driver
Coding : Testing the UART Receiver Driver

4 Topics
Introduction to Analog to Digital Conversion
Understanding ADC Independents Modes
Coding : Developing the ADC Single Conversion Driver
Coding : Developing the ADC Continuous Conversion Driver

2 Topics
Overview of the System Tick Timer
Coding : Developing the System Tick Timer Driver

5 Topics
Overview of General Purpose Timers
Commonly used Timer registers
Coding : Developing the General Purpose Timer Driver
Coding : Developing the Timer Output Compare Driver
Coding : Developing the Timer Input Capture Driver

7 Topics
Introduction to Interrupts
Coding : Developing the GPIO Interrupt Driver
Coding : Testing the GPIO Interrupt Driver
Coding : Developing the UART Receiver Interrupt Driver
Coding : Developing the ADC Interrupt Driver
Coding : Developing the Systick Interrupt Driver
Coding : Developing the Timer Interrupt Driver

4 Topics
Overview of the Direct Memory Access (DMA) Module
Coding : Developing the UART Transmitter DMA Driver Pt.1
Coding : Developing the UART Transmitter DMA Driver Pt.2
Coding : Testing the UART Transmitter DMA Driver

7 Topics
Introduction to I2C
Coding : Implementing the I2C Init function
Coding : Implementing the I2C Byte Read function
Coding : Implementing the I2C Burst Read function
Coding : Implementing the I2C Burst Write function
Coding : Configuring the ADXL345 Accelerometer using the I2C driver
Coding : Testing the ADXL345 Accelerometer using the I2C driver

7 Topics
Introduction to Serial Peripheral Interface (SPI)
Coding : Implementing the SPI GPIO Initialization function
Coding : Configuring the SPI Parameters
Coding : Implementing the SPI Transmit
Coding : Implementing the SPI Receive
Coding : Configuring the ADXL345 Accelerometer using the SPI Driver
Coding : Testing our ADXL345 Driver

1 Topic
Introduction

5 Topics
Download Keil uVision 5
Installing Keil uVision 5
Notice
Installing Packs
Changing the Compiler

6 Topics
Overview of ARM Cortex-M General Purpose Input/Output Module
Coding : Developing GPIO Driver Using Information from the Datasheet
Understanding the BSRR Register
Coding : Controlling GPIO using the BSRR Register
Coding : Reading GPIO Inputs
Notice

3 Topics
Notice
Coding : Writing a GPIO Driver from Scratch (PART I)
Coding : Writing a GPIO Driver from Scratch (PART II)

6 Topics
Overview of the UART Protocol
Commonly used UART registers
Coding : Developing the UART Driver Using Information from the Datasheet
Further discussion on UART Alternate Function configuration
Coding : Receiving Data with the UART
Coding : Two-way UART Communication

11 Topics
Overview of the System Tick Timer
Overview of General Purpose Timers
Commonly used Timer registers
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

7 Topics
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

3 Topics
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

2 Topics
Coding : Developing the Liquid Crystal Display (LCD) Driver
Coding : Configuring the Liquid Crystal Display for 4-bit Data Mode

3 Topics
Introduction to I2C
Analyzing the DS1307 Realtime Clock
Coding : Developing an I2C Driver

6 Topics
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)

10 Topics
The RISC Design Philosohpy
The ARM Design Philosophy
Embedded Systems with ARM Processors
ARM Bus Technology and AMBA Bus Protocol
Memory
Peripherals
Von Nuemann and Harvard architecture
Cache and Tightly Couple Memory
Memory Management extensions
Cooprocessor extensions

11 Topics
Data Types
Processor Modes
ARM7TDMI Registers
ARM7TDMI Vector Table
ARM Cortex-M Registers
ARM Cortex-M Vector Table
ARM Data Flow Model
The Pipeline
ARM Processor Family
ARM Cortex-A and Cortex-R
ARM Cortex-M

5 Topics
Downloading CubeIDE
Setting Up STM32CubeIDE
Quick Notice
Installing Packages
Overview

1 Topic
Closing Remarks

  Write a Review

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

Go to Paid Course