Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Advanced Embedded Systems Bare-Metal Programming Ground Up™
Setting Up
Downloading CubeIDE (2:34)
Installing CubeIDE (2:38)
Getting the required documentation (7:41)
Getting the required package for bare-metal development (21:19)
Testing the project setup (15:53)
Essentials of Firmware Debugging
Getting familiar with the Debug View (24:59)
Working with the Instrumentation Trace Macrocell (ITM) (11:25)
Retargetting "printf()" and creating Log functions (15:28)
Debugging with UART - Analyzing the Documentation (16:21)
Debugging with UART - Writing the UART Driver (21:56)
Debugging with UART - Testing the UART Driver (13:21)
Debugging GPIO with Serial Wire Viewer (SWV) (13:13)
Source Code Download
Developing Bare-Metal Memory-to-Memory Direct Memory Access (DMA) Drivers
Overview of the Direct Memory Access (DMA) Module (14:14)
Analyzing the DMA Documentation (6:42)
Writing the DMA Memory-to-Memory Driver (18:26)
Implementing the DMA Data Transfer function (6:55)
Testing the DMA Driver (29:18)
Developing Bare-Metal ADC DMA Drivers
Understanding ADC Independents Modes (8:38)
Analyzing the ADC Documentation (14:53)
Writing the ADC DMA Driver (Part I) (17:56)
Writing the ADC DMA Driver (Part II) (23:58)
Developing Bare-Metal ADC Timer Trigger DMA Drivers
Writing the ADC Timer Triggered Driver (25:18)
Testing the ADC Timer Triggered Driver (10:30)
Developing Bare-Metal UART DMA Drivers
Overview of the UART Protocol (7:49)
Listing the Steps (8:08)
Implementing the UART RX TX Initialization functions (11:00)
Implementing the DMA Stream RX TX Configuration function (Part I) (11:52)
Implementing the DMA Stream RX TX Configuration function (Part II) (17:35)
Implementing the DMA Stream RX TX Configuration function (Part III) (13:32)
Testing the UART DMA Driver (38:06)
Developing Bare-Metal SPI DMA Drivers
Understanding the SPI Protocol (11:19)
Analyzing the SPI Documentation (9:11)
Implementing the SPI DMA Initialization function (21:13)
Implementing the TX Stream Configuration function (15:46)
Implementing the RX Stream Configuration function (7:17)
Implementing the Transfer and Receive functions (14:21)
Implementing the MPU9250 Mems Device SPI DMA Driver (Part I) (18:09)
Implementing the MPU9250 Mems Device SPI DMA Driver (Part II) (28:57)
Implementing the MPU9250 Mems Device SPI DMA Driver (Part III) (4:24)
Implementing the MPU9250 Mems Device SPI DMA Driver (Part IV) (14:10)
Testing the MPU9250 Mems Device SPI DMA Driver (21:09)
Developing Bare-Metal I2C DMA Drivers
Understanding the I2C Protocol (9:21)
Analyzing the I2C Documentation (14:32)
Implementing the I2C DMA Initialization function (Part I) (11:50)
Implementing the I2C DMA Initialization function (Part II) (12:56)
Implementing the I2C DMA Tx Stream Initialization function (10:01)
Implementing the I2C DMA Rx Stream Initialization function (4:02)
Implementing the I2C DMA Stream Transfer function (9:11)
Implementing the I2C DMA Stream Receive function (6:17)
Implementing the I2C DMA Read function (37:08)
Implementing the I2C DMA Write function (5:57)
Implementing the I2C DMA Stream IRQHandlers (6:38)
Testing the I2C DMA Driver with the MPU9250 Mems Device (24:31)
Developing Bare-Metal PWM DMA Drivers
Understanding STM32 Timers (9:31)
Analyzing the PWM Documentation (9:40)
Implementing the PWM Initialization function (25:44)
Developing the "set_dutycycle()" function (16:28)
Implementing the PWM DMA Initialization function(Part I) (13:55)
Implementing the PWM DMA Initialization function(Part II) (20:25)
Testing the PWM DMA Driver (6:05)
More on Debugging
Catching Anomalies with Breakpoints (15:23)
Catching HardFaults (14:11)
Debugging Timers using SWV Graph (29:29)
Measuring the Execution Time of an Algorithm (23:09)
Dumping Register Information (7:37)
Determining Execution Time and Place using Profiling (8:50)
Developing Bare-Metal RTC Drivers
Understanding Real Time Clocks (10:49)
Listing the Steps for Configuring the RTC Calendar (8:16)
Implementing the RTC Calendar Initialization function (Part I) (11:57)
Implementing the RTC Calendar Initialization function (Part II) (18:19)
Setting the Timer Prescalers (15:10)
Exiting the Initialization Mode (13:15)
Getting the Calendar Information (7:51)
Testing the RTC Calendar Driver (16:16)
Implementing the RTC Alarm Initialization function (Part I) (16:24)
Implementing the RTC Alarm Initialization function (Part II) (11:05)
Implementing the RTC Alarm Interrupt Handler and Testing (17:51)
Analyzing the Steps to Configure the RTC Timestamp (5:28)
Implementing the RTC Timestamp Initialization function (7:35)
Implementing the RTC Timestamp Interrupt Handler (13:28)
Testing the RTC Timestamp Driver (10:15)
Implementing the RTC Tamper Detection Initialization function (9:58)
Testing the RTC Tamper Detection Driver (9:10)
Developing Bare-Metal Independent Watchdog (IWDG) Timer Drivers
Overview of the Independent Watchdog (5:22)
Analyzing the Steps for Initializing the IWDG Timer (5:01)
Implementing the IWDG Initialization function (15:33)
Implementing other Modules for Testing the IWDG Driver (14:54)
Testing the IWDG Driver (16:20)
Developing Bare-Metal Windowed Watchdog (IWDG) Timer Drivers
Overview of the Window Watchdog (12:22)
Implementing the WWDG Initialization function (12:49)
Testing the WWDG Driver (15:27)
Developing Bare-Metal Drivers for Standby Mode and Wakeup
Implementing the Standby and Wakeup Setup Function (18:58)
Getting the Source of a "Reset" (9:53)
Testing the Standby and Wakeup Driver (10:33)
Analyzing Steps for Developing an RTC Wakeup Timer Driver (5:50)
Implementing the RTC Wakeup Timer Initializationf Function (13:18)
Implementing the "rtc_enter_standby_mode()" Function (8:28)
Testing the RTC Wakeup timer Driver (14:12)
Closing
Closing Remarks
Teach online with
Understanding the I2C Protocol
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock