STM32 Blue Pill CAN Communication in Normal Mode – A Register-Level Implementation

I have published two blog posts about the CAN bus protocol. The first post discusses the basics of the CAN bus protocol, while the second delves into practical implementation on the STM32 Blue Pill in loopback mode. If you are a beginner to the CAN protocol and have not yet read the previous posts, I … Read more

STM32 Blue Pill CAN Communication in Loopback Mode – A Register-Level Implementation

In my previous blog post, I covered the fundamental concepts of the CAN bus protocol. If you haven’t had the chance to read it yet, I suggest doing so as it will enhance your understanding of how the CAN bus operates within the STM32 Blue Pill and offer valuable tips for debugging the CAN bus … Read more

Mastering Controlled Area Networks (CAN): A Comprehensive Overview

CAN is a popular robust standard designed to communicate between the micro-controller without any help of a computer in the automotive domain. This was developed by Bosch in 1980. But now this is used in many other areas like industrial automation, medical equipment etc. Every microcontroller or entity that is supposed to send or receive … Read more

Implementing USB as a Custom HID Device Using STM32 (Part – 3)

In this third part of our series, we delve into the heart of the STM32 USB implementation by exploring its USB peripheral. We’ll discuss its components, how they work together, and the steps to configure it as a custom HID device using the STM32 Blue Pill, with a Raspberry Pi serving as the host. By … Read more

Implementing USB as a Custom HID Device Using STM32 (Part – 2)

In the first part of this blog, we laid the groundwork by discussing the fundamentals of USB communication and the concepts behind Custom HID devices. With that foundation in place, it’s time to delve deeper into the practical aspect of USB communication—packet flow during HID enumeration. Enumeration is the process where the USB host detects, … Read more

Implementing USB as a Custom HID Device Using STM32 (Part – 1)

Universal Serial Bus (USB) is one of the most commonly used interfaces in modern devices, enabling seamless communication between a host (like a PC or Raspberry Pi) and a peripheral (like a keyboard, mouse, or custom hardware). While USB simplifies user experience with its plug-and-play capabilities, it is an intricate protocol with numerous layers of … Read more

STM32F103C6T6A Bare Metal Programming – I2C Slave Read & Write

In my previous blog posts, we explored how to utilize the STM32 microcontroller as a master device, including performing read and write operations with a slave. Now, let’s advance to the next level, as the microcontroller is also capable of functioning as a slave device. In this post, I will explain how to configure the … Read more

STM32F103C6T6A Bare Metal Programming – I2C Master Read

In the previous post, I explained how to send data from the I2C master to the slave using the STM32F103C6T6 as the master and the AT24C04 as the slave. In this post, we will explore how to read data from the AT24C04 chip via I2C. First, we need to review the data sheet of the … Read more

STM32F103C6T6A Bare Metal Programming – I2C Master Write

In my previous post, I explained how I2C functions and demonstrated a hands-on example using the ATTiny85 through the bit-banging method, as it lacks a built-in I2C peripheral. In this post, we will explore the implementation of I2C on a microcontroller that includes a built-in I2C peripheral, specifically the STM32F103C6T6A. We will focus on the … Read more

STM32F103C6T6A Bare Metal Programming – UART

In my previous post, Mastering UART: A Comprehensive Overview, I delved into the protocol-level intricacies of UART communication. If you haven’t had a chance to read it, I recommend doing so to get a solid foundation on how UART works. In this blog post, I’ll be diving straight into hands-on programming with the STM32F103C6T6A microcontroller. … Read more