This document describes how the STM32F1 port operates and how it can be used on STM32-based boards, such as the “Blue Pill”. STM32 MCUs are not used on any Arduino boards, so their restrictions aren’t as widely known and less straight forward compared to common Arduino compatible boards. There aren’t any standard pin mappings either.
General considerations
The STM32 port currently requires an 8 MHz crystal for correct operation. The port is currently designed for and tested with STM32F103xB series MCUs, but it should work with any STM32F103 series MCUs with minimal changes.
Unlike Arduino-based boards, typically there is no automatic reset on serial
connection with STM32 boards. Please use restart_method: command
with the
STM32F1 port.
Fixed pins
When using serial, the UART used for communication with the host is fixed to pins PA9 (TX) and PA10 (RX). When using USB, the PA11 (D-) and PA12 (D+) pins are reserved. The USB code assumes that PA12 (D+) has a fixed pullup resistor attached to it.
SWD pins (PA13/PA14) are enabled for debugging and cannot be used for any I/O. SPI uses pins PB13/PB14/PB15, but the pins can be used as general I/O if SPI is not used.
Digital I/O
All pins that aren’t part of the fixed set can be used for digital I/O. Pins are
referred to by their primary name, e.g. PA1
. Do not try to use Arduino pin
aliases in your configuration. See ST’s datasheets for more details. The
STM32Duino wiki has more
info on the popular “Blue Pill” board.
Analog inputs
All ADC-capable pins can be used as analog inputs with the same naming as digital I/O pins. Small packages MCUs (e.g. LFQP48) have 10 channels (PA0-PA7, PB0-PB1), while larger package devices have 16 channels (PA0-PA7, PB0-PB1, PC0-PC5).
SPI
SPI uses pin PB13 (SCK), PB14 (MISO) and PB15 (MOSI). The clock speed range is 0.15..18 MHz. Chip select pins do not have any restrictions.