Microcontroller Firmware from Scratch
Nikolai Kondrashov
spbnick
Obligatory Workbench Photo
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5740575/workbench_compressed.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5645956/blue_pill1.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5646130/pasted-from-clipboard.png)
Our development kit
TTL serial cable
~1.2โฌ on eBay*
STM32F103C8T6 devboard
~2โฌ on eBay*
* with delivery, no affiliation
What can you do with it?
โ or rather what have I managed?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734610/assembled_small.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734608/left_open_small.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734607/top_open_small.jpg)
๐ย frankencar
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734761/top.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734762/bottom.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734784/xerox_printer_firmware_dump.png)
๐ย stm32-eeprom-dump
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733876/off_back.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733875/off_front.jpg)
๐ย christmas-card
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5734795/zx_printer_setup.jpg)
๐ย thermal-spectrumย (outdated, in progress)
You'll still need one library
Board docs at stm32duino.com and manufacturer's website
๐ ARM-TRM
๐ STM-PM
๐ STM-RM
๐ STM-DS
๐ ARM-ARM
๐ BD
Blue Pill documentation stack
Don't Fear The Docs!
They're your friends!
STM32F103C8T6 MCU
Micro USB socket
Boot configuration jumpers
Reset button
8MHz crystal
32.768KHz crystal
Power LED
User LED
SWD header
The "Blue Pill"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5707119/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737380/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737380/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737380/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737380/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737380/pasted-from-clipboard.png)
How to get your program in there?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5659233/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5663265/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5666469/pasted-from-clipboard.png)
๐ BD
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5666470/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5669674/pasted-from-clipboard.png)
๐ STM-DB
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5669674/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5669721/pasted-from-clipboard.png)
VCC
RX
TX
GND
RX
TX
GND
VCC
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5707119/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5715281/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5677387/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5669862/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5677009/pasted-from-clipboard.png)
Embedded engineers have a secret
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737169/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737241/pasted-from-clipboard.png)
Embedded is easy and fun
* unless you're paid to do it
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย *
Blink the LED!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5677040/pasted-from-clipboard.png)
LED light, D2 programmable
โย Google Translate
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741605/pasted-from-clipboard.png)
๐ BD
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5690084/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5690138/pasted-from-clipboard.png)
๐ STM-DS
๐ย blink.c
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741788/program_fixed.png)
The Vector Table
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687662/pasted-from-clipboard.png)
๐ ARM-ARM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687664/pasted-from-clipboard.png)
๐ ARM-ARM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5692207/pasted-from-clipboard.png)
๐ STM-PM
๐ย blink.c
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741788/program_fixed.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687685/pasted-from-clipboard.png)
๐ ARM-ARM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687721/pasted-from-clipboard.png)
๐ STM-PM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687768/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687772/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687768/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5692279/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5692316/pasted-from-clipboard.png)
๐ย blink.c
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741788/program_fixed.png)
Peripherals and Clocks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687768/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696394/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696562/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696563/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696565/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696707/pasted-from-clipboard.png)
๐ STM-RM
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5701384/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5701384/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5707487/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5707487/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5707487/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687768/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696565/pasted-from-clipboard.png)
๐ย blink.c
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741788/program_fixed.png)
GPIO
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712124/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712129/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712130/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712131/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712135/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712136/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712145/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5711944/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5711987/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712202/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712202/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712202/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712202/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712202/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5712202/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5687768/pasted-from-clipboard.png)
๐ STM-DS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696560/pasted-from-clipboard.png)
๐ย blink.c
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741788/program_fixed.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5715143/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5715143/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5715143/pasted-from-clipboard.png)
๐ย blink.c
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5741788/program_fixed.png)
Build
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5715191/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/6549952/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5715195/pasted-from-clipboard.png)
0x20000400
0x08000008 | 0x1
Flash
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5689934/pasted-from-clipboard.png)
Run!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5666469/pasted-from-clipboard.png)
๐ BD
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5666470/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5737486/pasted-from-clipboard.png)
Defaults will get you far!
Make a Library
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733054/pasted-from-clipboard.png)
๐ย libstammer/gpio.h
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733063/pasted-from-clipboard.png)
๐ย libstammer/rcc.h
Accelerate!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/6550184/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5696679/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5717695/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5717695/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5717680/pasted-from-clipboard.png)
๐ย libstammer/init.c
More peripherals!
USART
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733708/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733734/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5732917/pasted-from-clipboard.png)
๐ untested extract ofย stm32-poke/usart_hello.c
Timers/PWM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733760/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5732932/pasted-from-clipboard.png)
๐ untested extract ofย stm32-poke/pwm_blink.c
ADC
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733435/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5732942/pasted-from-clipboard.png)
๐ untested extract ofย stm32-poke/adc_stream.c
SPI
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5733790/pasted-from-clipboard.png)
๐ STM-RM
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5732948/pasted-from-clipboard.png)
๐ untested extract ofย stm32-poke/spi_leds.c
Go and experiment!
See Also
Give me some feedback, ask questions!
Thank You!
PDF and HTML icons made by Dimitry Miroliubov from www.flaticon.com
Credits
Some Blue Pill board photos by user Marekic from wiki.stm32duino.com
Talk and slides by
Nikolai Kondrashov (spbnick)
Chip icon made by Eucalyp from www.flaticon.comย licensed under CC 3.0 BY
![](https://s3.amazonaws.com/media-p.slid.es/uploads/51185/images/5705623/pasted-from-clipboard.png)
A fragment from "Parachuting Cats" advertisement by Folksam
Microcontroller Firmware from Scratch
By Nikolai Kondrashov
Microcontroller Firmware from Scratch
- 4,730