Getting Started with STM32F103C8T6


In addition to familiar Arduino boards, there are other options for use in electronic projects. One of these options is STM microcontroller. STM microcontrollers are based on ARM structure, and they are available at affordable prices. In this tutorial, you’ll learn how to use the STM32F103C8T6 board. 

What You Will Learn

  • Introduction of ST microcontrollers and ARM structure 
  • Introduction of STM32F103C8T6 board 
  • The required software to work with STM32 microcontrollers 
  • How to program STM32F103C8T6 board 
  • Make a blinker using STM32F103C8T6 

Introduction to ARM and STM Microcontrollers

You may have heard about ARM or Advanced RISC Machine. ARM is an architecture (not a microcontroller) to build 32bits and 64bits processors. Because of its affordable price, high speed, and low power consumption, the ARM architecture is widely used in embedded system processors such as mobile phones, Raspberry Pi, microcontrollers and etc. 

Microcontrollers built with the ARM architecture are commonly called Cortex- (A, R, M) X. A for the practical systems such as mobile phones, tablets, embedded systems, …, R for the real-time systems, and M for systems with low power consumption. The number after these letters shows the processor performance lines. 

ST company is one of the companies which use ARM architecture for their processors. The microcontrollers made by this company, called STM, have become popular due to their high diversity and providing functional programming libraries. 

STM microcontroller families named as the following rule: 


ST: name of the company 

M32: 32bits microcontroller 

XX: family and the working class: 

CodeCoreMax Freq(MHz)Max Flash(KB) Max SRAM(KB) Target
L0CortexM0+ 3219220Ultra Low Power
L1CortexM33251280Ultra Low Power
F2CortexM31201024128High Performance
L4CortexM4801024320Ultra Low Power
F4CortexM4180248384High Performance
F7CortexM72162048512High Performance
H7CortexM740020481048High Performance

aa: depends on microcontrollers function. (not following any specific algorithm) 

Y: number of pins: 

Z: memory:

nn: packaging. You can see the most important packages in the following table: 

Required Materials

Hardware Components

STM32F103C8T6 ARM Minimum System Development Board×1
ST Link v2×1
CP2102 USB to TTL/Serial Module×1

Software Apps

Keil MDK-ARM uVision5
STM32 CubeMx
STM23 Flash Loader Demostrator

STM32F103C8T6 Features STM32F103C8T6 is a good choice to start working with STM microcontrollers due to its low price and availability. The general specifications of this microcontroller are as follows: 

  • 32bits CortexM3 microcontroller  
  • 64 KB flash memory 
  • 20 KB SRAM memory 
  • The maximum processing speed of 72 MHz 
  • 37 GPIO pins 
  • 12 PWM channels 
  • Having 10 12bits ADC channels 
  • Supporting 2 units of I2C, 2 units of SPI and 3 units of UART 
  • Having 3 16bits timer 
  • Supporting CAN 2.0 protocol 

This microcontroller is available in modular and ready-to-use form

Getting Started with STM32F103C8T6

One of the best tools for programming STM microcontrollers is the MDK-ARM uVision 5 compiler, a powerful application including an integrated programming environment, C and C ++ compiler, debugger, microprogramming ability, and all the required elements for programming. 

The STM32 CubeMX is another useful tool to work with STM microcontrollers.  

Changing the registers, assigning the clock and configuring STM microcontrollers with codes may be difficult, but using the STM32 CubeMX, you can easily make adjustments to your STM microcontroller in a graphical and user-friendly environment and generate the prepared project for the Keil software. 

After creating the project and writing your program, it’s time to upload the code on the microcontroller. there are two common ways to do this: 

Programming STM Microcontrollers Using ST-Link

In this method, the STLink V2.0 tool for STM microcontrollers is used. Before programming, you need to download and install the drivers required by ST-Link from here. 

Now just do the following steps in STM32 CubeMX and Keil. 

Programming STM Microcontrollers Using USB to TTL Module

STM microcontrollers can be programmed through the Rx and Tx pins. In this methoda programmer tool is not required, and the only tool you need is a USB-TTL converter. Tuse this method, the STM32 Flash Loader Demonstrator software is also required. 

To program the microcontroller using USB, you should connect BOOT0 pin to 3.3V and BOOT1 pin to GND. (just displace the BOOT0 jumper in the modular boards) 

Now follow these steps: 

If the Target is protected is enabled for your board, and the red light is displayed, first, click the Remove protection and then click Next. 

Make a Blinker using STM32F103C8T6

In this project, we use the LED on the board, this LED is connected to the PC13 pin. 

Now follow the steps below in STM32 CubeMX: 

First Step. Selecting the Microcontroller :

After starting a new project, the list of microcontrollers will appear. Find STM32F103C8T6 and select it

Third Step. Clock Configurations 

Fourth Step. Seeing the Result

Select the Open project option and your project will open in Keil. 

Now you are ready to start programming.


For many of the STM microcontrollers applications, the HAL library is a good option; this library is enabled by default on your software. 

It is recommended to write your codes between USER CODE BEGIN and USER CODE END parts. If you change some things in CubeMX and re-export, the codes that are written out of the specified parts will be deleted. 

Most parts of this code are generated by STM32 CubeMX. The HAL_GPIO_TogglePin (LED_GPIO_Port, LED_Pin) function changes the pin status by specifying the desired port and pin. You can see that the desired port and pin are specified with the selected label in the STM32 CubeMX.

HAL_Delay function (50); function causes a delay of 50 ms.

To learn more about the full functions available in the HAL library, you can read here. 

What's Next?

  • Try turning the LED on and off using a key by inserting another GPIO pin as input and connecting a key.
Empty table

Share this post

Leave a Reply

Your email address will not be published. Required fields are marked *