Mô tả

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 Getting

This 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 Work

See, 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+ Reviews

If at least one of the following applies to you then keep reading if not then simply skip this course:


" Escape From "

  1. Copying/Pasting code you don’t understand

  2. Using third party libraries and header files like HAL, LL and StdPeriph

  3. Experiencing bugs you don’t understand

  4. Being afraid of technical documentations like the reference manual and datasheet of the chip

  5. Imposter syndrome

" Arrive At "

  1. Building every single line of code from scratch by writing to the microcontroller’s memory space directly.

  2. Using No third party libraries or header files

  3. Understanding and writing every single line of code yourself- no Copy/Paste

  4. Using the debugger effectively to analyze and resolve any bugs

  5. Developing proficiency in your embedded development skills and confidently take the next steps


So 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 address

    All 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 development


But it gets better because you’re also getting…


                                                         Deep Lessons on Developing Peripheral Drivers

You 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/Paste

Listen. 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.


Bạn sẽ học được gì

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

Yêu cầu

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

Nội dung khoá học

25 sections

Getting Started - Constructing Peripheral Registers from Memory Addresses

9 lectures
Downloading our Integrated Development Environment (IDE)
02:34
Installing our Integrated Development Environment (IDE)
02:38
Getting the right Documentation for Bare-Metal Development
06:06
Coding : Locating the Ports and Pins of Components on the Nucleo board
08:01
Coding : Defining Addresses of Modules using information from the Documentation
20:54
Coding : Creating required Registers using Information from Documentation
19:32
Coding : Configuring Pins using the Registers we Created
09:19
Coding : Creating Registers from Structure Members
20:49
Notice
00:19

General Purpose Input/Output(GPIO)

4 lectures
Overview of ARM Cortex-M General Purpose Input/Output Module
07:24
Coding : Developing the GPIO Output Driver
28:16
Coding : Controlling GPIO Outputs using the Bit Set/Reset Register (BSRR)
06:07
Coding : Developing the GPIO Input Driver
11:36

Universal Asynchronous Receiver-Transmitter(UART)

7 lectures
Overview of the UART Protocol
07:43
Coding : Developing the UART Transmitter Driver
27:12
Coding : Testing the UART Transmitter Driver
08:17
Coding : Retargeting printf
02:57
Coding : Making the Driver more Modular
04:15
Coding : Developing the UART Receiver Driver
08:20
Coding : Testing the UART Receiver Driver
04:56

Analog to Digital Conversion (ADC)

4 lectures
Introduction to Analog to Digital Conversion
04:02
Understanding ADC Independents Modes
08:38
Coding : Developing the ADC Single Conversion Driver
36:52
Coding : Developing the ADC Continuous Conversion Driver
03:56

The System Tick (SysTick) Timer

2 lectures
Overview of the System Tick Timer
07:51
Coding : Developing the System Tick Timer Driver
17:14

General Purpose Timers

5 lectures
Overview of General Purpose Timers
09:32
Commonly used Timer registers
03:32
Coding : Developing the General Purpose Timer Driver
13:40
Coding : Developing the Timer Output Compare Driver
19:25
Coding : Developing the Timer Input Capture Driver
23:54

Interrupt Programming

7 lectures
Introduction to Interrupts
19:44
Coding : Developing the GPIO Interrupt Driver
17:33
Coding : Testing the GPIO Interrupt Driver
10:15
Coding : Developing the UART Receiver Interrupt Driver
13:11
Coding : Developing the ADC Interrupt Driver
09:34
Coding : Developing the Systick Interrupt Driver
07:45
Coding : Developing the Timer Interrupt Driver
07:24

Direct Memory Access (DMA) Driver Development

4 lectures
Overview of the Direct Memory Access (DMA) Module
12:23
Coding : Developing the UART Transmitter DMA Driver Pt.1
10:13
Coding : Developing the UART Transmitter DMA Driver Pt.2
23:54
Coding : Testing the UART Transmitter DMA Driver
14:55

Inter-Integrated Circuit (I2C)

7 lectures
Introduction to I2C
09:21
Coding : Implementing the I2C Init function
20:15
Coding : Implementing the I2C Byte Read function
14:49
Coding : Implementing the I2C Burst Read function
07:16
Coding : Implementing the I2C Burst Write function
05:45
Coding : Configuring the ADXL345 Accelerometer using the I2C driver
22:29
Coding : Testing the ADXL345 Accelerometer using the I2C driver
12:30

Serial Peripheral Interface (SPI)

7 lectures
Introduction to Serial Peripheral Interface (SPI)
11:19
Coding : Implementing the SPI GPIO Initialization function
10:49
Coding : Configuring the SPI Parameters
08:44
Coding : Implementing the SPI Transmit
07:33
Coding : Implementing the SPI Receive
06:02
Coding : Configuring the ADXL345 Accelerometer using the SPI Driver
15:01
Coding : Testing our ADXL345 Driver
02:50

Start of Old Version of the Course - Introduction

