Course Information
Course Overview
(MCU1) Learn bare metal driver development using Embedded C: Writing drivers for STM32 GPIO,I2C,SPI,USART from scratch
>> Your Search for an in-depth microcontroller programming course ends here !!<<<
Course code: MCU1
Learn bare-metal driver development using Embedded C : Writing drivers for STM32 GPIO,I2C, SPI,USART from scratch
English Subtitles/CCs are enabled for this course.
Update 6: videos are updated with the latest STM32CUBEIDE
Update 5: All drivers are developed in a live session with step-by-step coding and added stm32-Arduino communication exercises using SPI and I2C.
Update 4: Dedicated support team is assigned to address student's Q/A
Update 3: English Closed captions are fixed
Update 2 : Added Bus matrix / memory map /vector table /interrupt design discussion with code examples.
Update 1: Eclipse IDE setup for ARM Cortex M based MCUs added
The course is designed for beginners to advanced audiences.
Brief Description:
This course Demystifies the internal working of the Microcontroller and its Peripherals.
Coding for the Peripherals STEP-BY-STEP and Developing software drivers entirely from scratch by extracting maximum information from Datasheets, Reference manuals, specs, etc
Protocol Decoding Using logic analyzers, Debugging, Testing along with Hints and Tips.
Long Description:
Learning Embedded System Programming can be a challenge. Since it's a relatively complex field, there's no actual gold standard yet for how things are practiced, or taught, which can frustrate people who are just trying to learn new things and couldn't connect the dots.
This is the motivation behind creating this course to help engineers and students learn different aspects of embedded systems by providing high-quality advanced lectures at a relatively low price.
Master Behind the Scene working;
created this course because I believe your time is precious, and you shouldn't have to hunt around to get a practical foundation In Embedded System Programming. In this course, you will learn to write your peripheral driver for most commonly used peripherals such as GPIOs, I2C, SPI, USART, etc., and the exciting thing is that you will learn everything from scratch.
No 3rd party libraries!
No blind coding!
Write your driver APIs by dealing with the peripheral registers of the MCU!
Code and Implement APIs from scratch, diving into the datasheet and reference manual of the MCU. I will thoroughly explain how to extract the maximum information from datasheets, Technical Reference manuals to configure and handle peripherals. These techniques you can go and apply to any MCUs you have at your hand.
In this course, I will walk you through step-by-step procedures on configuring various Peripherals like GPIOs, SPI, USART, I2C by taking you into the reference manual and datasheet. We will develop a fully working driver code, interrupt handlers, sample application everything from scratch to understand the big picture.
In each lecture, I assure you that you will learn something new to use in your work or projects. You'll find yourself handling these peripherals with much more clarity. You will be able to speculate and debug the problem quickly. I'll show you tricks and tips to debug the most common issues using debugging tools such as logic analyzers.
This is not the Arduino style of programming:
I believe Arduino is for quick prototyping of projects/products but not for mastering the working of micro-controllers and their peripherals. Unlike Arduino programming, where you develop a quick solution and prototyping of products using third-party libraries, this course is entirely different. In this course, no 3rd party libraries are used. Everything we will code by referring to the technical reference manual of the MCU and will create our own library. The Power of this approach is that you can quickly speculate problems and debug like a pro when things go wrong in your project due to bugs. If one thing me and my students are good at is "debugging,." To achieve good debugging skills, it's essential to code by understanding how things work behind the scene but not by blindly using some third-party libraries, and that's the biggest TAKE away from this course.
The course is designed and explained so that it is generic across any microcontroller. The code we develop can be used as templates to quickly build a peripheral driver for your MCUs on-chip peripherals.
Software/Hardware used:
In this course, the code is developed so that it can be ported to any MCU you have at your hand. If you need any help porting these codes to different MCUs, you can always reach out to me! The course is strictly not bound to any 1 type of MCU. So, if you already have any Development board that runs with an ARM-Cortex M3/M4 processor, I recommend you continue using it. But if you don't have any development boards, then check out the below Development boards.
1. STM32F407xx based Discovery board ( This is the board used in this course)
MCU Vendor: STMicroelectronics
IDE: STM32CUBEIDE (Free)
My promise:
I am confident that this course will save you many hours of studying/experimenting/googling time to learn about MCU programming. I will personally answer your questions about this material, either privately or in a group discussion. If you are not satisfied, for any reason, you can get a full refund from Udemy within 30 days. No questions asked. But I am confident you won't need to. I stand behind this course 100% and am committed to helping you.
Learning order of FastBit Embedded Brain Academy Courses,
If you are a beginner in the field of embedded systems, then you can take our courses in the below-mentioned order.
This is just a recommendation from the instructor for beginners.
1) Microcontroller Embedded C Programming: absolute beginners(Embedded C)
2) Embedded Systems Programming on ARM Cortex-M3/M4 Processor(ARM Cortex M4 Processor specific)
3) Mastering Microcontroller with Embedded Driver Development(MCU1)
4) Mastering Microcontroller: TIMERS, PWM, CAN, RTC,LOW POWER(MCU2)
5) Mastering Microcontroller: STM32-LTDC, LCD-TFT, LVGL(MCU3)
6) Embedded System Design using UML State Machines(State machine)
7) Mastering RTOS: Hands-on FreeRTOS and STM32Fx with Debugging(RTOS)
8) ARM Cortex M Microcontroller DMA Programming Demystified(DMA)
9) STM32Fx Microcontroller Custom Bootloader Development(Bootloader)
10) Embedded Linux Step by Step using Beaglebone Black(Linux)
11) Linux device driver programming using Beaglebone Black(LDD1)
Course Content
- 76 section(s)
- 278 lecture(s)
- Section 1 Notes and Information
- Section 2 Development board used in our courses
- Section 3 Hardware/Software Requirements
- Section 4 IDE installation
- Section 5 Creating a project using STM32CUBEIDE
- Section 6 Embedded Code Debugging Tips and tricks
- Section 7 Understanding MCU Memory Map
- Section 8 MCU Bus Interfaces
- Section 9 Understanding MCU Clocks and Details
- Section 10 Understanding MCU Clock tree
- Section 11 Understanding MCU Vector table
- Section 12 Understanding MCU interrupt Design , NVIC, Interrupt handling
- Section 13 Importance of "Volatile" Keyword
- Section 14 GPIO Must know concepts
- Section 15 GPIO Programming structure and Registers
- Section 16 GPIO Registers : SPEED, PULL UP/DOWN, IDR and ODR
- Section 17 GPIO Alternate functionality register and example of usage
- Section 18 GPIO peripheral clock control
- Section 19 GPIO driver development overview and Project creation
- Section 20 Updating MCU specific header file with bus domain and peripheral details
- Section 21 Structuring peripheral registers
- Section 22 Writing Clock enable and disable macros
- Section 23 GPIO driver API requirements and handle structure
- Section 24 GPIO driver API Implementation : Clock control
- Section 25 GPIO driver API Implementation : GPIO init and de-init
- Section 26 GPIO driver API Implementation : GPIO data read and write
- Section 27 Exercise
- Section 28 GPIO pin Interrupt configuration
- Section 29 Exercise : GPIO interrupts
- Section 30 MCU I/O Pin specifications
- Section 31 SPI introduction and bus details
- Section 32 SPI bus configuration and functional block diagram
- Section 33 STM32 NSS pin settings and management
- Section 34 SPI CPOL and CPHA discussion
- Section 35 SPI serial clock discussion
- Section 36 SPI Driver : API requirements and configuration structure
- Section 37 SPI Driver API Implementation : Clock control
- Section 38 SPI Driver API Implementation : SPI init
- Section 39 SPI Driver API Implementation : Send Data
- Section 40 Exercise : SPI Send Data
- Section 41 Exercise : STM32 master and Arduino Slave communication
- Section 42 SPI Driver API : Receive data
- Section 43 Exercise : SPI receive data
- Section 44 SPI interrupts
- Section 45 SPI interrupt mode APIs
- Section 46 SPI Driver API : IRQ handling
- Section 47 Common problems in SPI
- Section 48 I2C introduction and I2C signals
- Section 49 I2C modes
- Section 50 Understanding I2C Protocol
- Section 51 I2C master and slave communication
- Section 52 STM32 I2C functional block diagram
- Section 53 I2C driver API requirements and config structures
- Section 54 I2C serial clock discussion(SCLK)
- Section 55 I2C Driver API : I2C Init
- Section 56 I2C Driver API : I2C Master send data
- Section 57 I2C pull up resistance , rise time and bus capacitance
- Section 58 Exercise
- Section 59 I2C Driver API : I2C Master receive data
- Section 60 Exercise
- Section 61 I2C Interrupts and IRQ numbers
- Section 62 I2C interrupt based APIs
- Section 63 I2C IRQ handler implementation
- Section 64 Exercise
- Section 65 I2C slave programming
- Section 66 Exercise
- Section 67 Common problems in I2C
- Section 68 UART Essentials
- Section 69 UART functional block and Peripheral Clock
- Section 70 UART Communication
- Section 71 USART driver development
- Section 72 USART oversampling and baudrate
- Section 73 Exercise
- Section 74 USART interrupts
- Section 75 Exercise : RTC on LCD
- Section 76 BONUS LECTURE
What You’ll Learn
- Understand Right ways of Handling and programming MCU Peripherals, Develop Peripheral drivers for your Microcontroller, Understand complete Driver Development steps right from scratch for GPIO,SPI,I2C and USART., Learn Writing peripheral driver headers, prototyping APIs and implementation, Explore MCU data sheets, Reference manuals, start-up Codes to get things done, Learn Right ways of handling/configuring Interrupts for various peripherals, Learn about Peripheral IRQs/Vector table/NVIC interfaces and many, Learn about Configuration/status/Control registers of various Peripherals, Demystifying behind the scene working details of SPI,I2C,GPIOs,USART etc., Explore hidden secretes of MCU bus interfaces, clock sources, MCU clock configurations, etc., Understand right ways of enabling/configuring peripheral clocks/serial clocks/baud rates of various serial protocols, Learn about MCUs AHB, APB bus protocols, Learn about different MCU clocks like HCLK, PCLK, PLL,etc, Learn to capture/decode/analyze traces of serial protocols on Logic analyzer, Learn about Quick ways of debugging peripheral issues with case studies
Reviews
-
vvenkat Krishna
excellent course, and very helpful for begineers
-
NNgako Cyrille
sehr lehrhaft und verständlich
-
JJoel Kevin Likane
The instructor has very good knwlage about the topic and the course is good structured for a better understanding
-
YYuriy Pakholyuk
Many thanks for this useful, inormative and very practical course, leading and mentoring the student step-by-step to the resulting practical knowledge.