ARM BareMetal Scheduler(RTOS functionality)and device driver
What you'll learn
- End-to-end embedded firmware development flow
- STM32 device Driver
- ARM processor set-up, interrupts and context switch
- Writting Linker scripts
- Writting start-up ARM assembly code
- Embedded C programming basics
- Interfacing with Microcontroller peripherals
- GNU Debugger (GDB)
- ARM microcontroller internals overview
- RTOS concepts
Requirements
- Knowledge of C is better to have but lessons are self-contained
Description
Have you ever wondered how a few snippets of characters make a silicon chunk to blink an LED?
This course will explain the ARM M4 microcontroller start-up process and will walk though Assembly and C code to bring up the microcontroller. We will code some simple drivers to blink an LED and proceed to create a simple terminal user interface (TUI) using UART. We will also build a simple task scheduler so that multiple tasks can run in a round-robin way.
This is a self contained beginner friendly approach to introduce concepts by writing simple and complete functional code that works on a Nucleo Board. This course performs hands on coding to build, flash and debug a simple functional real time baremetal code to run on STM32F446RE Nucleo Board. A prior knowledge of C is preferable.
We will learn the following as we code through this course.
Essentials
How to refer essential Reference Documents - STM32F446 Datasheet, Programming Manual and Reference Manual
Usage of opensource tools. A lot of documentation is available in public for these tools and can be used free of cost. Tool set-up is not covered here.
Elaborates ARM Microcontroller start-up process.
Code following for minimal baremetal code
Linker File
Start-up Assembly Code
Makefile
C code sections and how to prepare microcontroller to C code compiled with GCC.
Flashing with OpenOCD
Debugging and tracing code with GDB
Extending Code
Extending C code to blink LED
Extending C code to transmit and receive via UART for a terminal user interface.
Context switch
Overview of interrupts, interrupt vector table, Registers.
Context switch basics and Task Control Block
Coding context switch and creation and and deletion of tasks.
Software Concepts
Also uses finite state machine for Tasks.
Who this course is for:
- Beginner embedded systems engineer
- Firmware developer
- Hobby coders
- DIYers
Instructor
Malay has worked as software engineer for more than 15 years. He completed his Masters in Physics from Michigan State University in 2013. He has worked on multiple projects involving Software, Firmware and embedded systems.
He has a good understanding of digital electronics, RTL Design, Synthesis and Static Timing Analysis. He is recently working on Analog physical design projects using Sky130.