Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Mastering Embedded Systems with C and ARM Cortex (STM32)
Rating: 4.0 out of 5(34 ratings)
2,072 students

Mastering Embedded Systems with C and ARM Cortex (STM32)

Become an expert in Embedded Systems using C and STM32 ARM Cortex — fundamentals to real-time hardware implementation.
Created byeTech School
Last updated 6/2025
English
English [Auto],

What you'll learn

  • Fundamentals of Embedded Systems and C programming
  • Flow control, loops, functions, arrays, pointers, and strings in C
  • STM32CubeIDE setup and embedded project development
  • Hands-on practice with ARM Cortex STM32 microcontrollers
  • Bitwise operations, memory mapping, register-level coding
  • Advanced concepts: volatile/const qualifiers, structures, unions, bit-fields

Course content

4 sections221 lectures19h 21m total length
  • Introduction to the Course6:23

    Discover the fundamentals of embedded systems, their structure, and how C programming with STM32 cube IDE enables practical development for MCU and MPU architectures.

  • Embedded System - Overview8:01

    Explore the fundamentals of embedded systems, including hardware, software, and real-time operating systems, and see how single-function, tightly confined, reactive designs power devices like fire alarms and microcontrollers.

  • Component and Structure6:27

    Explore the components and structure of embedded systems, including hardware with power, processors, timers, memory, ports, and real time operating systems, plus software tools and the sensor-adc-processor-memory-dac-actuator flow.

  • Architecture of Embedded System1:45

    Explore the architecture of an embedded system, from user input through software, hardware, and the OS, highlighting how physical devices produce output.

  • MCU-vs-MPU4:39

    Compare microcontrollers and microprocessors, highlighting MCU architecture, integrated single-chip design, CPU cores, and memory layouts, with emphasis on memory types and bit-width options in embedded systems.

  • Devices in Embedded System1:56

    Explore peripheral devices in embedded systems, including serial interfaces such as Rs232, Rs422, Rs485, i2c, spi, usb, memory cards, ethernet, canbus, limbus, profibus, gpio, adc and dac, and debugging ports.

  • Environment Setup For Embedded System3:04

    Master the environment setup for embedded systems by installing stm32 cube ide, downloading across Linux, Mac, and Windows, and configuring J-Link driver and stealing driver with a workspace.

  • Introduction to C2:46

    Understand what C programming is, how embedded C differs, and how embedded C programs hardware and firmware for microcontrollers in embedded systems.

  • C Vs Embedded C2:57

    Explore the difference between general C and embedded C, highlighting how embedded C extends C for microcontroller projects, including hardware addressing, fixed-point arithmetic, and memory access.

  • How C Programming Works3:38

    Explore how embedded C uses single-line and multi-line comments, processor directives, and port configurations, then cover variables, main function, and flow control.

  • Basic C Program2:11

    Learn the basic embedded C program structure by including reg 51 dot h, defining a main function with parameters, and understanding core operators and variables for embedded development.

  • Variables in C8:05

    This lecture introduces variables in C, covers data types like integers, floats, and characters, and explains declaring, defining, naming, and initializing variables.

  • Operators Introduction2:15

    Explore how C operators perform operations on operands to enable data manipulation, covering assignment, arithmetic, relational, logical, bitwise, size of operator, conditional, and comma operators.

  • Arithmetic Operator and Assignment Operator Part 16:01

    Explore arithmetic operators for addition, subtraction, multiplication, division, and modulus on two numbers, and demonstrate assignment operators like plus-equal updating the left-hand side.

  • Arithmetic Operator and Assignment Operator Part 25:58

    Demonstrate how arithmetic and assignment operators update n1 and n2 using examples like n1 += n2 and n2 /= n1, emphasizing left-hand side storage (lhs) and right-hand side values.

  • Relational Operator and Logical Operator Part 17:08

    Explore relational and logical operators in C by comparing two variables using greater than, less than, and equals, and understand true and false representations in binary logic.

  • Relational Operator and Logical Operator Part 27:06

    Explain relational operators like >, >=, <, <=, ==, !=, and show assignment versus comparison with = vs ==. Demonstrate how logical operators combine conditions, using login scenarios as examples.

  • Relational Operator and Logical Operator Part 37:26

    Master relational and logical operators, using and, or, and not gates to combine conditions with n1, n2, and n3; understand how true or false outcomes arise and preview bitwise operators.

  • Bitwise Operator and Size of Operator Part 17:19

    Explore how bitwise operators perform bit-level manipulation in C, including size of operator, and see six operators with patterns like 5 and 9, contrasting them with logical operators.

  • Bitwise Operator and Size of Operator Part 27:12

    Explore how bitwise operators in C manipulate binary values, including and, or, xor, and not, along with left and right shift, through practical examples and output predictions.

  • Bitwise Operator and Size of Operator Part 34:15

    Master bitwise operators in C, including and, or, xor, not, left and right shifts, and use the size of operator to identify size for types like float, int, and char.

  • Conditional Operators3:41

    Explore conditional operators and comma operators in embedded C, using the ternary operator as a simple substitute for if-else to determine pass/fail based on a marks threshold.

  • Comma Operators5:24

    Learn how the comma operator in C evaluates expressions left to right, discards the left results, and returns the rightmost value, illustrated with a, a+6 and printf.

  • Types and Storage Classes in C2:37

    Explore C storage classes auto, register, static, and external, their memory locations, lifetimes, and scopes, with examples illustrating local and global access and initial values.

  • Introduction to Flow Controls and its Types3:27

    Explore how flow controls in C manage execution order, enabling decisions and loops through constructs like for, while, do while, if else, switch, break, and continue.

  • If Condition and its Type7:27

    Explore how if condition and flow control statements direct execution, covering simple if, if else, nested if, multiple ifs, and switch with a 75 score certificate example.

  • Nested if Condition3:50

    Explore nested if conditions in C for embedded systems, using score-based branching to assign expert, intermediate, or basic certifications, and distinguish outer and inner if statements.

  • Multiple if-Else Statements5:42

    Learn to categorize exam scores using multiple if-else statements, assigning expert, intermediate, or beginner certified levels based on score ranges, with validation for 0–100 and invalid inputs.

  • Switch Statement Part 11:14

    Explore how the switch statement selects among multiple execution branches based on values, contrasted with several if blocks, and see an example using five doors.

  • Switch Statement Part 26:07

    The lecture demonstrates a switch statement in C that maps letter grades A through F to corresponding marks ranges, using break and a default for invalid input.

  • Loops and Its Types4:18

    Explore for loop, while loop, and do while loop, and differentiate pre-tested loops (entry point) from post-tested loops (exit point), noting do while runs at least once.

  • For Loop7:01

    Explore how a for loop initializes a counter, tests a condition, and updates to repeat tasks, using a simple print example and a semicolon pitfall that alters the output.

  • While Loop5:36

    Master the while loop: initialization outside, condition checks, and optional updation, while avoiding infinite loops. Compare for and while by start and end points, and note do while next.

  • Do-While Loop3:13

    Explore the do-while loop in C programming, which executes the body first, then updates and checks the condition. See its syntax and a practical counting example from one to ten.

  • Nested Loop6:36

    Learn how nested loops work, with an outer for loop driving an inner for loop that runs for each iteration and terminates when the outer condition fails.

  • Break and Continue Statement6:44

    Explore control transfer statements in embedded C, focusing on break and continue, their effects on loops and switches, and how goto and return alter program flow.

  • Go to and Return Statement6:06

    Explore how the goto statement jumps to labeled code blocks and how return marks function termination, with examples using a for loop, even numbers, and unreachable code.

  • What is Function in C and its Types3:20

    Explore functions in C programming as reusable blocks of statements that perform a task, enabling reuse and modularity through declaration, definition, and call, with or without parameters and return types.

  • Programming Demonstration of Function Part 14:13

    Explore basic functions in C by declaring, defining, and calling the add numbers function with and without parameters, and pass 10 and 20 to see 30 and 60.

  • Programming Demonstration of Function Part 25:52

    Master void and return-type functions in C, exploring with and without parameters, and when to print results versus returning values.

  • What is an Array2:39

    Explore arrays in C as fixed-size, contiguous memory structures that store similar elements. Learn 1d, 2d, and 3d arrays and how they relate to pointers, structures, and primitive types.

  • 1D Array and Its Iteration Part 12:03

    Declare a 1d array by specifying a data type and a fixed size with square brackets, the subset operators that select elements. Initialize memory.

  • 1D Array and Its Iteration Part 27:00

    Declare and initialize a five-element array, using the subscript operator to access values and print them, then iterate with a for loop to show memory layout.

  • 2D Array and Its Iteration5:39

    Declare and work with a 2D array of size 3x3, store values at row and column indices, and iterate with nested for loops to print all elements using printf.

  • 3D Array and Its Iteration Part 15:55

    Explore how a three dimensional array builds on two dimensional matrices by stacking 2D arrays and indexing elements within a 2x2 grid.

  • 3D Array and Its Iteration Part 24:12

    Show how to access a three dimensional array with nested for loops over array, row, and column, printing with indices to illustrate its structure.

  • Arrays and Functions4:59

    Learn how to work with arrays and functions, pass an array and its size to a function, and print marks using a for loop and scanf.

  • What Is A Pointer3:02

    In this course, learn how pointers in C store the memory address of another variable and enable access and modification of data, powering low level access and dynamic memory allocation.

  • Pointers Demo4:23

    Demonstrates how a pointer in C stores the address of a variable and how dereferencing a pointer retrieves the variable’s value, using printf to show address and value.

  • Pointer to A Pointer3:54

    Explore pointer to a pointer in C, showing how a pointer stores the address of another pointer with two stars. Print addresses and values by dereferencing single and double pointers.

  • What is A String3:01

    Learn how strings in C are stored as one-dimensional arrays of characters ending with the null character, and that double-quoted values become C strings.

  • Programming Demonstration of String5:07

    Master string handling in C by declaring strings with and without size and terminating with the null character. Use printf and functions like strlen, strcmp, and strcat, plus case conversion.

  • Pointer and Strings2:37

    Explore how pointers manage strings in C, storing character arrays and addresses, printing with printf and %s, and navigating two-dimensional arrays of strings for embedded system applications.

  • Array and Strings3:40

    Master storing and printing multiple strings in a two-dimensional character array, using pointers, indices, and for loops with printf to output each string.

  • Creating A Simple Project3:38

    Learn to create an embedded C program covering variables, if else, for loops, and arrays and pointers. Implement an LED demo project in Keil uVision for 8051 device 889651.

  • Programming Demonstration and Build8:05

    Demonstrates creating a simple embedded C program to drive eight LEDs using pointers, loops, and bit manipulation, with build, debugging, and deployment to hardware.

  • Deployment of The Program Part 16:26

    Build the project, generate the hex file, and prepare it for deployment to a ROM chip. Use Proteus Design to configure the 8051 microcontroller and LED outputs.

  • Deployment of The Program Part 25:55

    Connect eight leds to eight ports, create a ground circuit, load the hex file from Kiel C51, set the 11.059 mhz clock, and run the simulator to blink the leds.

