RM0008
Reference manual
STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx
and STM32F107xx advanced ARM-based 32-bit MCUs
Introduction
This reference manual targets application developers. It provides complete information on
how to use the STM32F101xx, STM32F102xx, STM32F103xx and
STM32F105xx/STM32F107xx microcontroller memory and peripherals. The STM32F101xx,
STM32F102xx, STM32F103xx and STM32F105xx/STM32F107xx will be referred to as
STM32F10xxx throughout the document, unless otherwise specified.
The STM32F10xxx is a family of microcontrollers with different memory sizes, packages and
peripherals.
For ordering information, mechanical and electrical device characteristics please refer to the
low-, medium- and high-density
STM32F101xx and STM32F103xx
datasheets, to the low-
and medium-density STM32F102xx datasheets and to the STM32F105xx/STM32F107xx
connectivity line datasheet.
For information on programming, erasing and protection of the internal Flash memory
please refer to the
STM32F10xxx Flash programming manual.
For information on the ARM Cortex™-M3 core, please refer to the
Cortex™-M3 Technical
Reference Manual.
Related documents
Available from
www.arm.com:
■
Cortex™-M3 Technical Reference Manual, available from:
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337e/DDI0337E_cortex_m3_r1p1_trm.pdf
Available from
www.st.com:
■
STM32F101xx STM32F103xx datasheets
■
STM32F10xxx Flash programming manual
June 2009
Doc ID 13902 Rev 9
1/995
www.st.com
Contents
RM0008
Contents
1
Documentation conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.1
1.2
1.3
List of abbreviations for registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Peripheral availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2
Memory and bus architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.1
2.2
2.3
System architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Memory organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Memory map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.3.1
2.3.2
2.3.3
Embedded SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Bit banding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Embedded Flash memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.4
Boot configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3
CRC calculation unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.1
3.2
3.3
3.4
CRC introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
CRC main features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
CRC functional description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
CRC registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.1
3.4.2
3.4.3
3.4.4
Data register (CRC_DR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Independent data register (CRC_IDR) . . . . . . . . . . . . . . . . . . . . . . . . . 52
Control register (CRC_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
CRC register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4
Power control (PWR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1
Power supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1.1
4.1.2
4.1.3
Independent A/D converter supply and reference voltage . . . . . . . . . . . 54
Battery backup domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Voltage regulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2
Power supply supervisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2.1
4.2.2
Power on reset (POR)/power down reset (PDR) . . . . . . . . . . . . . . . . . . 55
Programmable voltage detector (PVD) . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.3
Low-power modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2/995
Doc ID 13902 Rev 9
RM0008
4.3.1
4.3.2
4.3.3
4.3.4
4.3.5
4.3.6
Contents
Slowing down system clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Peripheral clock gating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Sleep mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Stop mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Standby mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Auto-wakeup (AWU) from low-power mode . . . . . . . . . . . . . . . . . . . . . . 62
4.4
Power control registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4.1
4.4.2
4.4.3
Power control register (PWR_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Power control/status register (PWR_CSR) . . . . . . . . . . . . . . . . . . . . . . 64
PWR register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5
Backup registers (BKP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.1
5.2
5.3
BKP introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
BKP main features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
BKP functional description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.1
5.3.2
Tamper detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
RTC calibration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.4
BKP registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4.1
5.4.2
5.4.3
5.4.4
5.4.5
Backup data register x (BKP_DRx) (x = 1 ..42) . . . . . . . . . . . . . . . . . . . 68
RTC clock calibration register (BKP_RTCCR) . . . . . . . . . . . . . . . . . . . . 68
Backup control register (BKP_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Backup control/status register (BKP_CSR) . . . . . . . . . . . . . . . . . . . . . . 69
BKP register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6
Low-, medium- and high-density reset and clock control (RCC) . . . . 74
6.1
Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.1.1
6.1.2
6.1.3
System reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Power reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Backup domain reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.2
Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.1
6.2.2
6.2.3
6.2.4
6.2.5
6.2.6
HSE clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
HSI clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
PLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
LSE clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
LSI clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
System clock (SYSCLK) selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Doc ID 13902 Rev 9
3/995
Contents
6.2.7
6.2.8
6.2.9
6.2.10
RM0008
Clock security system (CSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
RTC clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Watchdog clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Clock-out capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.3
RCC registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.3.1
6.3.2
6.3.3
6.3.4
6.3.5
6.3.6
6.3.7
6.3.8
6.3.9
6.3.10
6.3.11
Clock control register (RCC_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Clock configuration register (RCC_CFGR) . . . . . . . . . . . . . . . . . . . . . . 84
Clock interrupt register (RCC_CIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
APB2 peripheral reset register (RCC_APB2RSTR) . . . . . . . . . . . . . . . 89
APB1 peripheral reset register (RCC_APB1RSTR) . . . . . . . . . . . . . . . 91
AHB peripheral clock enable register (RCC_AHBENR) . . . . . . . . . . . . 93
APB2 peripheral clock enable register (RCC_APB2ENR) . . . . . . . . . . . 95
APB1 peripheral clock enable register (RCC_APB1ENR) . . . . . . . . . . . 97
Backup domain control register (RCC_BDCR) . . . . . . . . . . . . . . . . . . . 99
Control/status register (RCC_CSR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
RCC register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7
Connectivity line devices: reset and clock control (RCC) . . . . . . . . . 104
7.1
Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
7.1.1
7.1.2
7.1.3
System reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Power reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Backup domain reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.2
Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
7.2.6
7.2.7
7.2.8
7.2.9
7.2.10
HSE clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
HSI clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
PLLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
LSE clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
LSI clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
System clock (SYSCLK) selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Clock security system (CSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
RTC clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Watchdog clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Clock-out capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.3
RCC registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.3.1
7.3.2
7.3.3
Clock control register (RCC_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Clock configuration register (RCC_CFGR) . . . . . . . . . . . . . . . . . . . . . 115
Clock interrupt register (RCC_CIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
4/995
Doc ID 13902 Rev 9
RM0008
7.3.4
7.3.5
7.3.6
7.3.7
7.3.8
7.3.9
7.3.10
7.3.11
7.3.12
7.3.13
Contents
APB2 peripheral reset register (RCC_APB2RSTR) . . . . . . . . . . . . . . 121
APB1 peripheral reset register (RCC_APB1RSTR) . . . . . . . . . . . . . . 122
AHB Peripheral Clock enable register (RCC_AHBENR) . . . . . . . . . . . 125
APB2 peripheral clock enable register (RCC_APB2ENR) . . . . . . . . . . 126
APB1 peripheral clock enable register (RCC_APB1ENR) . . . . . . . . . . 128
Backup domain control register (RCC_BDCR) . . . . . . . . . . . . . . . . . . 130
Control/status register (RCC_CSR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
AHB peripheral clock reset register (RCC_AHBRSTR) . . . . . . . . . . . . 133
Clock configuration register2 (RCC_CFGR2) . . . . . . . . . . . . . . . . . . . 134
RCC register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8
General-purpose and alternate-function I/Os (GPIOs and AFIOs) . . 138
8.1
GPIO functional description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
8.1.1
8.1.2
8.1.3
8.1.4
8.1.5
8.1.6
8.1.7
8.1.8
8.1.9
8.1.10
8.1.11
General-purpose I/O (GPIO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Atomic bit set or reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
External interrupt/wakeup lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Alternate functions (AF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Software remapping of I/O alternate functions . . . . . . . . . . . . . . . . . . 141
GPIO locking mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Input configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Output configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Alternate function configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Analog input configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Peripherals’ GPIO configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
8.2
GPIO registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.2.1
8.2.2
8.2.3
8.2.4
8.2.5
8.2.6
8.2.7
Port configuration register low (GPIOx_CRL) (x=A..G) . . . . . . . . . . . . 148
Port configuration register high (GPIOx_CRH) (x=A..G) . . . . . . . . . . . 149
Port input data register (GPIOx_IDR) (x=A..G) . . . . . . . . . . . . . . . . . . 149
Port output data register (GPIOx_ODR) (x=A..G) . . . . . . . . . . . . . . . . 150
Port bit set/reset register (GPIOx_BSRR) (x=A..G) . . . . . . . . . . . . . . . 150
Port bit reset register (GPIOx_BRR) (x=A..G) . . . . . . . . . . . . . . . . . . . 151
Port configuration lock register (GPIOx_LCKR) (x=A..G) . . . . . . . . . . 151
8.3
Alternate function I/O and debug configuration (AFIO) . . . . . . . . . . . . . 152
8.3.1
8.3.2
8.3.3
8.3.4
Using OSC32_IN/OSC32_OUT pins as GPIO ports PC14/PC15 . . . . 152
Using OSC_IN/OSC_OUT pins as GPIO ports PD0/PD1 . . . . . . . . . . 152
CAN1 alternate function remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
CAN2 alternate function remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Doc ID 13902 Rev 9
5/995