Embedded Systems Bare Metal Programming

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

Last updated 2022-01-10 | 4.5

- 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

What you'll 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’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

* Requirements

* No programming experience needed - I'll teach you everything you need to know.
* We shall be using the STM32 IDE which is FREE.

Description

  • 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

Course content

25 sections • 136 lectures

Downloading our Integrated Development Environment (IDE) Preview 02:34

Installing our Integrated Development Environment (IDE) Preview 02:38

Getting the right Documentation for Bare-Metal Development Preview 06:06

Coding : Locating the Ports and Pins of Components on the Nucleo board Preview 08:01

Coding : Defining Addresses of Modules using information from the Documentation Preview 20:54

Coding : Creating required Registers using Information from Documentation Preview 19:32

Coding : Configuring Pins using the Registers we Created Preview 09:19

Coding : Creating Registers from Structure Members Preview 20:49

Notice Preview 00:04

Overview of ARM Cortex-M General Purpose Input/Output Module Preview 07:24

Coding : Developing the GPIO Output Driver Preview 28:16

Coding : Controlling GPIO Outputs using the Bit Set/Reset Register (BSRR) Preview 06:07

Coding : Developing the GPIO Input Driver Preview 11:36

Overview of the UART Protocol Preview 07:43

Coding : Developing the UART Transmitter Driver Preview 27:12

Coding : Testing the UART Transmitter Driver Preview 08:17

Coding : Retargeting printf Preview 02:57

Coding : Making the Driver more Modular Preview 04:15

Coding : Developing the UART Receiver Driver Preview 08:20

Coding : Testing the UART Receiver Driver Preview 04:56

Introduction to Analog to Digital Conversion Preview 04:02

Understanding ADC Independents Modes Preview 08:38

Coding : Developing the ADC Single Conversion Driver Preview 36:52

Coding : Developing the ADC Continuous Conversion Driver Preview 03:56

Overview of the System Tick Timer Preview 07:51

Coding : Developing the System Tick Timer Driver Preview 17:14

Overview of General Purpose Timers Preview 09:32

Commonly used Timer registers Preview 03:32

Coding : Developing the General Purpose Timer Driver Preview 13:40

Coding : Developing the Timer Output Compare Driver Preview 19:25

Coding : Developing the Timer Input Capture Driver Preview 23:54

Introduction to Interrupts Preview 19:44

Coding : Developing the GPIO Interrupt Driver Preview 17:33

Coding : Testing the GPIO Interrupt Driver Preview 10:15

Coding : Developing the UART Receiver Interrupt Driver Preview 13:11

Coding : Developing the ADC Interrupt Driver Preview 09:34

Coding : Developing the Systick Interrupt Driver Preview 07:45

Coding : Developing the Timer Interrupt Driver Preview 07:24

Overview of the Direct Memory Access (DMA) Module Preview 12:23

Coding : Developing the UART Transmitter DMA Driver Pt.1 Preview 10:13

Coding : Developing the UART Transmitter DMA Driver Pt.2 Preview 23:54

Coding : Testing the UART Transmitter DMA Driver Preview 14:55

Introduction to I2C Preview 09:21

Coding : Implementing the I2C Init function Preview 20:15

Coding : Implementing the I2C Byte Read function Preview 14:49

Coding : Implementing the I2C Burst Read function Preview 07:16

Coding : Implementing the I2C Burst Write function Preview 05:45

Coding : Configuring the ADXL345 Accelerometer using the I2C driver Preview 22:29

Coding : Testing the ADXL345 Accelerometer using the I2C driver Preview 12:30

Introduction to Serial Peripheral Interface (SPI) Preview 11:19

Coding : Implementing the SPI GPIO Initialization function Preview 10:49

Coding : Configuring the SPI Parameters Preview 08:44

Coding : Implementing the SPI Transmit Preview 07:33

Coding : Implementing the SPI Receive Preview 06:02

Coding : Configuring the ADXL345 Accelerometer using the SPI Driver Preview 15:01

Coding : Testing our ADXL345 Driver Preview 02:50

