Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Akshay Gill and MakerMax Inc.

Welcome to this course on embedded systems for STM32: I2C protocol masterclass. The I2C communication protocol is a popular protocol that microcontrollers use to talk to various devices such as EEPROMS and NVRAMs, ADCs and DACs, I/O interfaces for port expansion, and a whole array of different types of sensors. This class goes in-depth into the theory behind the I2C protocol, why it was originally designed, what types of common formats are available, and how to implement I2C communication between a STM32 microcontroller, a LTC2990 current, voltage and temperature sensor and an OLED display.

Who am I?

Read more

Welcome to this course on embedded systems for STM32: I2C protocol masterclass. The I2C communication protocol is a popular protocol that microcontrollers use to talk to various devices such as EEPROMS and NVRAMs, ADCs and DACs, I/O interfaces for port expansion, and a whole array of different types of sensors. This class goes in-depth into the theory behind the I2C protocol, why it was originally designed, what types of common formats are available, and how to implement I2C communication between a STM32 microcontroller, a LTC2990 current, voltage and temperature sensor and an OLED display.

Who am I?

I’m Akshay, and I’ll be your instructor for this course. I have been fascinated with micro controllers since I was a child, and now I consider it lucky to have it as my profession. I currently write firmware for safety critical systems that go inside electric cars. With my knowledge of embedded systems over the past 10+ years, and working in Silicon Valley, I have gained a unique insight into what the industry needs and what the students are lacking.

Course Structure

The course is divided into four sections -

Section 1 - In this section you will learn the theory behind the I2C protocol and how to implement it effectively.

Section 2 - In this section you will set up a free and open source development environment to program and debug ARM Cortex microcontrollers. If you have previously completed my course on the Foundations of ARM Cortex-M processors, then you may choose to skip to the next section.

Section 3 - In this section you will get hands-on experience on how to write the I2C drivers for the LTC2990 temperature, current and voltage sensor and the You can take the knowledge learned in this section and apply it to any other I2C device of your choosing.

Section 4 - In this section you will unlock features of the I2C Shield with specially designed assignments. After each assignment I will show you my method of implementation for comparison.

What hardware is needed for this course?

This course is created around the Nucleo series of boards from ST Microelectronics and I have designed, specifically for this course a custom board that fits on top of the Nucleo board. The Nucleo board is available for purchase directly from ST Micro and the custom I2C board can be purchased on www(dot)makermax(dot)ca to allow you to get hands-on without having a whole electronics lab at your desk. Although this hardware is recommended, it is not mandatory. If you choose not to buy the hardware, you will still be able to follow along through all the lectures as I will show you my implementation. The best way to learn however, is to try and implement it yourself. If you have further questions on the hardware or anything else, send me a message. I would be more than happy to help you.

Enroll now

What's inside

Learning objectives

  • Be able to set up i2c communication between microcontrollers and thousands of i2c devices available in the market
  • Understand how oled displays work and know how to display content on them
  • Gain a deep understanding of how to set up i2c communication between a stm32 nucleo microcontroller and a linear technologies ltc2990 current, voltage and temperature sensor
  • Understand how to enable gpio input to read input into the microcontroller from push buttons
  • Understand hardware abstraction layer (hal) libraries and how to use them
  • Feel confident and comfortable programming applications on the cortex-m platform
  • Read datasheets for i2c slave devices to figure out how to make them work with a microcontroller master
  • Show more
  • Show less

Syllabus

Commonly used I2C Formats
Course reference documents
LTC2990 Read Protocol Analysis
Introduction
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Provides hands-on experience writing I2C drivers for the LTC2990 temperature, current, and voltage sensor, which is valuable for practical embedded systems development
Explores the theory behind the I2C protocol, which is essential for understanding and implementing effective communication in embedded systems
Uses the STM32 Nucleo board, a popular platform for embedded development, making the skills learned directly applicable to real-world projects
Requires specific hardware (Nucleo board and custom I2C board), which may present a barrier to entry for some learners without access to these resources
Teaches how to read datasheets for I2C slave devices, a crucial skill for interfacing with various sensors and peripherals in embedded systems
Involves setting up a development environment using Atollic, which may require additional setup and configuration steps for learners unfamiliar with the tool

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Practical stm32 i2c protocol projects

