Bare-Metal (low level) Embedded Software Mentorship Program

CURRICULUM

(over 14 hours of training videos with more CPD added all the time)

Module 1: Getting Started (1h 56min)

This module is all about getting to know the development kit and IDE.

Getting Set Up (8 min)

Installing required software.

Introduction to Hardware (5 min)

Connecting up the development kit and saving the pre-installed MBed operating system to our hard-drive before erasing the chip.

Documentation and other references (5 min)

Where to find relevant documentation online for our microprocessor and our development kit.

Micro Overview - GPIO (7 min)

An introduction to the microprocessor and its GPIO registers and configuration.

Hello World bare-metal style - Flash an LED (29 min)

Configuring registers using C Programming to flash an external LED.

PicoScope Introduction (8 min)

An introduction to using your PicoScope Oscilloscope - basic usage.

Flash LED comparison between bare-metal, HAL and FreeRTOS : Setting up (29 min)

Creating HAL and FreeRTOS projects as well as adding code to flash the LED.

Flash LED comparison between bare-metal, HAL and FreeRTOS : Analysis (13 min)

Comparing the ease of implementation as well as performance of the three projects created so far, bare-metal, HAL and FreeRTOS.

Obtaining all the definitions we need "Shortcut" (12 min)

So far all the address definitions for configuration registers have been hand-crafted / created long-hand. In this video we obtain full verified register map definitions for all the micro's configuration registers.

Module 2: Lets Get Professional (33 min)

This module is all about operating as a professional software developer while on the program. Creating repositories and going through code reviews.

Repositories Overview and GitHub Sign Up (13 min)

What are Repositories and how / what do we use them for, plus signing up for a GitHub Account.

Creating your bare-metal repo and its configuration (4 min)

Repo setup and configuration.

Using a Desktop Git Application (10 min)

A walk-around using GitHub Desktop.

Pull requests and code reviews (6 min)

How pull requests and code reviews are performed.

Module 3: Getting the most from our chip / board (36 min)

In this module we configure the PLL within our micro to "step up" the system clock for our micro from 16MHz to 72MHz.

Overview - internal / external clocks (9 min)

How the internal clocks within the micro work as well as the PLL.

Programming our chip to use external clock source (23 min)

Documentation walkthrough as well as code walkthrough to configure the internal System Clock.

Tidy up, add function headers and finalise (4 min)

Getting our code looking more professional.

Module 4: Systick (53 min)

In this module we get our SysTick interrupt running as our 'heartbeat' timer.

Creating our heartbeat (8 min)

Documentation walk-through, how we create the heartbeat interrupt using a timer.

SysTick Low Level Implementation (17 min)

Configuring the timer interrupt and handling it.

SysTick Implementation into project and it's usage (28 min)

How to use the SysTick interrupt and timer registers to accurately calculate time.

Module 5: PWM Generation (34 min)

In this module we configure a timer to produce a configurable PWM output signal.

What is PWM (7 min)

PWM Explained in layman's terms.

Configuring Timers to perform PWM (27 min)

Documentation walkthrough as well as code walkthrough to configure the internal System Clock.

Module 6: Digital to Analogue Conversion (DAC) (29 min)

In this module we start performing Digital to Analogue conversions using the DAC peripheral.

DAC (& ADC) Explained (7 min)

How Digital to Analogue and Analogue to Digital conversions are performed.

Implementation (19 min)

Implementation of first waveform output via main loop (Sawtooth)

Challenge (3 min)

Performance Challenge - Taking what's been done so far (sawtooth output on DAC) and creating a Triangular waveform, as well as also outputting this on the PWM channel.

Module 7: Generating Standard Waveforms (23 min)

In this module we develop the project further to enable outputting of standard waveforms on the DAC and PWM outputs; Sine, SawTooth, Triangular & Square waves.

Introduction (3 min)

Detailing what we'll be doing in this module.

PicoScope Tips (3 min)

More PicoScope training - how to monitor two traces (DAC and PWM) as well as adding trend lines.

Implementation and Challenge(17 min)

Creating standard waveforms in code.

Module 8: USART - Communicating with PC (1h)

In this module we start performing serial communications with our PC USB port via the USART peripheral.

Introduction to USART and Module Overview (9 min)

Covering "What is a USART" and what are we doing in this module.

USART Documentation walk-through (8 min)

A walk through the relevant sections of our micro reference document.

Implementation phase 1 - Echoing Bytes (11 min)

