Tags
Language
Tags
May 2025
Su Mo Tu We Th Fr Sa
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
    Attention❗ To save your time, in order to download anything on this site, you must be registered 👉 HERE. If you do not have a registration yet, it is better to do it right away. ✌

    ( • )( • ) ( ͡⚆ ͜ʖ ͡⚆ ) (‿ˠ‿)
    SpicyMags.xyz

    Embedded Systems Bare-Metal Programming Ground Up™ (Stm32)(updated 4/2022)

    Posted By: ELK1nG
    Embedded Systems Bare-Metal Programming Ground Up™ (Stm32)(updated 4/2022)

    Embedded Systems Bare-Metal Programming Ground Up™ (Stm32)(updated 4/2022)
    Last updated 4/2022
    MP4 | Video: h264, 1280x720 | Audio: AAC, 44.1 KHz
    Language: English | Size: 11.51 GB | Duration: 24h 37m

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

    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
    Are you tired of Copying and Pasting code you don't understand?With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for  ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right  information to professionally  build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.Still keeping it simple, this course comes in different ARM Cortex-M development boards  so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics  STM32F4-NUCLEO which has an ARM Cortex-M4 microcontoller.So with that understood, let me tell you…                                                                                     Exactly What You’re GettingThis is dramatically different from any course you have ever taken because it’s more of a professional hands-on “field guide” to stm32 bare metal firmware development.The reason why is because there’s no fluff or filler. It immediately gets down to the actual subject, showing you exactly what to do, how to do it, and why.Plus, it’s easy.And you’ll immediately “get” the entire mythology I personally use to build firmware for consumer devices in my professional life.                                                                                                                                              It's About MORE Than Just Getting the Code to WorkSee, this course will change your professional life forever. Here is what one student had to say about the course :  "I would suggest this course for all the beginners. The concepts have been covered in the right sequence.And also the best part of this lecture series is getting to know how to explore the reference manual and datasheets."Here is what another student had to say :    "Extremly helpful to get to understand the uC programming deeper! For me it is much easier from now to develop code because I undertstand the base behind, so I'm more confident and more experienced to develop and debug the code. Really, this course is very useful to link the hardware knowledge with the coding skills. This fills the gap between them. Thanks for it! :)"A third student :"I am a professional semiconductor chipset application engineer with 30 years in global embedded product design in system applications. I can say this teacher is very straight forward by sharing his many years knowledge to the students with his true heart. Yes. I love his teaching pace and style!"                                                                               Taken by 8000+ Students with 1000+ ReviewsIf at least one of the following applies to you then keep reading if not then simply skip this course:" Escape From "Copying/Pasting code you don’t understandUsing third party libraries and header files like HAL, LL and StdPeriphExperiencing bugs you don’t understandBeing afraid of technical documentations like the reference manual and datasheet of the chipImposter syndrome" Arrive At "Building every single line of code from scratch by writing to the microcontroller’s memory space directly.Using No third party libraries or header filesUnderstanding and writing every single line of code yourself- no Copy/PasteUsing the debugger effectively to analyze and resolve any bugsDeveloping proficiency in your embedded development skills and confidently take the next stepsSo like I said, there’s more than just getting each piece of code to work. Here’s an overview of what you’re getting…Analyzing the chip documentations:Before developing the firmware for any chip you have to learn how to read the documentation provided by the chip manufacturer.Defining Peripheral addressAll components on the microcontroller have an address range. To write to a component or read from a component you need to locate its address range in the documentation and properly define the addresses in your code.Creating registers from the address:The addresses in the address range of a component represent the registers of that component. To access these registers you have effectively typecast the addresses.Understanding CMSIS:Cortex-Microcontroller Interface Standard (CMSIS)CMSIS is a standard developed by Arm for all Cortex-Microcontrollers. This is the standard used in professional firmware developmentBut it gets better because you’re also getting…                                                         Deep Lessons on Developing Peripheral DriversYou will learn how to develop bare-metal drivers for the following peripherals :Analog-to-Digital Converter (ADC)​Serial Peripheral Interface (SPI)Inter-Integrated Circuit (I2C)Direct Memory Access (DMA)Nested Vector Interrupt Controller (NVIC)General Purpose Timers (TIM)System Tick Timer (SysTick)General Purpose Input/Output (GPIO)                                                           Specially Designed For People Who Hate Copy/PasteListen. If you don’t like “Copy/Paste” you’re not alone. I can’t stand it either. I’d literally rather have a piece of code that I wrote from scratch that doesn’t work than someone else’s working code I copied and pasted.And that’s why I’ve spent months designing and recording this course in which I show you how to locate every single register used and the meaning of every hexadecimal value written into the register.Also it comes with a money back guarantee so you have nothing to loose.

    Overview

    Section 1: Getting Started - Constructing Peripheral Registers from Memory Addresses

    Lecture 1 Downloading our Integrated Development Environment (IDE)

    Lecture 2 Installing our Integrated Development Environment (IDE)

    Lecture 3 Getting the right Documentation for Bare-Metal Development

    Lecture 4 Coding : Locating the Ports and Pins of Components on the Nucleo board

    Lecture 5 Coding : Defining Addresses of Modules using information from the Documentation

    Lecture 6 Coding : Creating required Registers using Information from Documentation

    Lecture 7 Coding : Configuring Pins using the Registers we Created

    Lecture 8 Coding : Creating Registers from Structure Members

    Lecture 9 Notice

    Section 2: General Purpose Input/Output(GPIO)

    Lecture 10 Overview of ARM Cortex-M General Purpose Input/Output Module

    Lecture 11 Coding : Developing the GPIO Output Driver

    Lecture 12 Coding : Controlling GPIO Outputs using the Bit Set/Reset Register (BSRR)

    Lecture 13 Coding : Developing the GPIO Input Driver

    Section 3: Universal Asynchronous Receiver-Transmitter(UART)

    Lecture 14 Overview of the UART Protocol

    Lecture 15 Coding : Developing the UART Transmitter Driver

    Lecture 16 Coding : Testing the UART Transmitter Driver

    Lecture 17 Coding : Retargeting printf

    Lecture 18 Coding : Making the Driver more Modular

    Lecture 19 Coding : Developing the UART Receiver Driver

    Lecture 20 Coding : Testing the UART Receiver Driver

    Section 4: Analog to Digital Conversion (ADC)

    Lecture 21 Introduction to Analog to Digital Conversion

    Lecture 22 Understanding ADC Independents Modes

    Lecture 23 Coding : Developing the ADC Single Conversion Driver

    Lecture 24 Coding : Developing the ADC Continuous Conversion Driver

    Section 5: The System Tick (SysTick) Timer

    Lecture 25 Overview of the System Tick Timer

    Lecture 26 Coding : Developing the System Tick Timer Driver

    Section 6: General Purpose Timers

    Lecture 27 Overview of General Purpose Timers

    Lecture 28 Commonly used Timer registers

    Lecture 29 Coding : Developing the General Purpose Timer Driver

    Lecture 30 Coding : Developing the Timer Output Compare Driver

    Lecture 31 Coding : Developing the Timer Input Capture Driver

    Section 7: Interrupt Programming

    Lecture 32 Introduction to Interrupts

    Lecture 33 Coding : Developing the GPIO Interrupt Driver

    Lecture 34 Coding : Testing the GPIO Interrupt Driver

    Lecture 35 Coding : Developing the UART Receiver Interrupt Driver

    Lecture 36 Coding : Developing the ADC Interrupt Driver

    Lecture 37 Coding : Developing the Systick Interrupt Driver

    Lecture 38 Coding : Developing the Timer Interrupt Driver

    Section 8: Direct Memory Access (DMA) Driver Development

    Lecture 39 Overview of the Direct Memory Access (DMA) Module

    Lecture 40 Coding : Developing the UART Transmitter DMA Driver Pt.1

    Lecture 41 Coding : Developing the UART Transmitter DMA Driver Pt.2

    Lecture 42 Coding : Testing the UART Transmitter DMA Driver

    Section 9: Inter-Integrated Circuit (I2C)

    Lecture 43 Introduction to I2C

    Lecture 44 Coding : Implementing the I2C Init function

    Lecture 45 Coding : Implementing the I2C Byte Read function

    Lecture 46 Coding : Implementing the I2C Burst Read function

    Lecture 47 Coding : Implementing the I2C Burst Write function

    Lecture 48 Coding : Configuring the ADXL345 Accelerometer using the I2C driver

    Lecture 49 Coding : Testing the ADXL345 Accelerometer using the I2C driver

    Section 10: Serial Peripheral Interface (SPI)

    Lecture 50 Introduction to Serial Peripheral Interface (SPI)

    Lecture 51 Coding : Implementing the SPI GPIO Initialization function

    Lecture 52 Coding : Configuring the SPI Parameters

    Lecture 53 Coding : Implementing the SPI Transmit

    Lecture 54 Coding : Implementing the SPI Receive

    Lecture 55 Coding : Configuring the ADXL345 Accelerometer using the SPI Driver

    Lecture 56 Coding : Testing our ADXL345 Driver

    Section 11: Start of Old Version of the Course - Introduction

    Lecture 57 Introduction

    Section 12: Set Up

    Lecture 58 Download Keil uVision 5

    Lecture 59 Installing Keil uVision 5

    Lecture 60 Notice

    Lecture 61 Installing Packs

    Lecture 62 Changing the Compiler

    Section 13: General Purpose Input/Output(GPIO)

    Lecture 63 Overview of ARM Cortex-M General Purpose Input/Output Module

    Lecture 64 Coding : Developing GPIO Driver Using Information from the Datasheet

    Lecture 65 Understanding the BSRR Register

    Lecture 66 Coding : Controlling GPIO using the BSRR Register

    Lecture 67 Coding : Reading GPIO Inputs

    Lecture 68 Notice

    Section 14: Writing Bare-Metal C Code with STM32CubeIDE

    Lecture 69 Notice

    Lecture 70 Coding : Writing a GPIO Driver from Scratch (PART I)

    Lecture 71 Coding : Writing a GPIO Driver from Scratch (PART II)

    Section 15: Universal Asynchronous Receiver-Transmitter(UART)

    Lecture 72 Overview of the UART Protocol

    Lecture 73 Commonly used UART registers

    Lecture 74 Coding : Developing the UART Driver Using Information from the Datasheet

    Lecture 75 Further discussion on UART Alternate Function configuration

    Lecture 76 Coding : Receiving Data with the UART

    Lecture 77 Coding : Two-way UART Communication

    Section 16: System Tick and General Purpose Timers

    Lecture 78 Overview of the System Tick Timer

    Lecture 79 Overview of General Purpose Timers

    Lecture 80 Commonly used Timer registers

    Lecture 81 Coding : Developing the System Tick Timer Driver

    Lecture 82 Further discussion on System Tick Registers

    Lecture 83 Coding : Creating a Delay Function using the System Tick Timer

    Lecture 84 Coding : Developing the General Purpose Timer (GPTM) Driver

    Lecture 85 Coding : Configuring the General Purpose Timer for Output Compare

    Lecture 86 Coding : Configuring the General Purpose Timer for Input Capture

    Lecture 87 Coding : Input capture frequency measurement

    Lecture 88 Coding : Configuring the General Purpose Timer for PWM Output

    Section 17: Interrupts Programming

    Lecture 89 Introduction to Interrupts

    Lecture 90 Understanding External Interrupts

    Lecture 91 Coding : Developing the GPIO Interrupt Driver

    Lecture 92 Coding : Working with Multiple GPIO Interrupts

    Lecture 93 Coding : Developing the UART Interrupt Driver

    Lecture 94 Coding : Developing the System Tick Interrupt Driver

    Lecture 95 Coding : Developing the General Purpose Timer Interrupt Driver

    Section 18: Analog to Digital Conversion (ADC)

    Lecture 96 Introduction to Analog to Digital Conversion

    Lecture 97 Coding : Developing the ADC Driver

    Lecture 98 Coding :Reading the CPU Temperature with the ADC and Displaying it with the UART

    Section 19: Interfacing with a Liquid Crystal Display (LCD)

    Lecture 99 Coding : Developing the Liquid Crystal Display (LCD) Driver

    Lecture 100 Coding : Configuring the Liquid Crystal Display for 4-bit Data Mode

    Section 20: Inter-Integrated Circuit (I2C)

    Lecture 101 Introduction to I2C

    Lecture 102 Analyzing the DS1307 Realtime Clock

    Lecture 103 Coding : Developing an I2C Driver

    Section 21: Serial Peripheral Interface (SPI)

    Lecture 104 Introduction to Serial Peripheral Interface (SPI)

    Lecture 105 Coding : Developing a Simple SPI Driver

    Lecture 106 Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part I)

    Lecture 107 Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part II)

    Lecture 108 Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part III)

    Lecture 109 Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part IV)

    Section 22: ARM Design Philosophy and RISC Architecture

    Lecture 110 The RISC Design Philosohpy

    Lecture 111 The ARM Design Philosophy

    Lecture 112 Embedded Systems with ARM Processors

    Lecture 113 ARM Bus Technology and AMBA Bus Protocol

    Lecture 114 Memory

    Lecture 115 Peripherals

    Lecture 116 Von Nuemann and Harvard architecture

    Lecture 117 Cache and Tightly Couple Memory

    Lecture 118 Memory Management extensions

    Lecture 119 Cooprocessor extensions

    Section 23: The ARM Programmer's Model

    Lecture 120 Data Types

    Lecture 121 Processor Modes

    Lecture 122 ARM7TDMI Registers

    Lecture 123 ARM7TDMI Vector Table

    Lecture 124 ARM Cortex-M Registers

    Lecture 125 ARM Cortex-M Vector Table

    Lecture 126 ARM Data Flow Model

    Lecture 127 The Pipeline

    Lecture 128 ARM Processor Family

    Lecture 129 ARM Cortex-A and Cortex-R

    Lecture 130 ARM Cortex-M

    Section 24: Setting Up Option 2 - STM32CubeIDE

    Lecture 131 Downloading CubeIDE

    Lecture 132 Setting Up STM32CubeIDE

    Lecture 133 Quick Notice

    Lecture 134 Installing Packages

    Lecture 135 Overview

    Section 25: Closing

    Lecture 136 Closing Remarks

    If you are an absolute beginner to embedded systems, then take this course.,If you are an experienced embedded developer and want to learn how to professionally develop embedded applications for ARM processors, then take this course.