According to students, this course offers a largely positive and practical deep dive into the I2C protocol using STM32 microcontrollers. Many find the hands-on projects and real-world application with specific sensors (LTC2990) and displays (SSD1306) particularly valuable. Learners appreciate the focus on learning by doing, which helps solidify theoretical concepts. While the core content is well-received, some students noted challenges with the development environment setup, finding it potentially complex or outdated depending on their existing tools and experience. The course is seen as effective for building confidence in programming on the Cortex-M platform, especially for those looking to interface microcontrollers with common peripherals via I2C.
Benefits those with some embedded background.
"Helps if you have some basic C and microcontroller knowledge beforehand."
"Might be a bit challenging for absolute beginners with no embedded experience."
"Good course for moving from basic embedded concepts to practical protocol implementation."
"Assumes familiarity with microcontrollers and embedded C."
Examples with LTC2990 and SSD1306 are helpful.
"Working with the LTC2990 sensor was a fantastic real-world example."
"Learning to interface with the OLED display (SSD1306) was very useful."
"The specific device drivers taught are applicable to other I2C devices once you understand the process."
"These examples provide concrete use cases for the protocol."
Instructor is knowledgeable and clear.
"The instructor clearly knows his stuff and explains concepts well."
"Lectures were easy to follow and well-structured."
"Akshay does a great job walking through the code and concepts."
"His industry experience is evident in the practical examples."
Custom shield enhances the learning experience.
"Using the custom I2C shield made the projects very convenient."
"The hardware designed for the course is perfect for the exercises."
"It was great to have a dedicated board for the sensors and display used in the course."
"While not mandatory, the hardware is highly recommended for a better learning experience."
Provides a solid grasp of the I2C protocol.
"Really helped solidify my understanding of the I2C communication protocol."
"The theoretical explanations followed by practical implementation were excellent."
"I now feel much more confident working with various I2C devices."
"The course covers the I2C basics and implementation details well."
Focus on practical application is highly valued.
"The projects are really good for getting your hands dirty with the I2C protocol."
"I loved the practical exercises; it made the theory stick much better."
"Learning by doing is exactly what this course delivers, making complex topics accessible."
"The hands-on coding and projects are the strongest part of the course for me."
Setting up the tools can be challenging.
"Setting up the development environment was the most difficult part for me."
"The setup instructions seemed a bit outdated for current software versions."
"I spent a lot of time troubleshooting the toolchain setup before I could start coding."
"Be prepared to spend some effort getting your environment configured."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Hands on projects with the I2C protocol - Learn by doing! with these activities:
Review Embedded Systems Fundamentals
Reinforce your understanding of embedded systems concepts. This will provide a solid foundation for understanding the I2C protocol and its applications in STM32 microcontrollers.
Browse courses on Embedded Systems
Show steps
  • Review basic microcontroller architecture.
  • Study digital logic and boolean algebra.
  • Practice basic C programming concepts.
Review 'Embedded Systems Architecture' by Tammy Noergaard
Gain a deeper understanding of embedded systems architecture. This book will provide a broader context for the I2C protocol and its role in embedded systems design.
Show steps
  • Read the chapters on microcontroller architecture and memory management.
  • Study the sections on communication protocols and peripheral interfaces.
  • Take notes on key concepts and examples.
I2C Communication Simulation
Practice simulating I2C communication scenarios. This will help you solidify your understanding of the protocol and its timing requirements.
Show steps
  • Use a software simulator to model I2C communication between a master and a slave device.
  • Experiment with different clock speeds and data rates.
  • Analyze the timing diagrams to understand the protocol's behavior.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Follow STM32 I2C HAL Tutorials
Learn how to use the STM32 HAL library for I2C communication. This will simplify the process of writing I2C drivers for STM32 microcontrollers.
Show steps
  • Find online tutorials that demonstrate how to use the STM32 HAL library for I2C communication.
  • Follow the tutorials step-by-step, and try to understand the code.
  • Modify the code to experiment with different I2C settings.
I2C Temperature Sensor Project
Build a project that uses an I2C temperature sensor to measure and display temperature data. This will give you hands-on experience with I2C communication and data acquisition.
Show steps
  • Select an I2C temperature sensor and an STM32 microcontroller.
  • Write the I2C driver for the temperature sensor.
  • Display the temperature data on an OLED display or a serial terminal.
