Home|Embedded Systems

Everything related to embedded systems: microcontrollers, firmware, practical examples, hardware related tips, etc.

STM32 Bootloader Design – Part 3

Here is the bootloader code, let's go through it and explain it step by step: /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "flash.h" #include "srecord.h" #define USER_APPLICATION_BASE_ADDRESS 0x8004000U uint8_t srec_data[16]; void __svc(1) EnablePrivilegedMode(void ); void __SVC_1 (void){ __disable_irq(); __set_CONTROL((__get_CONTROL( ))& 0xFFFFFFFE); // enter priv mode __enable_irq(); } static void BootJump(uint32_t *Address) { /* 1. Make sure,

2020-02-17T18:37:00+02:00By |Categories: Embedded Systems|Tags: , |0 Comments

RTOS Task Context Switching

In our article covering the scheduling algorithms of real-time operating systems (RTOS), we stated that they can run tasks in such a way that leaves the impression of a multitasking behavior. This is achieved by giving the RTOS the capability to interrupt a currently executing task and to start executing another one. At some point

2020-01-06T05:50:26+02:00By |Categories: Embedded Systems|Tags: , , |0 Comments

RTOS Scheduling Algorithms

We already introduced the basic concepts of real-time operating systems (RTOS) and now we will take a deeper look into one of the most important things when designing an embedded system using an RTOS - the scheduling of the tasks and the algorithms that are used. Scheduling Process Scheduling is the process of deciding which

2019-12-10T20:49:41+02:00By |Categories: Embedded Systems|Tags: , , |0 Comments

Embedded Real-Time Operating System (RTOS) Basics

Embedded systems are microcontroller-based systems that are designed to perform specific functions such as reading sensor data, responding to external events, communicating with other systems, controlling processes, etc. The tricky part is to make the distinction of what exactly qualifies such a system as real-time. Aren't all embedded systems operating in real-time? In order for

2019-10-26T22:27:34+03:00By |Categories: Embedded Systems|Tags: , , |0 Comments

STM32 Bootloader Design – Part 2

In the first post of this series, we covered the basic ideas behind creating an STM32 bootloader. Today we will focus on the application code and generate output, that our bootloader code will be able to process. The application code is very simple - it initializes one pin as output and toggles it after some

2020-02-16T15:49:58+02:00By |Categories: Embedded Systems|Tags: , |0 Comments

Open Drain Output vs. Push-Pull Output

Microcontrollers use pins for interfacing with the outside world. In general, the pins are the physical points on the package of an integrated circuit (IC) where a connection can be made to the printed circuit board.  Behind each pin (inside the IC) there is a special circuitry used for driving it. This circuitry (usually called a

2019-05-18T22:57:15+03:00By |Categories: Embedded Systems|Tags: |2 Comments

STM32 Bootloader Design – Part 1

We already learned what a bootloader is and why it is needed in this article. Today we will start developing our own bootloader. For this particular example, we will be using STM32F411 discovery board and FT2232H mini module. The project is based on ARM Keil MDK. Before we start coding, here is some theory. The

2019-08-14T00:14:53+03:00By |Categories: Embedded Systems|Tags: , |0 Comments