Requirements

  • Basic understanding of programming logic
  • Enthusiasm for hardware and embedded development
  • A Windows-based PC with internet access
  • Optional: STM32 development board for hands-on practice

Description

Introduction: Dive into the powerful world of embedded systems where software meets hardware. This comprehensive course walks you through the fundamentals of embedded systems using the C programming language, and gradually transitions into advanced programming with ARM Cortex-based STM32 microcontrollers. Whether you are a beginner or a budding engineer, this course will bridge the gap between theory and hands-on embedded application development.

Section 1: C Programming for Embedded Systems This section sets the stage by providing a deep introduction to embedded systems, including their architecture, components, and differences between MCUs and MPUs. It then builds a solid foundation in the C programming language — starting from variables and operators to loops, flow control, functions, arrays, pointers, and strings. It wraps up with a complete embedded project cycle from coding to deployment, enabling learners to understand how C works in embedded environments.

Section 2: Embedded C Programming Essentials Learn how to get your hands dirty with real embedded development. This section focuses on installing and using STM32CubeIDE, creating host and target projects, compiler setups, and key debugging practices. You'll also refine your knowledge of C syntax, data types, functions, scope, and memory addressing through embedded-specific demos and tool-based exercises.

Section 3: ARM Cortex (STM32) Fundamentals – Building Embedded Systems Step into the ARM Cortex (STM32) domain where you apply C knowledge to manipulate I/O, control memory-mapped registers, and implement decision-making with real hardware. Learn core embedded programming concepts like bitwise operations, LED control, software delays, peripheral register access, and instruction-level debugging, leading to practical embedded system builds.

Section 4: ARM Cortex (STM32) Deep Dive – Mastering Embedded Systems Take your embedded skills to an expert level. This advanced section introduces compiler optimizations, const and volatile usage, memory placements, and extensive structure and union handling. It culminates in advanced applications like GPIO register manipulation via structures and hands-on system design with bit-fields, arrays, and strings.

Conclusion: By the end of this course, you'll confidently code embedded applications, manipulate hardware registers, and build real-time projects using C and STM32. You'll bridge the gap from basic C concepts to complex embedded projects that prepare you for industry-level challenges.

Who this course is for:

  • Engineering students and electronics enthusiasts
  • Embedded system hobbyists and programmers
  • Professionals switching to embedded development
  • Anyone seeking a hands-on and deep technical foundation in embedded systems