Zenler Player
Your course is loading. Hang tight.
Mastering Embedded Rust with STM32: From Beginner to Pro
Back to curriculum
0% Complete
0% Complete
Welcome
Course repository
Toolchain installation for Host
Toolchain components and target triple of Tier 1 targets
Install VS Code IDE
Creating a Rust project using Cargo and Important VS code extensions
Important tools: rustfmt, cargo fix , Clippy
How Rust ensures memory safety compared to C/C++ part 1
Variables and numerical data types
Byte literal
Char and unicode representation
Statics
Constants
How Rust ensures memory safety compared to C/C++ part 2
Arrays
References
Borrow(&T and &mut T)
Can you help us?
slice data type
if..else as a statement and expression
match statement
if..let statement
How Rust ensures memory safety compared to C/C++ part 3
Comparison and logical operators
Bitwise operators
Strings
UTF8 encoded string
String literal type(&str)
Function declaration and parameters
Structures
Printing the structure
Initializing struct with defaults
Passing struct variables to functions
Creating methods for a struct
Associated functions(Constructor) of struct
Enums
Methods and associated functions of an enum type
Option T
Result T, E
Error handling using Result type
Error propagation using ?
Generics.
About the hardware
Intro to cross compilation for target architecture
Exercise 001: Generating ELF file for the very basic rust program part 1
Generating ELF file for the very basic rust program part 2
About Type 'never'(!)
Inspecting ELF file using cargo-binutils
Writing start-up code part-1
About Linker, Linker flags and Linker script
Writing linker script from scratch part 1 [MEMORY]
Different types of data in a program
Writing linker script from scratch part 2 [SECTIONS]
Writing linker script from scratch part 3
Writing start-up code part-2 [Vector table]
Writing start-up code part-3 [extern "C"]
Writing start-up code part-4 [Default_Handlers]
Writing start-up code part-5 [Reset_Handler]
Raw pointers in Rust
Writing start-up code part-6 [Reset_Handler]
Can you help us?
Flashing code to target hardware-1 [Install STM32CubeCLT]
Flashing code to target hardware-2 [VsCode and cortex-debug setup]
Flashing code using probe.rs tools
Introduction
Exercise Implementation Part 1
Exercise Implementation Part 2
Exercise Implementation Part 3
Exercise Implementation Part 4
Exercise Implementation Part 5
Exercise Implementation Part 6
Exercise Implementation Part 7 and Testing LED module
Unsafe block vs Unsafe fn
Commenting and generating documentation part 1 [/// Outer documentation]
Commenting and generating documentation part 2 [//! Inner documentation]
Exercise Implementation Part 8; Writing button module
Exercise Implementation Part 9; Coding for button interrupt
Exercise Implementation Part 10
Exercise Implementation Part 11
Exercise Implementation Part 12
Exercise Implementation Part 13
Exercise Implementation Part 14: Testing button interrupt
What is a crate?
Important crates for embedded systems
Exercise introduction
Cortex-m-rt crate explanation
Crate version number syntax
Panic handling crates
Systick time base generation using cortex-m crate
Testing Systick time base generation
Can you help us?
Exercise 004 introduction
Instrumentation Trace Macrocell(ITM)
Exercise implementation
Refactoring and Testing
Critical section
Mutex and Refcell
Steps involved in dealing with Rust and Foreign language code
Types mapping between Rust and C
Rust equivalent of C's void and void pointer
Rust equivalent of C's void and void pointer contd.
Rust representation of C's String
Rust accepting and processing Strings from 'C' (core::ffi::Cstr)
Rust sending Strings to 'C' (std::ffi::CString)
Struct memory layout: Rust Vs C
Passing struct from Rust to C
Introduction to Flappy bird application
Implementation : Peripheral config and code generation(8 bit parallel LCD)
Implementation: Peripheral config and code generation(SPI based LCD)
Copy driver files into the project
Compiling 'C' source files from Rust project: How it works?
Writing build.rs part 1
Writing build.rs part 2
Writing build.rs part 3
Writing build.rs part 4
Writing build.rs part 5
Testing project for systick interrupt generation
Analysing the issue related to weak symbol linkage
Fixing issue related to weak symbol linkage and testing project
Game feature : Start screen implementation part-1
Game feature : Start screen implementation part-2
Game feature : Start screen implementation part-3
Game feature : Start screen implementation part-4
Game feature : Start screen implementation part-5
Game feature : Start screen implementation part-6
Game feature : Start screen implementation part-7
Game feature : Start screen implementation part-8
Game feature : Start screen implementation part-9
Game feature : Start screen implementation part-10
Game feature : Start screen implementation part-11
Game feature : Start screen implementation part-12
Game feature : Start screen implementation part-13
Game feature: Obstacle movement implementation part-1
Game feature: Obstacle movement implementation part-2
Game feature: Obstacle movement implementation part-3
Game feature: Obstacle movement implementation part-4
Game feature: Obstacle movement implementation part-5
Game feature: Obstacle movement implementation part-6
Game feature: Player movement implementation part-1
Game feature: Player movement implementation part-2
Game feature: Collision detection implementation part-1
Game feature: Collision detection implementation part-2
Game feature: Collision detection implementation part-3
About hardware agnostic driver development
MPU6050 driver crate implementation part-1
MPU6050 driver crate implementation part-2
MPU6050 driver crate implementation part-3
MPU6050 driver crate implementation part-4
MPU6050 driver crate implementation part-5
MPU6050 driver crate implementation part-6
MPU6050 driver crate implementation part-7
MPU6050 driver crate implementation part-8
MPU6050 driver crate implementation part-9
Adding [features] to driver crate
Exercise 005: Reading from sensor part 1
PAC and HAL
I2C initialization coding part 1
I2C initialization coding part 2
I2C initialization coding part 3
Handling input device via Trait implementation part 1
Handling input device via Trait implementation part 2
Handling input device via Trait implementation part 3
Logging data using RTT and probe.rs
Logging data using RTT testing
Game feature : Calculating roll angle
Game feature : Map roll angle to bird position
Updating bird Y position
Note about sensor noise
Testing final application
TODOs for the students
Next videos coming soon
Introduction
Welcome
Course repository
Rust Toolchain Installation
Toolchain installation for Host
Toolchain components and target triple of Tier 1 targets
Install VS Code IDE
Creating a Rust project using Cargo and Important VS code extensions
Important tools: rustfmt, cargo fix , Clippy
Rust Fundamentals: Quick intro to core concepts
How Rust ensures memory safety compared to C/C++ part 1
Variables and numerical data types
Byte literal
Char and unicode representation
Statics
Constants
How Rust ensures memory safety compared to C/C++ part 2
Arrays
References
Borrow(&T and &mut T)
Can you help us?
slice data type
if..else as a statement and expression
match statement
if..let statement
How Rust ensures memory safety compared to C/C++ part 3
Comparison and logical operators
Bitwise operators
Strings
UTF8 encoded string
String literal type(&str)
Function declaration and parameters
Structures
Printing the structure
Initializing struct with defaults
Passing struct variables to functions
Creating methods for a struct
Associated functions(Constructor) of struct
Enums
Methods and associated functions of an enum type
Option T
Result T, E
Error handling using Result type
Error propagation using ?
Generics.
Cross compilation
About the hardware
Intro to cross compilation for target architecture
Exercise 001: Generating ELF file for the very basic rust program part 1
Generating ELF file for the very basic rust program part 2
About Type 'never'(!)
Inspecting ELF file using cargo-binutils
Writing start-up code and linker script for bare metal Rust program
Writing start-up code part-1
About Linker, Linker flags and Linker script
Writing linker script from scratch part 1 [MEMORY]
Different types of data in a program
Writing linker script from scratch part 2 [SECTIONS]
Writing linker script from scratch part 3
Writing start-up code part-2 [Vector table]
Writing start-up code part-3 [extern "C"]
Writing start-up code part-4 [Default_Handlers]
Writing start-up code part-5 [Reset_Handler]
Raw pointers in Rust
Writing start-up code part-6 [Reset_Handler]
Can you help us?
Flash and Debug
Flashing code to target hardware-1 [Install STM32CubeCLT]
Flashing code to target hardware-2 [VsCode and cortex-debug setup]
Flashing code using probe.rs tools
Exercise 002: Bare metal Rust application to handle LEDs using Interrupts
Introduction
Exercise Implementation Part 1
Exercise Implementation Part 2
Exercise Implementation Part 3
Exercise Implementation Part 4
Exercise Implementation Part 5
Preview
Exercise Implementation Part 6
Exercise Implementation Part 7 and Testing LED module
Unsafe block vs Unsafe fn
Commenting and generating documentation part 1 [/// Outer documentation]
Commenting and generating documentation part 2 [//! Inner documentation]
Exercise Implementation Part 8; Writing button module
Exercise Implementation Part 9; Coding for button interrupt
Exercise Implementation Part 10
Exercise Implementation Part 11
Exercise Implementation Part 12
Exercise Implementation Part 13
Exercise Implementation Part 14: Testing button interrupt
Exercise 003: Using external crate cortex-m-rt and cortex-m
What is a crate?
Important crates for embedded systems
Exercise introduction
Cortex-m-rt crate explanation
Crate version number syntax
Panic handling crates
Systick time base generation using cortex-m crate
Testing Systick time base generation
Can you help us?
Exercise 004: ITM prints
Exercise 004 introduction
Instrumentation Trace Macrocell(ITM)
Exercise implementation
Refactoring and Testing
Critical section
Mutex and Refcell
Rust Foreign Function Interface(FFI)
Steps involved in dealing with Rust and Foreign language code
Types mapping between Rust and C
Rust equivalent of C's void and void pointer
Rust equivalent of C's void and void pointer contd.
Rust representation of C's String
Rust accepting and processing Strings from 'C' (core::ffi::Cstr)
Rust sending Strings to 'C' (std::ffi::CString)
Struct memory layout: Rust Vs C
Passing struct from Rust to C
Exercise 005: Flappy Bird game implementation (Rust + C)
Introduction to Flappy bird application
Implementation : Peripheral config and code generation(8 bit parallel LCD)
Preview
Implementation: Peripheral config and code generation(SPI based LCD)
Preview
Copy driver files into the project
Preview
Compiling 'C' source files from Rust project: How it works?
Writing build.rs part 1
Writing build.rs part 2
Preview
Writing build.rs part 3
Writing build.rs part 4
Writing build.rs part 5
Testing project for systick interrupt generation
Analysing the issue related to weak symbol linkage
Fixing issue related to weak symbol linkage and testing project
Game feature : Start screen implementation part-1
Game feature : Start screen implementation part-2
Game feature : Start screen implementation part-3
Game feature : Start screen implementation part-4
Preview
Game feature : Start screen implementation part-5
Game feature : Start screen implementation part-6
Game feature : Start screen implementation part-7
Preview
Game feature : Start screen implementation part-8
Game feature : Start screen implementation part-9
Game feature : Start screen implementation part-10
Game feature : Start screen implementation part-11
Game feature : Start screen implementation part-12
Game feature : Start screen implementation part-13
Game feature: Obstacle movement implementation part-1
Game feature: Obstacle movement implementation part-2
Game feature: Obstacle movement implementation part-3
Game feature: Obstacle movement implementation part-4
Game feature: Obstacle movement implementation part-5
Game feature: Obstacle movement implementation part-6
Game feature: Player movement implementation part-1
Preview
Game feature: Player movement implementation part-2
Game feature: Collision detection implementation part-1
Preview
Game feature: Collision detection implementation part-2
Game feature: Collision detection implementation part-3
Creating hardware agnostic device driver using embedded-hal
About hardware agnostic driver development
MPU6050 driver crate implementation part-1
MPU6050 driver crate implementation part-2
MPU6050 driver crate implementation part-3
MPU6050 driver crate implementation part-4
MPU6050 driver crate implementation part-5
MPU6050 driver crate implementation part-6
MPU6050 driver crate implementation part-7
MPU6050 driver crate implementation part-8
MPU6050 driver crate implementation part-9
Adding [features] to driver crate
Working with Hal crate and PAC
Exercise 005: Reading from sensor part 1
PAC and HAL
I2C initialization coding part 1
I2C initialization coding part 2
I2C initialization coding part 3
Preview
Using Traits
Handling input device via Trait implementation part 1
Handling input device via Trait implementation part 2
Handling input device via Trait implementation part 3
Logging
Logging data using RTT and probe.rs
Logging data using RTT testing
Exercise 005: Flappy Bird game implementation (Rust + C) contd.
Game feature : Calculating roll angle
Game feature : Map roll angle to bird position
Updating bird Y position
Note about sensor noise
Testing final application
TODOs for the students
Next videos coming soon
×
This is an unpublished lesson. This lesson will not be shown for students unless you set it as Public.
Back to Dashboard
No contents are available in this lesson!
No lessons available !
Back to Dashboard
Lesson contents locked
Enroll to unlock this lesson.
Enroll to unlock
Next Lesson