1 lectures
Introduction
01:48

Set Up

5 lectures
Download Keil uVision 5
01:18
Installing Keil uVision 5
01:51
Notice
00:05
Installing Packs
04:19
Changing the Compiler
01:53

General Purpose Input/Output(GPIO)

6 lectures
Overview of ARM Cortex-M General Purpose Input/Output Module
07:24
Coding : Developing GPIO Driver Using Information from the Datasheet
48:50
Understanding the BSRR Register
01:29
Coding : Controlling GPIO using the BSRR Register
15:39
Coding : Reading GPIO Inputs
11:11
Notice
00:03

Writing Bare-Metal C Code with STM32CubeIDE

3 lectures
Notice
00:04
Coding : Writing a GPIO Driver from Scratch (PART I)
34:02
Coding : Writing a GPIO Driver from Scratch (PART II)
17:29

Universal Asynchronous Receiver-Transmitter(UART)

6 lectures
Overview of the UART Protocol
07:43
Commonly used UART registers
03:26
Coding : Developing the UART Driver Using Information from the Datasheet
30:59
Further discussion on UART Alternate Function configuration
07:52
Coding : Receiving Data with the UART
21:55
Coding : Two-way UART Communication
21:53

System Tick and General Purpose Timers

11 lectures
Overview of the System Tick Timer
07:51
Overview of General Purpose Timers
09:32
Commonly used Timer registers
03:32
Coding : Developing the System Tick Timer Driver
06:49
Further discussion on System Tick Registers
03:14
Coding : Creating a Delay Function using the System Tick Timer
11:33
Coding : Developing the General Purpose Timer (GPTM) Driver
13:04
Coding : Configuring the General Purpose Timer for Output Compare
12:03
Coding : Configuring the General Purpose Timer for Input Capture
23:40
Coding : Input capture frequency measurement
17:41
Coding : Configuring the General Purpose Timer for PWM Output
09:26

Interrupts Programming

7 lectures
Introduction to Interrupts
19:44
Understanding External Interrupts
09:32
Coding : Developing the GPIO Interrupt Driver
18:49
Coding : Working with Multiple GPIO Interrupts
23:00
Coding : Developing the UART Interrupt Driver
14:10
Coding : Developing the System Tick Interrupt Driver
09:22
Coding : Developing the General Purpose Timer Interrupt Driver
12:05

Analog to Digital Conversion (ADC)

3 lectures
Introduction to Analog to Digital Conversion
04:02
Coding : Developing the ADC Driver
18:12
Coding :Reading the CPU Temperature with the ADC and Displaying it with the UART
23:34

Interfacing with a Liquid Crystal Display (LCD)

2 lectures
Coding : Developing the Liquid Crystal Display (LCD) Driver
29:03
Coding : Configuring the Liquid Crystal Display for 4-bit Data Mode
18:47

Inter-Integrated Circuit (I2C)

3 lectures
Introduction to I2C
09:21
Analyzing the DS1307 Realtime Clock
06:07
Coding : Developing an I2C Driver
28:49

Serial Peripheral Interface (SPI)

6 lectures
Introduction to Serial Peripheral Interface (SPI)
11:19
Coding : Developing a Simple SPI Driver
15:12
Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part I)
30:53
Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part II)
10:44
Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part III)
14:34
Coding : Developing an SPI Driver for the ST7735 Graphics LCD (Part IV)
26:22

ARM Design Philosophy and RISC Architecture

10 lectures
The RISC Design Philosohpy
03:43
The ARM Design Philosophy
03:06
Embedded Systems with ARM Processors
03:11
ARM Bus Technology and AMBA Bus Protocol
02:14
Memory
07:57
Peripherals
02:23
Von Nuemann and Harvard architecture
03:46
Cache and Tightly Couple Memory
03:40
Memory Management extensions
02:29
Cooprocessor extensions
01:18

The ARM Programmer's Model

11 lectures
Data Types
02:51
Processor Modes
05:22
ARM7TDMI Registers
07:52
ARM7TDMI Vector Table
02:22
ARM Cortex-M Registers
04:35
ARM Cortex-M Vector Table
01:10
ARM Data Flow Model
03:44
The Pipeline
04:08
ARM Processor Family
01:55
ARM Cortex-A and Cortex-R
01:42
ARM Cortex-M
01:31

Setting Up Option 2 - STM32CubeIDE

5 lectures
Downloading CubeIDE
04:16
Setting Up STM32CubeIDE
07:25
Quick Notice
00:07
Installing Packages
06:07
Overview
17:17

Closing

1 lectures
Closing Remarks
00:17

Đánh giá của học viên

Chưa có đánh giá
Course Rating
5
0%
4
0%
3
0%
2
0%
1
0%

Bình luận khách hàng

Viết Bình Luận

Bạn đánh giá khoá học này thế nào?

image

Đăng ký get khoá học Udemy - Unica - Gitiho giá chỉ 50k!

Get khoá học giá rẻ ngay trước khi bị fix.