Download Keil uVision 5 Preview 01:18

Installing Keil uVision 5 Preview 01:51

Notice Preview 00:05

Installing Packs Preview 04:19

Changing the Compiler Preview 01:53

Overview of ARM Cortex-M General Purpose Input/Output Module Preview 07:24

Coding : Developing GPIO Driver Using Information from the Datasheet Preview 48:50

Understanding the BSRR Register Preview 01:29

Coding : Controlling GPIO using the BSRR Register Preview 15:39

Coding : Reading GPIO Inputs Preview 11:11

Notice Preview 00:03

Notice Preview 00:04

Coding : Writing a GPIO Driver from Scratch (PART I) Preview 34:02

Coding : Writing a GPIO Driver from Scratch (PART II) Preview 17:29

Overview of the UART Protocol Preview 07:43

Commonly used UART registers Preview 03:26

Coding : Developing the UART Driver Using Information from the Datasheet Preview 30:59

Further discussion on UART Alternate Function configuration Preview 07:52

Coding : Receiving Data with the UART Preview 21:55

Coding : Two-way UART Communication Preview 21:53

Overview of the System Tick Timer Preview 07:51

Overview of General Purpose Timers Preview 09:32

Commonly used Timer registers Preview 03:32

Coding : Developing the System Tick Timer Driver Preview 06:49

Further discussion on System Tick Registers Preview 03:14

Coding : Creating a Delay Function using the System Tick Timer Preview 11:33

Coding : Developing the General Purpose Timer (GPTM) Driver Preview 13:04

Coding : Configuring the General Purpose Timer for Output Compare Preview 12:03

Coding : Configuring the General Purpose Timer for Input Capture Preview 23:40

Coding : Input capture frequency measurement Preview 17:41

Coding : Configuring the General Purpose Timer for PWM Output Preview 09:26

Introduction to Interrupts Preview 19:44

Understanding External Interrupts Preview 09:32

Coding : Developing the GPIO Interrupt Driver Preview 18:49

Coding : Working with Multiple GPIO Interrupts Preview 23:00

Coding : Developing the UART Interrupt Driver Preview 14:10

Coding : Developing the System Tick Interrupt Driver Preview 09:22

Coding : Developing the General Purpose Timer Interrupt Driver Preview 12:05

Introduction to Analog to Digital Conversion Preview 04:02

Coding : Developing the ADC Driver Preview 18:12

Coding :Reading the CPU Temperature with the ADC and Displaying it with the UART Preview 23:34

Coding : Developing the Liquid Crystal Display (LCD) Driver Preview 29:03

Coding : Configuring the Liquid Crystal Display for 4-bit Data Mode Preview 18:47

Introduction to I2C Preview 09:21

Analyzing the DS1307 Realtime Clock Preview 06:07

Coding : Developing an I2C Driver Preview 28:49

Introduction to Serial Peripheral Interface (SPI) Preview 11:19

Coding : Developing a Simple SPI Driver Preview 15:12

Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part I) Preview 30:53

Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part II) Preview 10:44

Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part III) Preview 14:34

Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part IV) Preview 26:22

The RISC Design Philosohpy Preview 03:43

The ARM Design Philosophy Preview 03:06

Embedded Systems with ARM Processors Preview 03:11

ARM Bus Technology and AMBA Bus Protocol Preview 02:14

Memory Preview 07:57

Peripherals Preview 02:23

Von Nuemann and Harvard architecture Preview 03:46

Cache and Tightly Couple Memory Preview 03:40

Memory Management extensions Preview 02:29

Cooprocessor extensions Preview 01:18

Data Types Preview 02:51

Processor Modes Preview 05:22

ARM7TDMI Registers Preview 07:52

ARM7TDMI Vector Table Preview 02:22

ARM Cortex-M Registers Preview 04:35

ARM Cortex-M Vector Table Preview 01:10

ARM Data Flow Model Preview 03:44

The Pipeline Preview 04:08

ARM Processor Family Preview 01:55

ARM Cortex-A and Cortex-R Preview 01:42

ARM Cortex-M Preview 01:31