Simply echoing back any byte of data received.

Implementation phase 2 - Echoing Complete Messages (13 min)

Capturing the end of messages and handling them as a whole echoed response.

Implementation phase 3 - Using interrupts for communications (19 min)

Offloading the main loop work by using interrupts to pump bytes in/out of the USART port.

Module 9: DMA (Direct Memory Access) Controller (47 min)

In this module we delve in to using the DMA controller for the first time - to manage the automated transmission and reception of complete messages via the USART.

Overview - what is DMA and what does it do for us (7 min)

Layman's introduction to the power of DMA in an embedded system.

Documentation register walkthrough (18 min)

A deeper look at the configuration registers used to work with DMA

Code walkthrough - Switching the USART over to using DMA instead of IRQs (22 min)

Creating standard waveforms in code.

Module 10: Adding commands and Custom Waveform Handling (1h 17 min)

In this module we add serial command / response handlers and implement custom waveform generation.

Introduction and Overview (5 min)

Covering what are we doing in this module in layman's terms.

Moving Waveform Control into Waveform Generator (10 min)

Project restructuring to accommodate custom waveforms.

USART Driver Modifications (9 min)

Modifications required to the USART interface to accommodate command / response handlers..

Adding commands and custom waveform handling (53 min)

Command / response handler implementation including custom waveform data.

Module 11: Creating faster waveforms through automation (57 min)

In this module we use many of the skills we've learned to far to combine the DAC with a timer and DMA to fully automate the generation of waveforms to achieve higher output frequencies.

Introduction and Overview (4 min)

Layman's introduction to this module.

Documentation register walkthrough (5 min)

A deeper look at the configuration registers we need to work with to harmonise DMA, a Timer and the DAC together autonomously.

Register Configuration Walkthrough (25 min)

Step by step walkthrough of all register settings needed.

Finishing off, plus challenges (13 min)

Wrapping up lose ends.

Insights into debugging register configurations (10 min)

How to find out what's wrong when register configuration doesn't work as planned.

Once the above modules have been completed, you will have a fully programmable dual channel waveform generator at your disposal, and the best part...

You'll have created it all yourself!

Module 12: Other Essential Peripherals & Skills (3h 21 min)

So far we've concentrated on the creating of our dual channel fully programmable waveform generator which is now working.

There are however a few more peripherals to master and skills to learn before you can be considered a well rounded low-level embedded software developer.

In this module we introduce you to handling digital interrupts, the ADC (Analogue to Digital Conversion), I2C & SPI Communications.

Introduction and Overview (4 min)

Layman's introduction to this module.

Digital Inputs, interrupts and de-bouncing (32 min)

Polling as well as using interrupts to read digital inputs. Also includes 'de-bouncing' of inputs to avoid multiple false triggers.

ADC (Analogue to Digital Conversion) (45 min)

Step by step walkthrough of all register settings needed to automate the 'read-back' of our outputted waveform through the ADC and out to the PC.

I2C Communications (40 min)

Communicating with the gyroscope we have on our board and adding to the waveform generator so X/Y/Z angular momentum's can be outputted as a waveform.

SPI Communications (1h 20 min)

Communicating with the Touch Screen.

Module 13: Debriefing (15 min)

Recap, summarising what's been learned in preparation for CV updating, reviewing and interview perparation / training.

Module 14: Ongoing CPD (Ever growing)

As access to the membership area is for life, this module will continue to grow with insights and training over time.

The videos shown below are what's currently planned in the pipeline, hence no specific times shown.

Managing Subsystems

How to manage many subsystems with different priorities.

Writing to our own FLASH

The program space / FLASH area in our micro can be written to programmatically for saving information/settings etc, here's how.

RTC (Real Time Clock)

Using the RTC to manage real-world dates and times, including backup registers that persist through a reset.

Watchdog usage

Watchdog usage

More to follow...

If you think this might be right for you or your team...

Apply below NOW...

Start your (no obligation) application below...

I agree to the terms and privacy policy and by providing my details, I agree to receive communications.

"Your Engineering Success" is a program trading name for Your Enlightened Potential Ltd. Registered in England and Wales, Co.No: 14074871.

* Earnings and income representations made by Your Engineering Success, and and their advertisers/sponsors are aspirational statements only of your earnings potential. These results are not typical and results will vary. We can in NO way guarantee you will get similar results.

Copyright 2025 Your Engineering Success All Rights Reserved.

Contact Us: [email protected]