Document Your I2C Project
Create a detailed documentation of your I2C project. This will help you solidify your understanding of the project and share your knowledge with others.
Show steps
  • Write a detailed description of your project, including the hardware and software components.
  • Create a schematic diagram of the circuit.
  • Write a user manual for your project.
Contribute to an Open Source I2C Library
Contribute to an open-source I2C library for STM32 microcontrollers. This will give you experience working with a real-world project and collaborating with other developers.
Show steps
  • Find an open-source I2C library for STM32 microcontrollers on GitHub or GitLab.
  • Identify a bug or a missing feature in the library.
  • Submit a pull request with your fix or new feature.

Career center

Learners who complete Hands on projects with the I2C protocol - Learn by doing! will develop knowledge and skills that may be useful to these careers:
Embedded Systems Engineer
An Embedded Systems Engineer designs, develops, and tests software and hardware for embedded systems, often found in devices like consumer electronics, industrial control systems, and automotive electronics. This course on I2C communication provides hands-on experience with a widely used communication protocol between microcontrollers and various sensors and devices, a critical skill for any aspiring Embedded Systems Engineer. The course's focus on STM32 microcontrollers and the implementation of I2C drivers for sensors and OLED displays, along with the use of HAL libraries and hardware abstraction, directly contributes to the practical skills needed for this role.
Firmware Engineer
A Firmware Engineer develops low-level software that controls the hardware of electronic devices, including microcontrollers and embedded systems. This course directly aligns with the responsibilities of a Firmware Engineer by providing a deep understanding of the I2C protocol, a common communication method in embedded systems. The course provides direct experience in writing I2C drivers for various hardware components, such as sensors and displays using an STM32 microcontroller, exactly the type of work a Firmware Engineer does. Learning to read datasheets and implement solutions based on those, as this course emphasizes, is a fundamental skill for this role.
Mechatronics Engineer
A Mechatronics Engineer integrates mechanical, electrical, and software engineering principles to design and develop automated systems and products. This course provides relevant and hands-on experience for a Mechatronics Engineer. The course covers the implementation of the I2C protocol to control various electronic components using a microcontroller, a common aspect of mechatronics systems, thus allowing a Mechatronics Engineer to develop the necessary expertise in integrating hardware and software. The course's focus on hardware abstraction layers, and the reading of datasheets are integral skills when working with physical systems.
Internet of Things Engineer
An Internet of Things Engineer designs and develops IoT devices and systems, often involving embedded systems, sensors, and communication protocols. This course is very helpful for an Internet of Things Engineer. The I2C protocol is commonly used to connect sensors and other peripherals in an IoT device, and this course offers practical experience in implementing I2C communication between a microcontroller and various sensors, like the LTC2990, and displays, such as the OLED. Understanding how to read datasheets and implement drivers for various devices is essential for an Internet of Things Engineer.
Applications Engineer
An Applications Engineer provides technical support and develops solutions for customers using a company's products. This course on embedded systems and I2C communication would be very helpful for an Applications Engineer. Many companies produce devices that use the I2C protocol, and this course provides practical experience in setting up I2C communication between a microcontroller and various peripherals, such as sensors and displays. This provides an Applications Engineer with a practical understanding of the fundamentals of operation of devices they are recommending and supporting. The course's emphasis on practical implementations and reading datasheets will enhance an Applications Engineer's capacity to troubleshoot and provide assistance to customers.
Robotics Engineer
A Robotics Engineer designs, builds, and programs robots for various applications, from manufacturing to healthcare. This course is directly applicable to the work of a Robotics Engineer. These engineers often need to interface microcontrollers with sensors, actuators and other devices, often using protocols such as I2C. The course emphasizes the practical implementation of the I2C protocol with a STM32 microcontroller, and covers how to use HAL libraries, read datasheets, and implement the I2C drivers for various devices, all fundamental skills for a Robotics Engineer.
System Integration Engineer
A System Integration Engineer is responsible for integrating various hardware and software components into a cohesive system. This course would be helpful for a System Integration Engineer. The course provides practical experience in I2C communication between microcontrollers and various sensors and devices, teaching how to read datasheets and implement communication protocols. By working with these low level integrations, the System Integration Engineer will have a greater understanding of a system's internal workings. The course's focus on setting up a development environment and debugging tools will also be beneficial.
Automation Engineer
An Automation Engineer designs, develops, and maintains automated systems and processes often involving industrial control systems. A course that goes indepth into the use of the I2C protocol would be helpful for an Automation Engineer, as many control systems rely on various sensors and peripherals that communicate using I2C. The course's focus on practical implementation of I2C communication, reading datasheets, and setting up a development environment provides a foundation for an Automation Engineer who works with microcontrollers and embedded systems.
Control Systems Engineer
A Control Systems Engineer designs and develops control systems for various applications, such as industrial automation and robotics. This course provides useful background for a Control Systems Engineer. The course's focus on the practical implementation of communication protocols, such as I2C with a STM32 microcontroller, and writing sensor drivers and output to a display, provides a foundation for connecting physical systems to the digital world, an important aspect of working with control systems. Understanding device-level communication can help a Control Systems Engineer develop robust and reliable systems.
Instrumentation Engineer
An Instrumentation Engineer designs and maintains instruments and control systems for various industries. This course would be useful for an Instrumentation Engineer. Many instruments rely on microcontrollers and sensors, which often communicate using standards like I2C. The course's focus on practical implementation of I2C communication with a STM32 microcontroller, understanding datasheets and using HAL libraries can help an Instrumentation Engineer understand the inner workings of instruments as well as interface sensors with microcontrollers for data collection and control.
Product Development Engineer
A Product Development Engineer designs and develops new products, often involving both hardware and software components. This course would be helpful for a Product Development Engineer. Understanding how microcontrollers and sensors interact using the I2C protocol, and how to implement drivers for such devices, provides a foundation for a Product Development Engineer to design and implement embedded components in new products. Additionally, the course provides hands-on experience in reading datasheets and writing hardware abstraction layer libraries, which may be necessary for a career in product development.
Hardware Engineer
A Hardware Engineer designs, develops and tests physical components such as printed circuit boards, electronic hardware and integrated circuits. This course may be useful for a Hardware Engineer. While the course is focused on the software aspects of embedded systems, the course does cover how hardware and software interact through the I2C protocol. Understanding the I2C protocol, how to calculate pull-up resistance, and how to implement I2C communication between a microcontroller and peripherals such as sensors, OLED displays and pushbuttons, provides a useful perspective for a Hardware Engineer.
Test Engineer
A Test Engineer designs and implements tests to verify the correct operation of hardware and software systems. This course may be helpful for a Test Engineer. While much of the focus of the course is on implementation, the course also lays a foundation for how embedded devices communicate using I2C. A Test Engineer who has a foundational understanding of I2C and embedded software can create more robust testing scenarios for a variety of devices. The course's focus on practical implementation and reading datasheets is helpful for understanding the intended function of devices under test.
Electrical Engineer
An Electrical Engineer designs, develops, and tests electrical and electronic equipment and systems. This course may be useful for an Electrical Engineer. While much of an Electrical Engineer's work is focused on the hardware components of a system, understanding the software interface, for example through protocols like I2C, is important, especially in the realm of embedded systems. This course provides insight into how microcontrollers communicate with various devices using the I2C protocol and other protocols, and how to write drivers for the same.
Research Scientist
A Research Scientist conducts research in various fields, often involving the design and use of specialized equipment. This course may be useful for a Research Scientist. The course's focus on the practical implementation of the I2C protocol with a STM32 microcontroller and various sensors, as well as, reading datasheets and implementing drivers can help a Research Scientist to design and build specialized tools for their research. A Research Scientist may need to interface various sensors and devices with microcontrollers, and the experience in I2C communication provided by this course may be beneficial.

Reading list

We've selected one books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Hands on projects with the I2C protocol - Learn by doing!.
Provides a comprehensive overview of embedded systems architecture. It covers various aspects of hardware and software design, including microcontroller fundamentals, memory management, and communication protocols. It valuable resource for understanding the underlying principles of embedded systems and how they relate to the I2C protocol. This book is best used as additional reading to provide more depth to the course.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser