AN2606 STM32 Microcontroller System
AN2606 STM32 Microcontroller System
Application note
STM32™ microcontroller system memory boot mode
Introduction
The bootloader is stored in the internal boot ROM memory (system memory) of STM32
devices. It is programmed by ST during production. Its main task is to download the
application program to the internal Flash memory through one of the available serial
peripherals (USART, CAN, USB, etc.). A communication protocol is defined for each serial
interface, with a compatible command set and sequences.
This document applies to the products listed in Table 1. They are referred to as STM32
throughout the document.
Table 1.
Type
Applicable products
T
Part number or product series
AF
STM32 F1 Mainstream
STM32 F2 Hi-performance
STM32F050x4, STM32F050x6
STM32F051x4, STM32F051x6, STM32F051x8
Microcontrollers STM32L151xx, STM32L152xx and STM32L162xx
STM32F302xx, STM32F303xx, STM32F313xx, STM32F372xx, STM32F373xx,
STM32F383xx
R
Contents
1 Related documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
T
STM32F103xx medium-density and
high-density value line bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.1 Bootloader configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
AF
4.2 Bootloader hardware requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3 Bootloader selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.4 Bootloader version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
T
high-density ultralow power device bootloader . . . . . . . . . . . . . . . . . . 39
8.1 Dual bank boot feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.2 Bootloader configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
AF
8.3 Bootloader hardware requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.4 Bootloader selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.5 Important considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.6 Bootloader version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
R
T
12 STM32L151xx and STM32L152xx medium-density
plus ultralow power device bootloader . . . . . . . . . . . . . . . . . . . . . . . . . 78
AF
12.1 Bootloader configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.2 Bootloader hardware requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.3 Bootloader selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.4 Important considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.5 Bootloader version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
R
T
16.5 Bootloader version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
List of tables
T
Table 15. STM32L1xxxx high-density bootloader versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Table 16. STM32F2xxxx configuration in System memory boot mode. . . . . . . . . . . . . . . . . . . . . . . . 49
Table 17. STM32F2xxxx Voltage Range configuration using bootloader V2.x . . . . . . . . . . . . . . . . . 54
AF
Table 18. STM32F2xxxx bootloader V2.x versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Table 19. STM32F2xxxx configuration in System memory boot mode. . . . . . . . . . . . . . . . . . . . . . . . 55
Table 20. STM32F2xxxx Voltage Range configuration using bootloader V3.x. . . . . . . . . . . . . . . . . . 62
Table 21. STM32F2xxxx bootloader V3.x versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Table 22. STM32F40xxx/41xxx configuration in System memory boot mode . . . . . . . . . . . . . . . . . . 64
Table 23. STM32F40xxx/41xxx Voltage Range configuration using bootloader . . . . . . . . . . . . . . . . 72
Table 24. STM32F40xxx/41xxx bootloader version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Table 25. STM32F051xx configuration in System memory boot mode . . . . . . . . . . . . . . . . . . . . . . . 74
Table 26. STM32F051xx bootloader versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
R
Table 27. STM32L15xxx medium-density plus configuration in System memory boot mode. . . . . . . 78
Table 28. STM32L15xxx medium-density plus bootloader versions. . . . . . . . . . . . . . . . . . . . . . . . . . 83
Table 29. STM32F050xx configuration in System memory boot mode . . . . . . . . . . . . . . . . . . . . . . . 84
Table 30. STM32F050xx bootloader versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
D
T
Table 66. USB minimum timings for STM32F427xx/437xx devices . . . . . . . . . . . . . . . . . . . . . . . . . 134
Table 67. I2C minimum timings for STM32F38xxx devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Table 68. I2C minimum timings for STM32F31xxx devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Table 69. Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
AF
R
D
List of figures
T
Figure 15. Bootloader selection for STM32F31xxx devices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Figure 16. Bootloader selection for STM32F427xx/437xx devices . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Figure 17. USART bootloader timing waveforms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
AF
Figure 18. USB bootloader timing waveforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Figure 19. I2C bootloader timing waveforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
R
D
1 Related documents
T
– STM32F050x4 and STM32F050x6 datasheets
– STM32F372xx and STM32F373xx datasheets
– STM32F302xx and STM32F303xx datasheets
AF
– STM32F383xx databrief
– STM32F313xx databrief
– STM32F427xx and STM32F437xx databrief
● Reference manuals
– STM32F101xx, STM32F102xx, STM32F103xx and STM32F105xx/107xx
reference manual (RM0008)
– Low, medium and high-density STM32F100xx value line reference manual
R
(RM0041)
– STM32L151xx, STM32L152xx, and STM32L162xx advanced ARM-based 32-bit
MCUs reference manual (RM0038)
– STM32F205xx, STM32F207xx, STM32F215xx and STM32F217xx advanced
D
T
AF
R
D
2 Glossary
T
High-density value line devices are STM32F100xx microcontrollers where the Flash
memory density ranges between 256 and 5128 Kbytes.
XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the
AF
Flash memory density ranges between 768 Kbytes and 1 Mbyte.
Medium-density ultralow power devices are STM32L151xx and STM32L152xx
microcontrollers where the program memory density ranges between 64 and 128 Kbytes.
Medium-density plus ultralow power devices are STM32L151xx and STM32L152xx
microcontrollers where the program memory size is 256Kbytes.
High-density ultralow power devices are STM32L151xx, STM32L152xx and
STM32L162xx microcontrollers where the program memory density size is 384 Kbytes.
R
T
AF
R
D
BOOT1 BOOT0
Boot mode
T Aliasing
AF
X 0 User Flash memory User Flash memory is selected as the boot space
0 1 System memory System memory is selected as the boot space
1 1 Embedded SRAM Embedded SRAM is selected as the boot space
Table 2 shows that the STM32 microcontrollers enter System memory boot mode if the
BOOT pins are configured as follows:
R
● BOOT0 = 1
● BOOT1 = 0
The values on the BOOT pins are latched on the fourth rising edge of SYSCLK after a reset.
D
Note: In some products, you may enter to bootloader with (BOOT0 = 0 and BOOT1 = x) when the
dual bank boot feature capability is available in STM32 products. Refer to section Dual bank
boot feature in product section for more information.
T
X = 4: two USARTs and DFU are used
X = 5: two USARTs and I2C are used
– Y specifies the device bootloader version
Let us take the example of a bootloader ID equal to 0x10. This means that it is the
AF
first version of the device bootloader that uses only one USART.
The bootloader ID is programmed in the last two bytes of the device system
memory and can be read by using the bootloader “Read memory” command or by
direct access to the system memory via JTAG/SWD.
The table below provides identification information about the bootloader embedded in
STM32 devices.
R
Medium-density
USART1/USART2 V2.0 0x1FF00FFE USART (V3.0)
ultralow power
High-density USART1/USART2/DFU USART (V3.1)/
V4.5 0x1FF01FFE
L1 ultralow power (USB Device FS) DFU (V2.2)
Medium-density
USART1/USART2/DFU USART (V3.1)/
plus ultralow V4.0 0x1FF01FFE
(USB Device FS) DFU (V2.2)
power
USART1/USART3 V2.0 0x1FFF77DE USART (V3.0)
T
STM32F051xx USART1/USART2 V2.1 0x1FFF7FA6 USART (V3.1)
F0
STM32F050xx USART1 V6.0 0x1FFFF7A6 USART (V3.1)
USART (V3.1)/
STM32F31xxx USART1/USART2/I2C1 V5.0 0x1FFFF7A6
I2C (V1.0)
1. For connectivity line devices, the USART bootloader returns V2.0 instead of V2.2 for the protocol version. For more details
please refer to the "STM32F105xx and STM32F107xx revision Z" errata sheet available from http://www.st.com.
T
bootloader in System memory boot mode.
Clock source HSI enabled The system clock is equal to 24 MHz using the PLL.
512 bytes starting from address 0x20000000 are used by the
RAM -
bootloader firmware.
2 Kbytes starting from address 0x1FFFF000 contain the
System memory -
bootloader firmware.
The independent watchdog (IWDG) prescaler is configured to
R
Enabled
parity and 1 Stop bit.
USART1_RX pin Input PA10 pin: USART1 receives.
Output
USART1_TX pin PA9 pin: USART1 transmits.
push-pull
SysTick timer Enabled Used to automatically detect the serial baud rate from the host.
The system clock is derived from the embedded internal high-speed RC, no external quartz
is required for the bootloader code.
After downloading the application binary, if you choose to execute the Go command, the
peripheral registers used by the bootloader (shown in the above table) are not initialized to
their default reset values before jumping to the user application. They should be
reconfigured in the user application if they are used. So, if the IWDG is being used in the
application, the IWDG prescaler value has to be adapted to meet the requirements of the
application (since the prescaler was set to its maximum value by the bootloader).
T
Bootloader for STM32F10xxx with USART1
AF
System Reset
0x7F received on
USART_1
Yes
D
No
Disable all
interrupt sources
Configure
USART1
Execute
BL_USART_Loop
for USART1
MS31602V1
Once System memory boot mode is entered and the microcontroller has been configured as
described above, the bootloader code begins to scan the USART1_RX line pin, waiting to
receive the 0x7F data frame: one start bit, 0x7F data bits, even parity bit and one stop bit.
The duration of this data frame is measured using the Systick timer. The count value of the
timer is then used to calculate the corresponding baud rate factor with respect to the current
system clock.
Next, the code initializes the serial interface accordingly. Using this calculated baud rate, an
acknowledge byte (0x79) is returned to the host, which signals that the STM32F10xxx is
ready to receive user commands.
T
– Updated Go Command to initialize the main stack pointer
– Updated Go command to return NACK when jump address is in
V2.1 the Option byte area or System memory area
– Updated Get ID command to return the device ID on two bytes
AF
– Update the bootloader version to V2.1
– Updated Read Memory, Write Memory and Go commands to
deny access with a NACK response to the first 0x200 bytes of
V2.2 RAM memory used by the bootloader
– Updated Readout Unprotect command to initialize the whole
RAM content to 0x0 before ROP disable operation
R
D
T
HSI enabled
CAN and DFU bootloaders (Once CAN or DFU
bootloader is selected, the clock source will be
derived from external crystal).
AF
The external clock is mandatory only for DFU and
CAN bootloaders and it must provide one of the
following frequencies: 8 MHz, 14.7456 MHz or
RCC 25 MHz.
HSE enabled For CAN bootloader, the PLL is used only to generate
48 MHz when 14.7456 MHz is used as HSE.
For DFU bootloader, the PLL is used to generate a
Common to 48 MHz system clock from all supported external
all clock frequencies.
R
bootloaders
The clock security system (CSS) interrupt is enabled
for the CAN and DFU bootloaders. Any failure (or
-
removal) of the external clock will generate system
reset.
D
USART1 and
Used to automatically detect the serial baud rate from
USART2 SysTick timer Enabled
the host for USARTx bootloader.
bootloaders
Once initialized, the USART2 configuration is: 8-bits,
USART2 Enabled even parity and 1 Stop bit. The USART2 uses its
remapped pins.
USART2 USART2_RX pin Input PD6 pin: USART2 receive (remapped pin)
bootloader
USART2_TX pin Output push-pull PD5 pin: USART2 transmit (remapped pin)
USART1_RX (PA10), CAN2_RX (PB5), OTG_FS_DM (PA11) and OTG_FS_DP (PA12) pins must
be kept at a high or low level during the detection phase.
Once initialized, the CAN2 configuration is: Baudrate
125 kbps, 11-bit identifier.
Note: CAN1 is clocked during the CAN bootloader
T
CAN2 Enabled
execution because in STM32F105xx and
STM32F107xx devices, CAN1 manages the
CAN2 communication between CAN2 and SRAM.
bootloader
AF
CAN2_RX pin Input PB5 pin: CAN2 receives (remapped pin).
CAN2_TX pin Output push-pull PB6 pin: CAN2 transmits (remapped pin).
USART1_RX (PA10), USART2_RX (PD6), OTG_FS_DM (PA11) and OTG_FS_DP (PA12) pins
must be kept at a high or low level during the detection phase.
USB OTG FS Enabled USB OTG FS configured in Forced Device mode
OTG_FS_VBUS pin Input or alternate PA9: Power supply voltage line
function, automatically
R
USART1_RX (PA10), USART2_RX (PD6) and CAN2_RX (PB5) pins must be kept at a high or low
level during the detection phase.
The system clock is derived from the embedded internal high-speed RC for USARTx
bootloader. This internal clock is used also for DFU and CAN bootloaders but only for the
selection phase. An external clock (8 MHz, 14.7456 MHz or 25 MHz.) is required for DFU
and CAN bootloader execution after the selection phase.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in the above table) will be initialized to
their default reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler was set to its maximum value by the
bootloader).
T
– If CAN2 is used to connect to the bootloader: the USART1_RX (PA10),
USART2_RX (PD6), OTG_FS_DM (PA11) and OTG_FS_DP (PA12) pins have to
be kept at a high or low level and must not be left floating during the detection
phase.
AF
– If DFU is used to connect to the bootloader: the USART1_RX (PA10),
USART2_RX (PD6) and CAN2_RX (PB5) pins have to be kept at a high or low
level and must not be left floating during the detection phase.
● Connection to the peripheral to be performed through:
– an RS232 serial interface (example, ST3232 RS232 transceiver) has to be directly
connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used, or to the USART2_RX (PD6) and USART2_TX (PD5) pins when
R
USART2 is used
– a CAN interface (CAN transceiver) has to be directly connected to the CAN2_RX
(PB5) and CAN2_TX (PB6) pins
– a certified USB cable has to be connected to the microcontroller (optionally an
D
T
To use the CAN2 interface, connect the CAN cable to CAN2. Once the bootloader detects a
frame on the CAN2_RX pin (PB5), the bootloader firmware enters a CAN loop and starts to
check the external clock frequency value, if the HSE is 8 MHz, 14.7456 MHz or 25 MHz
AF
CAN bootloader firmware enters an infinite loop and waits until it receives a message,
otherwise a system reset is generated.
If a USB cable is plugged into the microcontroller’s USB interface at any time during the
bootloader firmware selection sequence, the bootloader then enters the DFU bootloader
loop waiting for any DFU bootloader command.
To use the USART or the CAN bootloader, it is mandatory that no USB cable is connected to
the USB peripheral during the selection phase. Once the USART or CAN bootloader is
R
selected, the user can plug a USB cable without impacting the selected bootloader
execution except commands which generate a system reset.
Once one interface is selected for the bootloader, all other interfaces are disabled.
The figure below shows the bootloader detection mechanism. More details are provided in
D
System Reset
Configure USB
USB cable
detected
Yes
No
Disable all
interrupt sources
0x7F received
Yes
on USART_1
T
Yes Configure
USART1
No Disable all
No
interrupt sources
Execute
AF
0x7F received Configure BL_USART_Loop
on USART_2 USART2 for USART1
No Execute
BL_USART_Loop
for USART2
Frame detected
HSE = 8 MHz,
on CAN2_RX pin
14.7456 MHz or
R
25 MHz
No
Yes
Yes
HSE= 8MHz,
D
Execute
BL_CAN_Loop for
CAN2 MS31603V1
T
default reset values
– DFU bootloader: USB pending interrupt cleared before executing the Leave
DFU command
– DFU subprotocol version changed from V1.0 to V1.2
AF
– Bootloader version updated to V2.0
– Fixed PA9 excessive consumption described in Section 5.4.4.
– Get-Version command (defined in AN3155) corrected. It returns 0x22
V2.1
instead of 0x20 in bootloader V2.0. Refer to Section 5.4.3 for more details.
– Bootloader version updated to V2.1
– Fixed DFU option bytes descriptor (set to ‘e’ instead of ‘g’ because it is
read/write and not erasable).
R
● The values of the vector table at the beginning of the bootloader code are different. The
user software (or via JTAG/SWD) reads 0x1FFFE945 at address 0x1FFFB004 for
bootloader V2.0 0x1FFFE9A1 for bootloader V2.1, and 0x1FFFE9C1 for bootloader
V2.2.
● The DFU version is the following:
– V2.1 in bootloader V2.1
– V2.2 in bootloader V2.2.
It can be read through the bcdDevice field of the DFU Device Descriptor.
T
held low or left floating during the bootloader activation phase.
The bootloader cannot be connected through CAN2 (remapped), DFU (OTG FS in Device
mode), USART1 or USART2 (remapped).
AF
On 64-pin packages, the USART2_RX signal remapped PD6 pin is not available and it is
internally grounded. In this case, the bootloader cannot be used at all.
Workaround
● For 64-pin packages
None. The bootloader cannot be used.
● For 100-pin packages
R
Depending on the used peripheral, the pins for the unused peripherals have to be kept
at a high level during the bootloader activation phase as described below:
– If USART1 is used to connect to the bootloader, PD6 and PB5 have to be kept at a
high level.
D
– If USART2 is used to connect to the bootloader, PA10, PB5, PA11 and PA12 have
to be kept at a high level.
– If CAN2 is used to connect to the bootloader, PA10, PD6, PA11 and PA12 have to
be kept at a high level.
– If DFU is used to connect to the bootloader, PA10, PB5 and PD6 have to be kept at
a high level.
Note: This limitation applies only to STM32F105xx and STM32F107xx devices with a date code
below 937. STM32F105xx and STM32F107xx devices with a date code higher or equal to
937 are not impacted. See STM32F105xx and STM32F107xx datasheet for where to find
the date code on the device marking.
Workaround
None.
T
Description
When connecting an USB cable after booting from System-Memory mode, PA9 pin
(connected to VBUS=5 V) is also shared with USART TX pin which is configured as alternate
AF
push-pull and forced to 0 since the USART peripheral is not yet clocked. As a consequence,
a current higher than 25 mA is drained by PA9 I/O and may affect the I/O pad reliability.
This limitation is fixed in bootloader version 2.1 by configuring PA9 as alternate function
push-pull when a correct 0x7F is received on RX pin and the USART is clocked. Otherwise,
PA9 is configured as alternate input floating.
Workaround
R
None.
D
T
System memory and executes the embedded bootloader code which implements the
dual bank Boot mode:
a) First, the code checks Bank 2. If it contains a valid code (see Note: below), it
jumps to application located in Bank 2 and leaves the bootloader.
AF
b) If the Bank 2 code is not valid, it checks Bank 1 code. If it is valid (see “note”
below), it jumps to the application located in Bank 1.
c) If both Bank 2 and Bank 1 do not contain valid code (see “note” below), the normal
bootloader operations are executed as described in the following sections (no
jump to Flash banks is executed). Refer to Figure 3: Bootloader selection for
STM32F10xxx XL-density devices for more details.
2. When the bit BFB2 is set (default state), the dual bank boot mechanism is not
R
performed.
Note: The code is considered as valid when the first data (at the bank start address, which should
be the stack pointer) points to a valid address into the internal SRAM memory (stack top
address). If the first address points to any other location (out of the internal SRAM) the code
D
For the STM32F101xx and STM32F103xx XL-density devices, the Flash memory, system
memory or SRAM is selected as the boot space, as shown in Table 8 below.
T
System memory is selected as the boot space
0 0 1 System memory
then dual bank mechanism is executed
Embedded SRAM is selected as the boot
1 1 Embedded SRAM
space
AF
Table 8 shows that the XL-density devices enter System memory boot mode in two cases:
1. If the BOOT pins are configured as follows: BOOT0 = 1 and BOOT1 = 0
2. Or if:
a) the BFB2 bit is reset and
b) boot pins are configured as follows: BOOT0 = 0 and BOOT1 = x
Note: When conditions a, b, and c below are fulfilled, it is equivalent to configuring boot pins for
R
system memory boot (BOOT0 = 1 and BOOT1 = 0). In this case normal bootloader
operations are executed.
a) BFB2 bit is reset
b) Both banks don’t contain valid code
D
Clock source HSI enabled The system clock is equal to 24 MHz using the PLL.
2 Kbytes starting from address 0x2000 0000 are used by
RAM -
the bootloader firmware.
Common to all 6 Kbytes starting from address 0x1FFF E000 contain the
System memory -
bootloaders bootloader firmware.
T
The independent watchdog (IWDG) prescaler is
configured to its maximum value and is periodically
IWDG -
refreshed to prevent watchdog reset (in case the hardware
IWDG option was previously enabled by the user).
AF
Once initialized, the USART1 configuration is: 8-bits, even
USART1 Enabled
parity and 1 Stop bit.
USART2 USART2_RX pin Input PD6 pin: USART2 receives (remapped pins).
bootloader Output
D
The system clock is derived from the embedded internal high-speed RC, no external quartz
is required for the bootloader code.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in Table 9) are initialized to their default
reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler was set to its maximum value by the
bootloader).
T
– If the USART2 is used to connect to the bootloader: the USART1_RX (PA10) pin
has to be kept at a high or low level and must not be left floating during the
detection phase.
AF
● When the BFB2 bit is cleared, and Bank 2 and/or Bank 1 contain a valid user
application code, the Dual Bank Boot is always performed (bootloader always jumps to
the user code and never continues normal operations). Consequently, if you have
cleared the BFB2 bit (to boot from Bank 2), then to be able to execute the bootloader
code, you have to either:
– set the BFB2 bit to 1, or
– program the content of address 0x0808 0000 (base address of Bank2) and
0x0800 0000 (base address of Bank1) to 0x0, or
R
USART1 is used, or to the USART2_RX (PD6) and USART2_TX (PD5) pins when
USART2 is used
The USART1_CK, USART1_CTS and USART1_RTS pins are not used, therefore the
application can use these pins for other peripherals or GPIOs. This is also applicable for
USART2.
T
Once one interface is selected for the bootloader, the other interface is disabled.
Figure 3 shows the bootloader detection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
AF
R
D
System Reset
Yes
If Value
@0x08080000 is
Yes
within int. SRAM
address Jump to user code
in Bank2
No No
If Value
@0x08000000 is
Yes
T
within int. SRAM
address Jump to user code
in Bank1
No
AF
Continue Bootloader execution
Disable all
interrupt sources
0x7F received on
USART_1
D
No
Yes
0x7F received on
USART_2
No
Yes
Configure Configure
USART2 USART1
Execute Execute
BL_USART_Loop BL_USART_Loop
for USART2 for USART1
MS31604V1
T
AF
R
D
T
Feature/periphera
Bootloader State Comment
l
The system clock is derived from the embedded internal high-speed RC, no external quartz
is required for the bootloader code.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in the above table) are initialized to their
default reset values before jumping to the user application. If the user application uses the
IWDG, the IWDG prescaler value has to be adapted to meet the requirements of the
application (since the prescaler was set to its maximum value by the bootloader).
T
– If USART1 is used to connect to the bootloader: the USART2_RX (PD6) pin has to
be kept at a high or low level and must not be left floating during the detection
phase.
AF
– If USART2 is used to connect to the bootloader: the USART1_RX (PA10) pin has
to be kept at a high or low level and must not be left floating during the detection
phase.
● The peripheral to be used has to be connected through an RS-232 serial interface
(example, ST3232 RS-232 transceiver) which must be:
– Directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used
R
– Directly connected to the USART2_RX (PD6) and USART2_TX (PD5) pins when
USART2 is used
The USART1_CK, USART1_CTS and USART1_RTS pins are not used, therefore the
application can use these pins for other peripherals or GPIOs. The same note is applicable
D
for USART2.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS-232
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM32L152-EVAL board. For more details about this, refer to the
“STM32L152-EVAL board user manual” (UM1018), available from the STMicroelectronics
website: http://www.st.com.
Note: The RX pins of the peripherals not used in this bootloader must be kept at a known (low or
high) level and should not be left floating during the detection phase as described below.
Refer to Section 7.2: Bootloader hardware requirements for more information.
To use the USART bootloader on USART1 or USART2, connect the serial cable to the
desired interface.
Once the bootloader detects the data byte 0x7F on this interface, the bootloader firmware
executes the autobaudrate sequence and then enters a loop, waiting for any USART
bootloader command.
Once one interface is selected for the bootloader, the other interface is disabled.
The figure below shows the bootloader detection mechanism. More details are provided in
the sections corresponding to each peripheral bootloader.
System Reset
T
System Init (Clock, GPIOs,
IWDG, SysTick)
AF
0x7F received on
USART_1
No
Yes
R
0x7F received on
No USART_2
Yes
D
Configure Configure
USART2 USART1
Execute Execute
BL_USART_Loop BL_USART_Loop
for USART2 for USART1
MS31605V1
T
Word-aligned (address to be written should be a multiple of 4) and the number of data
must also be a multiple of 4. To erase a Data memory location, you can write zeros at
this location.
AF
● Option byte
Address is 0x1FF80000. They allow three levels of protection:
– Level 0
– Level 1
– Level 2
Refer to PM0062 programming manual for more details about protection levels.
● Read protect command corresponds to the Level 1 protection.
R
– Set protection level to Level 1. Then, set it to Level 0 (using the Read protect
command and then the Read Unprotect command). This operation results in a
mass erase of the internal Flash memory (refer to Programming Manual PM0062
for more details).
T
0x11, 0x21, 0x31, 0x43, 0x44, 0x63, 0x73, 0x82 or 0x92), then the limitation is not perceived from the host
since the command is NACKed anyway (as an unsupported new command).
AF
R
D
T
Boot mode:
a) The code first checks Bank 2. If it contains a valid code (see note below), it jumps
to the application code located in Bank 2 and leaves the bootloader.
b) If the Bank 2 code is not valid, it checks Bank 1 code. If it is valid (see note below),
AF
it jumps to the application located in Bank 1.
c) If both Bank 2 and Bank 1 do not contain valid code (see note below), the normal
bootloader operations are executed as described in the following sections and no
jump to Flash banks is performed. Refer to Figure 5: Bootloader selection for
STM32L1xxxx high-density devices for more details.
3. When BFB2 bit is set (default state), the dual bank boot mechanism is not performed.
Note: The code is considered as valid when the first data (at the bank start address, which should
R
be the stack pointer) points to a valid address into the internal SRAM memory (stack top
address). If the first address points to any other location (out of the internal SRAM) the code
is considered not valid.
A dual bank Boot mode example (FLASH\Dual_Boot) is provided within the STM32L1xxxx
D
T
User Flash memory Bank2 is
Yes X System memory
selected as the boot space
X
User Flash memory Bank1 is
No Yes System memory
AF
X 0 selected as the boot space
System memory is selected as the
No No No System memory
boot space
Yes No No System memory CPU blocked (halted)
System memory is selected as the
0 0 1 No X X System memory
boot space
Embedded SRAM is selected as the
R
1 1 No X X Embedded SRAM
boot space
User Flash memory Bank2 is
Yes X System memory
selected as the boot space
X 1 Yes User Flash memory Bank1 is
D
Table 13 shows that the STM32L1xxxx high-density devices enter System memory boot
mode in three cases:
● If the BOOT pins are configured as follows:
BOOT0 = 1 and BOOT1 = 0
● If the BFB2 bit is reset and protection Level2 is enabled
● If the BFB2 bit is reset and boot pins are configured as follows:
BOOT0 = 0 and BOOT1 = x
Note: When the conditions a, b, and c described below are fulfilled, it is equivalent to configuring
boot pins for system memory boot (BOOT0 = 1 and BOOT1 = 0). In this case normal
bootloader operations are executed.
a) BFB2 bit is reset
b) Both banks don’t contain valid code
c) Boot pins configured as follows: BOOT0 = 0 and BOOT1 = x
When the BFB2 bit is cleared, and Bank 2 and/or Bank 1 contain valid user application
code, the Dual Bank Boot is always performed (bootloader always jumps to the user code
and never continues normal operations).
Consequently, if you have cleared the BFB2 bit (to boot from Bank 2) then, to be able to
execute the bootloader code, you have to either:
– set the BFB2 bit to 1, or
– program the content of address 0x0803 0000 (base address of Bank2) and
0x0800 0000 (base address of Bank1) to 0x0, or
– set BOOT0 = 1 and BOOT1 = 0.
T
The clock security system (CSS) interrupt is
Common to all enabled for the DFU bootloader. Any failure
-
bootloaders (or removal) of the external clock generates
system reset.
AF
The independent watchdog (IWDG)
prescaler is configured to its maximum
value and is periodically refreshed to
IWDG -
prevent watchdog reset (in case the
hardware IWDG option was previously
enabled by the user).
Power Voltage range is set to Voltage Range 2.
R
firmware.
Once initialized, the USART1 configuration
USART1 Enabled
is: 8-bits, even parity and 1 Stop bit.
USART1_RX pin Input PA10 pin: USART1 in reception mode
USART1 bootloader
USART1_TX pin Output PA9 pin: USART1 in transmission mode
USART2_RX (PD6), USB_DM (PA11) and USB_DP (PA12) pins must be kept at a high or
low level during the detection phase.
USART1 and Used to automatically detect the serial baud
SysTick timer Enabled
USART2 bootloaders rate from the host for USARTx bootloader.
Table 14. STM32L1xxxx high-density configuration in System memory boot mode (continued)
Bootloader Feature/Peripheral State Comment
USART2 bootloader USART2_RX pin Input PD6 pin: USART2 in reception mode
USART2_TX pin Output PD5 pin: USART2 in transmission mode
USART1_RX (PA10), USB_DM (PA11) and USB_DP (PA12) pins must be kept at a high or
low level during the detection phase.
USB_DM pin Input or alternate PA11: USB Send-Receive data line
function,
USB_DP pin automatically PA12: USB Send-Receive data line
controlled by the USB
DFU bootloader
USB Low Priority interrupt vector is enabled
Interrupts Enabled
and used for USB DFU communication.
T
USART1_RX (PA10) and USART2_RX (PD6) pins must be kept at a high or low level
during the detection phase.
AF
Note: For the DFU interface, the external clock source (HSE) is required for USB operations. The
detection of the HSE value is done by the bootloader firmware and is based on the internal
oscillator clock (HSI, MSI). Thus, when due to temperature or other conditions, the internal
oscillator precision is altered above the tolerance band (1% around theoretical value), the
bootloader might calculate a wrong HSE frequency value. In this case, the bootloader DFU
interface might dysfunction or might not work at all.
The system clock is derived from the embedded internal high-speed RC for USARTx
R
bootloader. This internal clock is used also for DFU bootloader but only for the selection
phase. An external clock in the range of [24, 16, 12, 8, 6, 4, 3, 2] MHz is required for DFU
bootloader execution after the selection phase.
After downloading the application binary, if you choose to execute the Go command, all
D
peripheral registers used by the bootloader (shown in the above table) are initialized to their
default reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler was set to its maximum value by the
bootloader).
T
– If USART2 is used to connect to the bootloader: the USART1_RX (PA10),
USB_DM (PA11) and USB_DP (PA12) pins have to be kept at a high or low level
and must not be left floating during the detection phase.
AF
– If DFU (USB) is used to connect to the bootloader: the USART1_RX (PA10) and
USART2_RX (PD6) pins have to be kept at a high or low level and must not be left
floating during the detection phase.
● When the BFB2 bit is cleared, and Bank 2 and/or Bank 1 contain a valid user
application code, the Dual Bank Boot is always performed (bootloader always jumps to
the user code and never continues normal operations). Consequently, if you have
cleared the BFB2 bit (to boot from Bank 2), then to be able to execute the bootloader
code, you have to either:
R
T
plug a USB cable without impacting the selected bootloader execution except for the
commands which generate a system reset.
Once an interface is selected for the bootloader, the other interface is disabled.
AF
Figure 5: Bootloader selection for STM32L1xxxx high-density devices shows the bootloader
detection mechanism. More details are provided in the sections corresponding to each
peripheral bootloader.
R
D
System Reset
No
Yes Protection
level2 enabled
If Value
@0x08080000 is
Yes Yes
within int. SRAM
address Jump to user code
in Bank2 If Value
No No @0x08080000 is
Yes
within int. SRAM
If Value address
@0x08000000 is Jump to user code
Yes in Bank2
within int. SRAM
T
address Jump to user code No
in Bank1
No If Value
Continue Bootloader @0x08000000 is
Yes
AF
execution within int. SRAM
address
Jump to user code
Disable all in Bank1
interrupt sources No
CPU blocked
System Init (Clock, GPIOs, (halted)
IWDG, SysTick)
Yes
R
Configure USB
Configure
USART1
USART_1 reset
for USART1
No Yes Yes
MS31606V1
T
the erase operation of this location before any write. A write to Data memory must be
Word-aligned (address to be written should be a multiple of 4) and the number of data
must also be a multiple of 4. To erase a Data memory location, you can write zeros at
this location.
AF
● Option byte
Address is 0x1FF80000. They allow three levels of protection:
– Level 0
– Level 1
– Level 2
Refer to PM0062 programming manual for more details about protection levels.
● Read protect command corresponds to the Level 1 protection.
R
T
alarm, ...) will be lost including
backup registers. Note: When the
USART bootloader is selected
there is no change on the RTC
AF
configuration (including backup
registers).
– Stack overflow by 8 bytes when
jumping to Bank1/Bank2 if BFB2=0
or when Read Protection level is
set to 2.
Workaround: the user code should
force in the startup file the top of
stack address before to jump to the
R
T
The bootloader V2.x embedded in STM32F2xxxx devices support two serial interfaces:
The following table shows the required hardware resources of STM32 devices used by the
AF
bootloader V2.x in System memory boot mode.
HSI
Clock source The system clock is equal to 24 MHz.
enabled
R
T
USART1 and
Used to automatically detect the serial baud rate from the
USART3 SysTick timer Enabled
host.
bootloaders
AF
The system clock is derived from the embedded internal high-speed RC. No external quartz
is required for the bootloader code.
After downloading the application binary, if you choose to execute the Go command, the
peripheral registers used by the bootloader (shown in the above table) are not initialized to
their default reset values before jumping to the user application. They should be
reconfigured in the user application if they are used. So, if the IWDG is being used in the
R
application, the IWDG prescaler value has to be adapted to meet the requirements of the
application (since the prescaler was set to its maximum value by the bootloader).
The hardware required to put the STM32F2xxxx into System memory boot mode consists of
any circuitry, switch or jumper, capable of holding the BOOT0 pin high and the BOOT1 pin
low during reset.
To connect to the STM32F2xxxx during System memory boot mode, the following conditions
have to be verified:
● The RX pins of the peripherals unused in this bootloader have to be kept at a known
(low or high) level, and should not be left floating during the detection phase as
described below:
– If USART1 is used to connect to the bootloader: the USART3_RX (PC11 and
PB11) pins have to be kept at a high or low level and must not be left floating
during the detection phase.
– If USART3 (on PB10/PB11) is used to connect to the bootloader: the USART1_RX
(PA10) and the other USART3_RX pin (PC11) have to be kept at a high or low
level and must not be left floating during the detection phase.
– If USART3 (on PC10/PC11) is used to connect to the bootloader: the
USART1_RX (PA10) and the other USART3_RX pin (PB11) have to be kept at a
high or low level and must not be left floating during the detection phase.
● Connection to the peripheral to be performed through:
– An RS232 serial interface (example, ST3232 RS232 transceiver) has to be directly
T
connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used, or to the USART3_RX (PB11 or PC11) and USART3_TX (PB10
or PC10) pins or when USART3 is used.
AF
The USART1_CK, USART1_CTS and USART1_RTS pins are not used, therefore the
application can use these pins for other peripherals or GPIOs. The same note is applicable
for USART3.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS232
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM322xG-EVAL board. For more details, refer to the STM322xG-
EVAL board user manual, available from the STMicroelectronics website: http://www.st.com.
R
and USART3 (on PB10/PB11 and PC10/PC11). Any one of these peripheral interfaces can
be used to communicate with the bootloader and download the application code to the
internal Flash memory.
The embedded bootloader firmware is able to auto-detect the peripheral interface to be
used. In an infinite loop, it detects any communication on the supported bootloader
interfaces.
Note: The RX pins of the peripherals not used in this bootloader must be kept at a known (low or
high) level and should not be left floating during the detection phase as described below.
Refer to Section 9.1.2: Bootloader hardware requirements for more information.
To use the USART bootloader on USART1 or USART3, connect the serial cable to the
desired interface. Once the bootloader detects the data byte 0x7F on this interface, the
bootloader firmware executes the autobaudrate detection sequence and enters a loop,
waiting for any USART bootloader command.
Once an interface is selected for the bootloader, the other interfaces are disabled.
Figure 6 shows the bootloader detection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
System Reset
0x7F received on
USART_1
No
0x7F received on
USART_3
(PB10/PB11)
T
Yes
No
No 0x7F received on
USART_3
AF
(PC10/PC11)
Yes
R
Configure Configure
USART3 USART1
D
Execute Execute
BL_USART_Loop BL_USART_Loop
for USART3 for USART1 MS31607V1
T
Refer to PM0059 programming manual for more details about protection levels.
● Read protect command corresponds to Level 1 protection.
● Read unprotect command corresponds to Level 0 protection.
AF
● Mass erase command on STM32F2xxxx takes longer than on other STM32F devices
due to their memory density. Make sure that the timeout used by your host interface to
wait for an acknowledge event after sending a Mass erase command is sufficient.
● Voltage Range configuration
The Voltage Range can be updated on the fly by the bootloader software. The Voltage
Range is set to its default value at each bootloader software startup (after system reset
or jump to the bootloader code). The bootloader software allows modifying this
R
parameter through a virtual memory location. This memory location is not physical but
can be read and written using usual bootloader read/write operations according to the
protocol in use (USART,CAN or DFU). This memory location contains 4 bytes which
are described in Table 17. It can be accessed by 1, 2, 3 or 4 bytes. However, reserved
bytes should remain at their default values (0xFF), otherwise the request will be
D
NACKed.
T
NACKed.
Reserved.
0xFF: Default value.
0xFFFF0002 1 byte
AF
Other: all other values are not supported and will be
NACKed.
Reserved.
0xFF: Default value.
0xFFFF0003 1 byte
Other: all other values are not supported and will be
NACKed.
R
Bootloader
version Description Known limitations
number
T
crystal).
The system clock is equal to 60 MHz.
The HSE clock source is used only when the CAN
AF
RCC or the DFU (USB FS Device) interfaces are
HSE enabled selected.
The external clock must provide a frequency
multiple of 1 MHz and ranging from 4 MHz to
26 MHz.
The Clock Security System (CSS) interrupt is
enabled for the CAN and DFU bootloaders. Any
-
Common to all failure (or removal) of the external clock generates
R
-
contain the bootloader firmware.
The independent watchdog (IWDG) prescaler is
configured to its maximum value. It is periodically
IWDG - refreshed to prevent watchdog reset (in case the
hardware IWDG option was previously enabled by
the user).
Voltage range is set to [1.62V, 2.1V]. The voltage
range can be configured in run time using
bootloader commands. Note that in this range
Power -
internal Flash write operations are allowed only in
byte format (half-word, word and double-word
operations are not allowed).
T
Once initialized, the USART3 configuration is: 8-
USART3 Enabled
bits, even parity and 1 Stop bit.
USART3 USART3_RX pin Input PC11 pin: USART3 in reception mode
AF
bootloader (on
PC10/PC11) USART3_TX pin Output PC10pin: USART3 in transmission mode
USART1_RX (PA10), USART3_RX (PB11), CAN2_RX (PB05), OTG_FS_DM (PA11) and
OTG_FS_DP (PA12) pins must be kept at a high or low level during the detection phase.
USART1 and
Used to automatically detect the serial baud rate
USART3 SysTick timer Enabled
from the host for USARTx bootloaders.
bootloaders
R
CAN2 bootloader
CAN2_RX pin Input PB05 pin: CAN2 in reception mode
CAN2_TX pin Output PB13pin: CAN2 in transmission mode
USART1_RX (PA10), USART3_RX (PB11), USART3_RX (PC11), OTG_FS_DM (PA11) and
OTG_FS_DP (PA12) pins must be kept at a high or low level during the detection phase.
USB OTG FS configured in Forced Device mode.
USB_OTG_FS Enabled USB_OTG_FS interrupt vector is enabled and used
for USB DFU communications.
DFU bootloader USB_OTG_FS_DM pin Input PA11 pin: USB OTG FS DM line
USB_OTG_FS_DP pin Output PA12pin: USB OTG FS DP line
USART1_RX (PA10), USART3_RX (PB11), USART3_RX (PC11) and CAN2_RX (PB05) pins
must be kept at a high or low level during the detection phase.
This timer is used to determine the value of the
external clock frequency.
CAN2 and DFU
TIM11 Enabled Once the external clock frequency is determined,
bootloaders
the RCC system is configured to operate at 60 MHz
system clock (using PLL).
Note: For the DFU interface, the external clock source (HSE) is required for USB operations. The
detection of the HSE value is done by the bootloader firmware and is based on the internal
oscillator clock (HSI). Thus, when due to temperature or other conditions, the internal
oscillator precision is altered above the tolerance band (1% around theoretical value), the
bootloader might calculate a wrong HSE frequency value. In this case, the bootloader DFU
interface might dysfunction or might not work at all.
The system clock is derived from the embedded internal high-speed RC for USARTx
bootloaders. No external quartz is required in this case for the bootloader code. This internal
clock is also used for CAN and DFU (USB FS Device) but only for the selection phase. An
external clock multiple of 1 MHz (between 4 and 26 MHz) is required for CAN and DFU
bootloader execution after the selection phase.
The CAN and DFU bootloaders implement an external clock detection mechanism allowing
to determine the value of the external clock using the internal high-speed RC and TIM11
timer. The accuracy of this mechanism allows to detect only frequencies multiple of 1 MHz
and ranging from 4 to 26 MHz. Any other value is not supported and will result in
unexpected behavior of the bootloader.
T
After downloading the application binary, if you choose to execute the Go command, the
peripheral registers used by the bootloader (shown in the above table) are not initialized to
their default reset values before jumping to the user application. They should be
reconfigured in the user application if they are used. So, if the IWDG is being used in the
AF
application, the IWDG prescaler value has to be adapted to meet the requirements of the
application (since the prescaler was set to its maximum value by the bootloader).
To connect to the STM32F2xxxx during System memory boot mode, the following conditions
have to be verified:
● The RX pins of the peripheral unused in this bootloader have to be kept at a known (low
or high) level, and should not be left floating during the detection phase as described
D
below:
– If USART1 is used to connect to the bootloader: the USART3_RX (PC11 and
PB11), CAN2_RX (PB05), OTG_FS_DM (PA11) and OTG_FS_DP (PA12) pins
have to be kept at a high or low level and must not be left floating during the
detection phase.
– If USART3 (on PB10/PB11) is used to connect to the bootloader: the USART1_RX
(PA10), USART3_RX (PC11), CAN2_RX (PB05), OTG_FS_DM (PA11) and
OTG_FS_DP (PA12) have to be kept at a high or low level and must not be left
floating during the detection phase.
– If USART3 (on PC10/PC11) is used to connect to the bootloader: the
USART1_RX (PA10), USART3_RX pin (PB11), CAN2_RX (PB05), OTG_FS_DM
(PA11) and OTG_FS_DP (PA12) have to be kept at a high or low level and must
not be left floating during the detection phase.
T
The USART1_CK, USART1_CTS and USART1_RTS pins are not used, therefore the
application can use these pins for other peripherals or GPIOs. The same note is applicable
for USART3.
AF
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS232
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM322xG-EVAL board. For more details about this, refer to the
STM322xG-EVAL board user manual, available from the STMicroelectronics website:
http://www.st.com.
To use the CAN2 interface, connect the CAN cable to CAN2. Once the bootloader detects a
frame on the CAN2_RX pin (PB5), the bootloader firmware enters a CAN loop and starts to
determine the external clock frequency value. The supported HSE frequencies are multiple
of 1 MHz ranging from 4 to 26 MHz. Any other values leads to an unexpected behavior, CAN
bootloader firmware enters an infinite loop and waits until it receives a message. If the
external clock is not present, a system reset is generated.
If a USB cable is plugged into the microcontroller’s USB interface at any time during the
bootloader firmware selection sequence, the bootloader enters the DFU bootloader loop
waiting for any DFU bootloader command.
To use the USART or the CAN bootloader, it is mandatory that no USB Host is connected to
the USB peripheral during the selection phase. Once the USART or CAN bootloader is
selected, the user can plug a USB cable without impacting the selected bootloader
execution except commands which generate a system reset.
Once one interface is selected for the bootloader, all other interfaces are disabled. The
figure below shows the bootloader selection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
T
AF
R
D
System Reset
Configure
Configure USB OTG FS
USART1
device
Execute
0x7F received on BL_USART_Loop
USART_1 for USART1
No
Yes Disable all
0x7F received on interrupt sources
T
USART_3
(PB10/PB11)
Configure
USART3
No
AF
Execute
0x7F received on BL_USART_Loop
USART_3 for USART3
(PC10/PC11)
Yes
No
No
Yes
No HSE detected No Disable all
interrupt sources
D
Generate System
USB cable
Yes reset Reconfigure System
Detected
clock to 60MHz
Reconfigure System
clock to 48MHz and
Configure CAN
USB clock to 48 MHz
Execute
Execute DFU BL_CAN_Loop for
bootloader using USB CAN2
interrupts
MS31608V1
T
Refer to PM0059 programming manual for more details about protection levels.
● Read protect command corresponds to Level 1 protection.
● Read unprotect command corresponds to Level 0 protection.
AF
● Mass erase command on STM32F2xxxx takes longer than on other STM32 devices
due to their memory density. Make sure that the timeout used by your host interface to
wait for an acknowledge event after sending a Mass erase command is sufficient.
● Voltage Range configuration
The Voltage Range can be updated on the fly by the bootloader software. The Voltage
Range is set to its default value at each bootloader software startup (after system reset
or jump to the bootloader code). The bootloader software allows modifying this
R
parameter through a virtual memory location. This memory location is not physical but
can be read and written using usual bootloader read/write operations according to the
protocol in use (USART,CAN or DFU). This memory location contains 4 bytes which
are described in Table 20. It can be accessed by 1, 2, 3 or 4 bytes. However, reserved
bytes should remain at their default values (0xFF), otherwise the request will be
D
NACKed.
T
NACKed.
Reserved.
0xFF: Default value.
0xFFFF0002 1 byte
AF
Other: all other values are not supported and will be
NACKed.
Reserved.
0xFF: Default value.
0xFFFF0003 1 byte
Other: all other values are not supported and will be
NACKed.
R
D
T
– Option bytes, OTP and Device Feature
descriptors (in DFU interface) are set to “g”
instead of “e” (not erasable memory areas).
AF
– For the USART interface, two consecutive
Fix V3.2 limitations. DFU
NACKs (instead of 1 NACK) are sent when a
V3.3 interface robustness
Read Memory or Write Memory command is
enhancement.
sent and the RDP level is active.
1. If the “number of data - 1” (N-1) to be read/written is not equal to a valid command code (0x00, 0x01, 0x02,
0x11, 0x21, 0x31, 0x43, 0x44, 0x63, 0x73, 0x82 or 0x92), then the limitation is not perceived from the host
since the command is NACKed anyway (as an unsupported new command).
R
D
T
The system clock is equal to 24 MHz using the PLL.
The HSI clock source is used at startup (interface
HSI enabled detection phase) and when USARTx interfaces are
AF
selected (once CAN or DFU bootloader is selected,
the clock source will be derived from external
crystal).
The system clock is equal to 60 MHz.
The HSE clock source is used only when the CAN
RCC or the DFU (USB FS Device) interfaces are
HSE enabled selected.
The external clock must provide a frequency
R
Common to all
bootloaders system reset.
8 Kbytes starting from address 0x2000 0000 are
RAM -
used by the bootloader firmware.
30688 bytes starting from address 0x1FFF 0000
System memory -
contain the bootloader firmware.
The independent watchdog (IWDG) prescaler is
configured to its maximum value. It is periodically
IWDG - refreshed to prevent watchdog reset (in case the
hardware IWDG option was previously enabled by
the user).
Voltage range is set to [1.62V, 2.1V]. The voltage
range can be configured in run time using
bootloader commands. Note that in this range
Power -
internal Flash write operations are allowed only in
byte format (Half-Word, Word and Double-Word
operations are not allowed).
T
Once initialized, the USART3 configuration is: 8-
USART3 Enabled
bits, even parity and 1 Stop bit.
USART3 USART3_RX pin Input PC11 pin: USART3 in reception mode
AF
bootloader (on
PC10/PC11) USART3_TX pin Output PC10pin: USART3 in transmission mode
USART1_RX (PA10), USART3_RX (PB11), CAN2_RX (PB05), OTG_FS_DM (PA11) and
OTG_FS_DP (PA12) pins must be kept at a high or low level during the detection phase.
USART1 and
Used to automatically detect the serial baud rate
USART3 SysTick timer Enabled
from the host for USARTx bootloaders.
bootloaders
R
DFU bootloader USB_OTG_FS_DM pin Input PA11 pin: USB OTG FS DM line
USB_OTG_FS_DP pin Output PA12pin: USB OTG FS DP line
USART1_RX (PA10), USART3_RX (PB11), USART3_RX (PC11) and CAN2_RX (PB05) pins
must be kept at a high or low level during the detection phase.
This timer is used to determine the value of the
external clock frequency.
CAN2 and DFU
TIM11 Enabled Once the external clock frequency is determined,
bootloaders
the RCC system is configured to operate at 60 MHz
system clock (using PLL).
T
Note: For the DFU interface, the external clock source (HSE) is required for USB operations. The
detection of the HSE value is done by the bootloader firmware and is based on the internal
oscillator clock (HSI). Thus, when due to temperature or other conditions, the internal
AF
oscillator precision is altered above the tolerance band (1% around theoretical value), the
bootloader might calculate a wrong HSE frequency value. In this case, the bootloader DFU
interface might dysfunction or might not work at all.
The system clock is derived from the embedded internal high-speed RC for USARTx
bootloaders. No external quartz is required in this case for the bootloader code. This internal
clock is also used for CAN and DFU (USB FS Device) but only for the selection phase. An
external clock multiple of 1 MHz (between 4 and 26 MHz) is required for CAN and DFU
bootloader execution after the selection phase.
R
The CAN and DFU bootloaders implement an external clock detection mechanism allowing
to determine the value of the external clock using the internal high-speed RC and TIM11
timer. The accuracy of this mechanism allows to detect only frequencies multiple of 1 MHz
and ranging from 4 to 26 MHz. Any other value is not supported and will result in
D
T
OTG_FS_DP (PA12) have to be kept at a high or low level and must not be left
floating during the detection phase.
– If USART3 (on PC10/PC11) is used to connect to the bootloader: the
USART1_RX (PA10), USART3_RX pin (PB11), CAN2_RX (PB05), OTG_FS_DM
AF
(PA11) and OTG_FS_DP (PA12) have to be kept at a high or low level and must
not be left floating during the detection phase.
R
D
T
The USART1_CK, USART1_CTS and USART1_RTS pins are not used, therefore the
application can use these pins for other peripherals or GPIOs. The same note is applicable
for USART3.
AF
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS232
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM324xG-EVAL board. For more details about this, refer to the
STM324xG-EVAL board user manual, available from the STMicroelectronics website:
http://www.st.com.
R
The supported HSE frequencies are multiple of 1 MHz ranging from 4 to 26 MHz. Any other
values leads to an unexpected behavior, CAN bootloader firmware enters an infinite loop
and waits until it receives a message. If the external clock is not present, a system reset is
generated.
If a USB cable is plugged into the microcontroller’s USB interface at any time during the
bootloader firmware selection sequence, the bootloader enters the DFU bootloader loop
waiting for any DFU bootloader command.
To use the USART or the CAN bootloader, it is mandatory that no USB Host is connected to
the USB peripheral during the selection phase. Once the USART or CAN bootloader is
selected, the user can plug a USB cable without impacting the selected bootloader
execution except commands which generate a system reset.
Once one interface is selected for the bootloader, all other interfaces are disabled. The
figure below shows the bootloader selection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
T
AF
R
D
System Reset
Configure
Configure USB OTG FS
USART1
device
Execute
0x7F received on BL_USART_Loop
USART_1 for USART1
No
Yes Disable all
0x7F received on interrupt sources
T
USART_3
(PB10/PB11)
Configure
USART3
No
AF
Execute
0x7F received on BL_USART_Loop
USART_3 for USART3
(PC10/PC11)
Yes
No
No
Yes
No HSE detected No Disable all
interrupt sources
D
Generate System
USB cable
Yes reset Reconfigure System
Detected
clock to 60MHz
Reconfigure System
clock to 48MHz and
Configure CAN
USB clock to 48 MHz
Execute
Execute DFU BL_CAN_Loop for
bootloader using USB CAN2
interrupts
MS31609V1
T
Refer to PM0081 programming manual for more details about protection levels.
● Read protect command corresponds to Level 1 protection.
● Read unprotect command corresponds to Level 0 protection.
AF
● Mass erase command on STM32F40xxx/41xxx takes longer than on other STM32
devices due to their memory density. Make sure that the timeout used by your host
interface to wait for an acknowledge event after sending a Mass erase command is
sufficient.
● Voltage range configuration
The Voltage Range can be updated on the fly by the bootloader software. The Voltage
Range is set to its default value at each bootloader software startup (after system reset
R
or jump to the bootloader code). The bootloader software allows modifying this
parameter through a virtual memory location. This memory location is not physical but
can be read and written using usual bootloader read/write operations according to the
protocol in use (USART,CAN or DFU). This memory location contains 4 bytes which
are described in Table 20. It can be accessed by 1, 2, 3 or 4 bytes. However, reserved
D
bytes should remain at their default values (0xFF), otherwise the request will be
NACKed.
T
NACKed.
Reserved.
0xFF: Default value.
0xFFFF0002 1 byte
AF
Other: all other values are not supported and will be
NACKed.
Reserved.
0xFF: Default value.
0xFFFF0003 1 byte
Other: all other values are not supported and will be
NACKed.
R
D
T
and its checksum(1).
– Option bytes, OTP and Device Feature
descriptors (in DFU interface) are set to “g”
instead of “e” (not erasable memory areas).
AF
– For the USART interface, two consecutive
Fix V3.0 limitations. DFU
NACKs (instead of 1 NACK) are sent when a
V3.1 interface robustness
Read Memory or Write Memory command is
enhancement.
sent and the RDP level is active.
1. If the “number of data - 1” (N-1) to be read/written is not equal to a valid command code (0x00, 0x01, 0x02,
0x11, 0x21, 0x31, 0x43, 0x44, 0x63, 0x73, 0x82 or 0x92), then the limitation is not perceived from the host
since the command is NACKed anyway (as an unsupported new command).
R
D
T
Bootloader Feature/Peripheral State Comment
Note: After the STM32F051x6 and STM32F051x8 devices have booted in bootloader mode, the
serial wire debug (SWD) communication is no more possible until the system is reset,
because SWD uses PA14 pin (SWCLK) which is already used by the bootloader
(USART2_RX).
T
to be kept at a high or low level and must not be left floating during the detection
phase.
– If USART2 is used to connect to the bootloader, the USART1_RX (PA10) pin has
to be kept at a high or low level and must not be left floating during the detection
AF
phase.
● The peripheral to be used has to be connected through an RS232 serial interface
(example, ST3232 RS232 transceiver) which must be:
– directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used
– directly connected to the USART2_RX (PA15) and USART2_TX (PA14) pins when
USART2 is used.
R
● The USART1_CK, USART1_CTS and USART1_RTS pins are not used. As a result,
the application can use these pins for other peripherals or GPIOs. The same note is
applicable for USART2.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS232
D
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM320518-EVAL board. For more details about this, refer to the
“STM320518-EVAL board user manual” (UM1537), available from the STMicroelectronics
website: http://www.st.com.
described below. Refer to Section 11.2: Bootloader hardware requirements for more
information.
To use the USART bootloader on USART1 or USART2, connect the serial cable to the
desired interface. Once the bootloader detects the data byte 0x7F on this interface, the
bootloader firmware executes the autobaudrate sequence and then enters a loop, waiting
for any USART bootloader command.
Once one interface is selected for the bootloader, and the other interface is disabled.
The figure below shows the bootloader detection mechanism. More details are provided in
the sections corresponding to each peripheral bootloader.
System Reset
T
System Init (Clock, GPIOs,
IWDG, SysTick)
AF
0x7F received on
USART_1
No
R
Yes
0x7F received on
USART_2
No
Yes
D
Configure Configure
USART2 USART1
Execute Execute
BL_USART_Loop BL_USART_Loop
for USART2 for USART1
MS31610V1
T
before any interrupt is enabled, map the Flash memory by software to the address
0x0000 0000. This can be done by programming the MEM_MODE bits of the
SYSCFG_CFGR1 register (refer to RM0091 reference manual for more details about
software memory mapping).
AF
If the application is loaded into Flash memory at an address different from 0x08000000,
then the vector table has to be mapped to SRAM and the SRAM should in this case be
mapped by software to address 0x0000 0000.
number
Table 27. STM32L15xxx medium-density plus configuration in System memory boot mode
Bootloader Feature/Peripheral
T
State Comment
following range:
HSE enabled [24, 16, 12, 8, 6, 4, 3, 2] MHz.
The PLL is used to generate the USB
48 MHz clock and the 32 MHz clock for the
system clock.
D
Table 27. STM32L15xxx medium-density plus configuration in System memory boot mode
(continued) (continued)
Bootloader Feature/Peripheral State Comment
T
USART2 bootloader USART2_RX pin Input PD6 pin: USART2 in reception mode
USART2_TX pin Output PD5 pin: USART2 in transmission mode
AF
USART1_RX (PA10), USB_DM (PA11) and USB_DP (PA12) pins must be kept at a high or
low level during the detection phase.
USB_DM pin Input or alternate PA11: USB send-receive data line
function,
USB_DP pin automatically PA12: USB send-receive data line
controlled by the USB
DFU bootloader
USB low priority interrupt vector is enabled
Interrupts Enabled
and used for USB DFU communication.
R
USART1_RX (PA10) and USART2_RX (PD6) pins must be kept at a high or low level
during the detection phase.
D
Note: For the DFU interface, the external clock source (HSE) is required for USB operations. The
detection of the HSE value is done by the bootloader firmware and is based on the internal
oscillator clock (HSI, MSI). Thus, when due to temperature or other conditions, the internal
oscillator precision is altered above the tolerance band (1% around the theoretical value),
the bootloader might calculate a wrong HSE frequency value. In this case, the bootloader
DFU interface might dysfunction or might not work at all.
The system clock is derived from the embedded internal high-speed RC for the USARTx
bootloader. This internal clock is also used the for DFU bootloader but only for the selection
phase. An external clock in the range of [24, 16, 12, 8, 6, 4, 3, 2] MHz is required for the
execution of the DFU bootloader after the selection phase.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in the above table) are initialized to their
default reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler was set to its maximum value by the
bootloader).
T
– If DFU (USB) is used to connect to the bootloader: the USART1_RX (PA10) and
USART2_RX (PD6) pins have to be kept at a high or low level and must not be left
floating during the detection phase.
● Connection to the peripheral.
AF
– An RS-232 serial interface (example, ST3232 RS-232 transceiver) has to be
directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used, or to the USART2_RX (PD6) and USART2_TX (PD5) pins when
USART2 is used.
– A certified USB cable has to be connected to the microcontroller (optionally an
ESD protection circuitry can be used).
The USART1_CK, USART1_CTS and USART1_RTS pins are not used. As a result, the
R
application can use these pins for other peripherals or GPIOs. This is also applicable for
USART2.
D
If a USB cable is plugged into the microcontroller’s USB interface at any time during the
bootloader firmware selection sequence, the bootloader enters DFU bootloader loop waiting
for any DFU bootloader command.
To use the USART bootloader, it is mandatory that no USB Host be connected to the USB
peripheral during the selection phase. Once the USART bootloader is selected, the user can
plug a USB cable without impacting the selected bootloader execution except for the
commands which generate a system reset.
Once an interface is selected for the bootloader, the other interface is disabled.
Figure 10 shows the bootloader detection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
System Reset
T
System Init (clock, GPIOs,
IWDG, SysTick)
AF
Configure USB
No
R
No Yes reset
Configure
Yes USART1
0x7F received on Reconfigure system
USART_2 clock to 48 MHz and
Execute USB clock to 48 MHz
Disable all
interrupt sources BL_USART_Loop
for USART1
Execute DFU
Configure bootloader using USB
USART2 interrupts
Execute
BL_USART_Loop
for USART2
MS30868V1
T
the erase operation of this location before any write. A write to Data memory must be
word-aligned (address to be written should be a multiple of 4) and the number of data
must also be a multiple of 4. To erase a Data memory location, you can write zeros at
this location.
AF
● Option byte
Address is 0x1FF80000. They allow three levels of protection:
– Level 0
– Level 1
– Level 2
Refer to the PM0062 programming manual for more details about protection levels.
● Read protect commands correspond to the Level 1 protection.
R
T
AF
R
D
T
The System clock is equal to 24 MHz (using PLL clocked by
HSI
Clock Source HSI).
Enabled
1 Flash Wait State.
AF
2 Kbytes starting from address 0x20000000 are used by the
RAM -
bootloader firmware.
Common to all
bootloaders 3 Kbytes starting from address 0x1FFFEC00 contain the
System memory -
bootloader firmware.
The independent watchdog (IWDG) prescaler is configured to
its maximum value. It is periodically refreshed to prevent
IWDG -
watchdog reset in case the hardware IWDG option was
previously enabled by the user.
R
Note: After the STM32F050x4 and STM32F050x6 devices have booted in bootloader mode, serial
wire debug (SWD) communication is no longer possible until the system is reset. This is
because the SWD uses the PA14 pin (SWCLK) which is already used by the bootloader
(USART2_RX).
T
the detection phase.
● The peripheral to be used has to be connected through an RS-232 serial interface
(example, ST3232 RS-232 transceiver) which must be:
– directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
AF
USART1 (PA10/PA9) is used
– directly connected to the USART1_RX (PA15) and USART1_TX (PA14) pins when
USART1 (PA14/PA15) is used.
● The USART1_CK, USART1_CTS and USART1_RTS pins are not used. As a result,
the application can use these pins for other peripherals or GPIOs.
R
System Reset
0x7F received on
USART_1
(PA9/PA10)
T
No
AF
0x7F received on
USART_1
(PA15/PA14)
No
Yes
R
Configure
USART1
Execute
BL_USART_Loop
D
for USART1
MS30869V1
T
and before any interrupt is enabled, map the Flash memory by software to the address
0x00000000. This can be done by programming the MEM_MODE bits of the
SYSCFG_CFGR1 register (refer to the RM0091 reference manual for more details
about software memory mapping).
AF
If the application is loaded into the Flash memory at an address different to
0x08000000, the vector table has to be relocated to start from the address where the
application is loaded.
number
T
At startup, the system clock frequency is
configured to 48 MHz using the HSI. If an
HSI enabled
external clock (HSE) is not present, the
system is kept clocked from the HSI.
AF
The external clock can be used for all
bootloader interfaces and should have one
the following values 24, 18,16, 12, 9, 8, 6, 4,
RCC HSE enabled 3 MHz.
The PLL is used to generate the USB
48 MHz clock and the 48 MHz clock for the
system clock.
R
USART2 bootloader USART2_RX pin Input PD6 pin: USART2 in reception mode
USART2_TX pin Output PD5 pin: USART2 in transmission mode
USART1_RX (PA10), USB_DM (PA11) and USB_DP (PA12) pins must be kept at a high or
T
low level during the detection phase.
USB_DM pin Alternate function, PA11: USB Send-Receive data line
automatically
USB_DP pin controlled by the USB PA12: USB Send-Receive data line
AF
DFU bootloader USB Low Priority interrupt vector is enabled
Interrupts Enabled
and used for USB DFU communication.
USART1_RX (PA10) and USART2_RX (PD6) pins must be kept at a high or low level
during the detection phase.
● If HSE is present and has a value of 24, 18, 16, 12, 9, 8, 6, 4, or 3 MHz, the system
clock is configured to 48 Mhz with HSE as clock source. The DFU interface, USART1
and USART2 are functional and can be used to communicate with the bootloader
device.
D
● If HSE is not present, the HSI is kept as default clock source and only USART1 and
USART2 are functional.
The detection of the HSE value is done by the bootloader firmware and is based on the
internal oscillator clock (HSI). Thus, when due to temperature or other conditions, the
internal oscillator precision is altered above the tolerance band (1% around the theoretical
value), the bootloader might calculate a wrong HSE frequency value. In this case, the
bootloader DFU interface might dysfunction or might not work at all.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in the above table) are initialized to their
default reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler was set to its maximum value by the
bootloader).
T
and must not be left floating during the detection phase.
– If DFU (USB) is used to connect to the bootloader: the USART1_RX (PA10) and
USART2_RX (PD6) pins have to be kept at a high or low level and must not be left
floating during the detection phase.
AF
● For the DFU interface, a 1.5 K(+/- 5%) pull-up resistor must be connected to USB_DP
(PA12). For more information, refer to Universal Serial Bus Specification Revision 2.0,
section 7.1.5.1.
● Connection to the peripheral should be done through:
– an RS-232 serial interface (example, ST3232 RS-232 transceiver) which has to be
directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used, or to the USART2_RX (PD6) and USART2_TX (PD5) pins when
R
USART2 is used.
– a certified USB cable which has to be connected to the microcontroller (optionally
an ESD protection circuitry can be used).
The USART1_CK, USART1_CTS and USART1_RTS pins are not used. As a result, the
D
application can use these pins for other peripherals or GPIOs. This is also applicable for
USART2.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS-232
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM32373C-EVAL board. For more details about this, refer to the
"STM32373C-EVAL board user manual", available from the STMicroelectronics website
(www.st.com).
T
If a USB cable is plugged into the microcontroller’s USB interface at any time during the
bootloader firmware selection sequence, the bootloader enters a DFU bootloader loop
waiting for any DFU bootloader command.
To use the USART bootloader, it is mandatory that no USB Host be connected to the USB
AF
peripheral during the selection phase (or in the case where the external clock is not present,
even if a host is connected, the USB will never start). Once the USART bootloader is
selected, the user can plug a USB cable without impacting the selected bootloader
execution except for the commands which generate a system reset. Once an interface is
selected for the bootloader, the other interface is disabled. Figure 12 shows the bootloader
detection mechanism. More details are provided in the sections corresponding to each
peripheral bootloader.
R
D
System Reset
Configure USB
T
AF
USB cable
Detected & USB Yes
configured
Yes
Execute DFU
No Disable all bootloader using USB
Disable all interrupt sources interrupts
0x7F received on Yes interrupt sources
USART_1
Configure
R
Configure USART1
No USART2
No
Execute
0x7F received on Execute BL_USART_Loop
USART_2 BL_USART_Loop for USART1
D
for USART2
MS31611V1
T
and before any interrupt is enabled, map the Flash memory by software to the address
0x00000000. This can be done by programming the MEM_MODE bits of the
SYSCFG_CFGR1 register (refer to the RM0313 reference manual for more details
about software memory mapping).
AF
If the application is loaded into the Flash memory at an address different from
0x08000000, then the vector table has to be relocated to start from the address where
the application is loaded.
T
At startup, the system clock frequency is
configured to 48 MHz using the HSI. If an
HSI enabled
external clock (HSE) is not present, the
system is kept clocked from the HSI.
AF
The external clock can be used for all
bootloader interfaces and should have one
the following values 24, 18,16, 12, 9, 8, 6, 4,
RCC HSE enabled 3 MHz.
The PLL is used to generate the USB
48 MHz clock and the 48 MHz clock for the
system clock.
R
USART1 bootloader USART2_RX pin Input PD6 pin: USART2 in reception mode
USART2_TX pin Output PD5 pin: USART2 in transmission mode
USART1_RX (PA10), USB_DM (PA11) and USB_DP (PA12) pins must be kept at a high or
T
low level during the detection phase.
USB_DM pin Alternate function, PA11: USB Send-Receive data line
automatically
USB_DP pin controlled by the USB PA12: USB Send-Receive data line
AF
DFU bootloader USB Low Priority interrupt vector is enabled
Interrupts Enabled
and used for USB DFU communication.
USART1_RX (PA10) and USART2_RX (PD6) pins must be kept at a high or low level
during the detection phase.
● If HSE is present and has a value of 24, 18, 16, 12, 9, 8, 6, 4, or 3 MHz, the system
clock is configured to 48 Mhz with HSE as clock source. The DFU interface, USART1
and USART2 are functional and can be used to communicate with the bootloader
device.
D
● If HSE is not present, the HSI is kept as default clock source and only USART1 and
USART2 are functional.
The detection of the HSE value is done by the bootloader firmware and is based on the
internal oscillator clock (HSI). Thus, when due to temperature or other conditions, the
internal oscillator precision is altered above the tolerance band (1% around the theoretical
value), the bootloader might calculate a wrong HSE frequency value. In this case, the
bootloader DFU interface might dysfunction or might not work at all.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in the above table) are initialized to their
default reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler was set to its maximum value by the
bootloader).
T
and must not be left floating during the detection phase.
– If DFU (USB) is used to connect to the bootloader: the USART1_RX (PA10) and
USART2_RX (PD6) pins have to be kept at a high or low level and must not be left
floating during the detection phase.
AF
● For the DFU interface, a 1.5 K(+/- 5%) pull-up resistor must be connected to USB_DP
(PA12). For more information, refer to the Universal Serial Bus Specification Revision
2.0, section "7.1.5.1".
● Connection to the peripheral is to be performed through:
– an RS-232 serial interface (example, ST3232 RS-232 transceiver) directly
connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used, or to the USART2_RX (PD6) and USART2_TX (PD5) pins when
R
USART2 is used.
– a certified USB cable connected to the microcontroller (optionally an ESD
protection circuitry can be used).
The USART1_CK, USART1_CTS and USART1_RTS pins are not used. As a result, the
D
application can use these pins for other peripherals or GPIOs. This is also applicable for
USART2.
The user can control the BOOT0 and reset pins from a PC serial applet using the RS-232
serial interface which controls BOOT0 through the CTS line and reset through the DCD line.
The user must use a full null modem cable. The necessary hardware to implement for this
control exists in the STM32303C-EVAL board. For more details about this, refer to the
"STM32303C-EVAL board user manual", available from the STMicroelectronics website
(www.st.com).
T
bootloader enters into a DFU bootloader loop waiting for any DFU bootloader command.
To use the USART bootloader, it is mandatory that no USB Host be connected to the USB
peripheral during the selection phase (or in the case where the external clock is not present,
AF
even if a host is connected, the USB will never start). Once the USART bootloader is
selected, the user can plug a USB cable without impacting the selected bootloader
execution except for the commands which generate a system reset. Once an interface is
selected for the bootloader, the other interface is disabled. Figure 13 shows the bootloader
detection mechanism. More details are provided in the sections corresponding to each
peripheral bootloader.
R
D
System Reset
Configure USB
T
AF
USB cable
Detected & USB Yes
configured
Yes
Execute DFU
No Disable all bootloader using
Disable all interrupt sources USB interrupts
0x7F received Yes interrupt sources
on USART_1
Configure
Configure USART1
R
No USART2
No
Execute
0x7F received Execute BL_USART_Loop
on USART_2 BL_USART_Loop for USART1
for USART2
D
MS31612V1
T
before any interrupt is enabled, map the Flash memory by software to the address
0x00000000. This can be done by programming the MEM_MODE bits of the
SYSCFG_CFGR1 register (refer to the RM0316 reference manual for more details
about software memory mapping).
AF
If the application is loaded into the Flash memory at an address different to
0x08000000, the vector table has to be relocated to start from the address where the
application is loaded.
T
The system clock frequency is 8 MHz using
RCC HSI enabled
the HSI.
The independent watchdog (IWDG)
prescaler is configured to its maximum
AF
value and is periodically refreshed to
IWDG - prevent watchdog reset (in case the
Common to all hardware IWDG option was previously
bootloaders enabled by the user). Window feature is
disabled.
8 Kbytes starting from address
System memory - 0x1FFFD800. This area contains the
bootloader firmware
R
The system clock is derived from the embedded internal high-speed RC for the I2C1,
USART1 and USART2 bootloaders. No external quartz is required in this case for the
T
bootloader code.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in Table 35) are initialized to their default
AF
reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler has been previously set to its
maximum value by the bootloader).
The hardware required to put the STM32F38xxx devices into System memory boot mode
consists of any circuitry, switch or jumper, capable of holding the BOOT0 pin high while the
nBOOT1 bit in the option bytes (starting at address 0x1FFFF800) is set to 1. The setting of
this bit can be done through the STLink utility or an equivalent tool.
D
To connect to the STM32F38xxx devices during System memory boot mode, the following
conditions have to be verified.
● The RX pins of the peripherals unused in this bootloader have to be kept at a known
(low or high) level, and should not be left floating during the detection phase as
described below.
– If USART1 is used to connect to the bootloader: the USART2_RX (PD6) pin has to
be kept at a high or low level and must not be left floating during the detection
phase.
– If USART2 is used to connect to the bootloader: the USART1_RX (PA10) pin has
to be kept at a high or low level and must not be left floating during the detection
phase.
● Connection to the peripheral.
– If the I2C1 is used to connect to the bootloader: an I2C interface (I2C Master) has
to be directly connected to the I2C1_SCL (PB6) and I2C1_SDA (PB7) pins.
– If the USART is used to connect to the bootloader: an RS-232 serial interface
(example, ST3232 RS-232 transceiver) which must be:
T
–directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins
when USART1 is used.
–directly connected to the USART2_RX (PD6) and USART2_TX (PD5) pins
AF
when USART2 is used.
● The USART1_CK, USART1_CTS and USART1_RTS pins are not used. Therefore, the
application can use these pins for other peripherals or GPIOs. The same is applicable
to USART2.
● A 1.8 Kohm pull-up resistor has to be connected to both the SDA and SCL lines. This
value is used to fix the timing register value.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS-232
R
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM32373C-EVAL board. For more details about this, refer to the
"STM32373C-EVAL board user manual" , available from the STMicroelectronics website
(www.st.com).
D
To use the USART bootloader on USART1 or USART2, connect the serial cable to the
desired interface. Once the bootloader detects the data byte 0x7F on this interface, the
bootloader firmware executes the auto baudrate sequence and then enters into an infinite
loop and waits until it receives a USART bootloader command.
Note that for the USART1 and USART2 interfaces, the maximum baudrate supported by the
bootloader is 57600 baud.
Once one interface is selected for the bootloader, the other interface is disabled.
Figure 14 shows the bootloader detection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
T
AF
R
D
System Reset
Disable all
interrupt sources
Configure I2C1
T
Execute
BL_I2C_Loop for
No I2C1
AF
0x7F received on Yes
USART_1
Configure
USART1
No
No Execute
BL_USART_Loop
for USART1
R
Execute
BL_USART_Loop
for USART2
MS30872V1
T
and before any interrupt is enabled, map the Flash memory by software to the address
0x00000000. This can be done by programming the MEM_MODE bits of the
SYSCFG_CFGR1 register (refer to the RM0313 reference manual for more details
about software memory mapping).
AF
If the application is loaded into the Flash memory at an address different to
0x08000000, the vector table has to be relocated to start from the address where the
application is loaded.
number
T
The system clock frequency is 8 MHz using
RCC HSI enabled
the HSI.
The independent watchdog (IWDG)
prescaler is configured to its maximum
AF
value and is periodically refreshed to
IWDG - prevent watchdog reset (in case the
Common to all hardware IWDG option was previously
bootloaders enabled by the user). Window feature is
disabled.
8 Kbytes starting from address
System memory - 0x1FFFD800. This area contains the
bootloader firmware.
R
The system clock is derived from the embedded internal high-speed RC for I2C1, USART1
and USART2 bootloaders. No external quartz is required in this case for the bootloader
T
code.
After downloading the application binary, if you choose to execute the Go command, all
peripheral registers used by the bootloader (shown in the above table) are initialized to their
AF
default reset values before jumping to the user application.
If the user application uses the IWDG, the IWDG prescaler value has to be adapted to meet
the requirements of the application (since the prescaler has been previously set to its
maximum value by the bootloader).
The hardware required to put the STM32F31xxx devices into System memory boot mode
consists of any circuitry, switch or jumper, capable of holding the BOOT0 pin high while the
nBOOT1 bit in the option bytes (starting at address 0x1FFFF800) is set to 1. The setting of
this bit can be done through the STLink utility or an equivalent tool.
D
To connect to the STM32F31xxx devices during System memory boot mode, the following
conditions have to be verified.
● The RX pins of the peripherals unused in this bootloader have to be kept at a known
(low or high) level, and should not be left floating during the detection phase as
described below.
– If USART1 is used to connect to the bootloader: the USART2_RX (PD6) pin has to
be kept at a high or low level and must not be left floating during the detection
phase.
– If USART2 is used to connect to the bootloader: the USART1_RX (PA10) pin has
to be kept at a high or low level and must not be left floating during the detection
phase.
● Connection to the peripheral.
– If I2C1 is used to connect to the bootloader: an I2C interface (I2C master) has to
be directly connected to the I2C1_SCL (PB6) and I2C1_SDA (PB7) pins.
– If the USART is used to connect to the bootloader: an RS-232 serial interface (for
example, ST3232 RS-232 transceiver) which must be:
T
–directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins
when USART1 is used.
–directly connected to the USART2_RX (PD6) and USART2_TX (PD5) pins
AF
when USART2 is used.
● The USART1_CK, USART1_CTS and USART1_RTS pins are not used; therefore the
application can use these pins for other peripherals or GPIOs. The same is applicable
for USART2.
● A 1.8 Kohm pull-up resistor has to be connected to both the SDA and SCL lines. This
value is used to fix the timing register value.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS-232
R
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM32303C-EVAL board. For more details about this, refer to the
"STM32303C-EVAL board user manual", available from the STMicroelectronics website
(www.st.com).
D
To use the USART bootloader on USART1 or USART2, connect the serial cable to the
desired interface. Once the bootloader detects the data byte 0x7F on this interface, the
bootloader firmware executes the auto baudrate sequence and then enters an infinite loop
and waits until it receives a USART bootloader command.
Note that for the USART1 and USART2 interfaces, the maximum baudrate supported by the
bootloader is 57600 baud.
Once one interface is selected for the bootloader, the other interface is disabled.
Figure 15 shows the bootloader detection mechanism. More details are provided in the
sections corresponding to each peripheral bootloader.
T
AF
R
D
System Reset
Disable all
interrupt sources
Configure I2C1
T
Detected = 0x6E
Execute
BL_I2C_Loop for
No I2C1
AF
Yes
0x7F received on
USART_1
Configure
USART1
No
No Execute
BL_USART_Loop
R
for USART1
Yes
0x7F received on
USART_2
Configure
USART2
D
Execute
BL_USART_Loop
for USART2
MS30873V1
T
and before any interrupt is enabled, map the Flash memory by software to the address
0x00000000. This can be done by programming the MEM_MODE bits of the
SYSCFG_CFGR1 register (refer to the RM0313 reference manual for more details
about software memory mapping).
AF
If the application is loaded into the Flash memory at an address different to
0x08000000, the vector table has to be relocated to start from the address where the
application is loaded.
number
T
The system clock is equal to 24 MHz using the
PLL.
The HSI clock source is used at startup (interface
HSI enabled
AF
detection phase) and when USARTx interfaces
are selected (once CAN or DFU bootloader is
selected, the clock source will be derived from
external crystal).
The system clock is equal to 60 MHz.
RCC The HSE clock source is used only when the
CAN or the DFU (USB FS Device) interfaces are
HSE enabled selected.
R
Common to all -
failure (or removal) of the external clock
bootloaders generates system reset.
8 Kbytes starting from address 0x20000000 are
RAM -
used by the bootloader firmware
30424 bytes starting from address 0x1FFF0000,
System memory -
contain the bootloader firmware
The independent watchdog (IWDG) prescaler is
configured to its maximum value. It is periodically
IWDG - refreshed to prevent watchdog reset (in case the
hardware IWDG option was previously enabled
by the user).
Voltage range is set to [1.62V, 2.1V]. The voltage
range can be configured in run time using
bootloader commands. Note that in this range
Power -
internal Flash write operations are allowed only in
byte format (Half-Word, Word and Double-Word
operations are not allowed).
T
Once initialized, the USART3 configuration is: 8-
USART3 Enabled
bits, even parity and 1 Stop bit.
USART3
USART3_RX pin Input PC11 pin: USART3 in reception mode
AF
bootloader (on
USART3_TX pin Output PC10pin: USART3 in transmission mode
PC10/PC11)
USART1_RX (PA10), USART3_RX (PB11), CAN2_RX (PB05), OTG_FS_DM (PA11) and
OTG_FS_DP (PA12) pins must be kept at a high or low level during the detection phase.
USART1 and
Used to automatically detect the serial baud rate
USART3 SysTick timer Enabled
from the host for USARTx bootloaders.
bootloaders
R
CAN2 bootloader CAN2_RX pin Input PB05 pin: CAN2 in reception mode
CAN2_TX pin Output PB13pin: CAN2 in transmission mode
USART1_RX (PA10), USART3_RX (PB11), USART3_RX (PC11), OTG_FS_DM (PA11)
and OTG_FS_DP (PA12) pins must be kept at a high or low level during the detection
phase.
T
MHz system clock (using PLL).
Note: For the DFU interface, the external clock source (HSE) is required for USB operations. The
AF
detection of the HSE value is done by the bootloader firmware and is based on the internal
oscillator clock (HSI). Thus, when due to temperature or other conditions, the internal
oscillator precision is altered above the tolerance band (1% around the theoretical value),
the bootloader may calculate a wrong HSE frequency value. In this case, the bootloader
DFU interface might dysfunction or might not work at all.
The system clock is derived from the embedded internal high-speed RC for USARTx
bootloaders. No external quartz is required in this case for the bootloader code. This internal
clock is also used for the CAN and DFU (USB FS device) but only for the selection phase.
R
An external clock multiple of 1 MHz (between 4 and 26 MHz) is required for CAN and DFU
bootloader execution after the selection phase.
The CAN and DFU bootloaders implement an external clock detection mechanism allowing
to determine the value of the external clock using the internal high-speed RC and TIM11
D
timer. The accuracy of this mechanism allows to detect only those frequencies that are
multiples of 1 MHz and ranging from 4 to 26 MHz. Any other value is not supported and will
result in unexpected behavior of the bootloader.
After downloading the application binary, if you choose to execute the Go command, the
peripheral registers used by the bootloader (shown in the above table) are not initialized to
their default reset values before jumping to the user application. They should be
reconfigured in the user application if they are used. Therefore, if the IWDG is being used in
the application, the IWDG prescaler value has to be adapted to meet the requirements of
the application (since the prescaler has been previously set to its maximum value by the
bootloader).
T
OTG_FS_DP (PA12) have to be kept at a high or low level and must not be left
floating during the detection phase.
– If USART3 (on PC10/PC11) is used to connect to the bootloader: the
USART1_RX (PA10), USART3_RX pin (PB11), CAN2_RX (PB05), OTG_FS_DM
AF
(PA11) and OTG_FS_DP (PA12) have to be kept at a high or low level and must
not be left floating during the detection phase.
– If CAN2 is used to connect to the bootloader: the USART1_RX (PA10),
USART3_RX (PC11 and PB11), OTG_FS_DM (PA11) and OTG_FS_DP (PA12)
pins have to be kept at a high or low level and must not be left floating during the
detection phase.
– If DFU (USB FS device) is used to connect to the bootloader: the USART1_RX
R
(PA10), USART3_RX (PC11 and PB11) and CAN2_RX (PB05) pins have to be
kept at a high or low level and must not be left floating during the detection phase.
● Connection to the peripheral.
– An RS-232 serial interface (for example, ST3232 RS-232 transceiver) has to be
D
directly connected to the USART1_RX (PA10) and USART1_TX (PA9) pins when
USART1 is used, or to the USART2_RX (PD6) and USART2_TX (PD5) pins when
USART2 is used.
– A CAN interface (CAN transceiver) has to be directly connected to the CAN2_RX
(PB5) and CAN2_TX (PB13) pins.
– A certified USB cable has to be connected to the microcontroller (optionally an
ESD protection circuitry can be used).
The USART1_CK, USART1_CTS and USART1_RTS pins are not used, therefore the
application can use these pins for other peripherals or GPIOs. The same note is applicable
for USART3.
The user can control the BOOT0 and Reset pins from a PC serial applet using the RS-232
serial interface which controls BOOT0 through the CTS line and Reset through the DCD
line. The user must use a full null modem cable. The necessary hardware to implement for
this control exists in the STM324x7I_EVAL board. For more details about this, refer to the
STM324x7I_EVAL board user manual, available from the STMicroelectronics website
(www.st.com).
T
To use the CAN2 interface, connect the CAN cable to CAN2. Once the bootloader detects a
frame on the CAN2_RX pin (PB5), the bootloader firmware enters a CAN loop and starts to
determine the external clock frequency value.
AF
The supported HSE frequencies are multiples of 1 MHz ranging from 4 to 26 MHz. Any
other values lead to unexpected behavior, the CAN bootloader firmware enters an infinite
loop and waits until it receives a message. If the external clock is not present, a system reset
is generated.
If a USB cable is plugged into the microcontroller’s USB interface at any time during the
bootloader firmware selection sequence, the bootloader enters the DFU bootloader loop
R
System Reset
Yes
Disable all
System Init (clock, GPIOs,
interrupt sources
IWDG, SysTick)
Configure
Configure USB OTG FS
USART1
device
Execute
0x7F received on BL_USART_Loop
USART_1 for USART1
Yes
No
Disable all
0x7F received on interrupt sources
T
USART_3
(PB10/PB11)
Configure
USART3
No
AF
Execute
0x7F received on BL_USART_Loop
USART_3 for USART3
(PC10/PC11)
No Yes
No
HSE detected
R
Frame detected No
on CAN2_RX pin Yes
Yes
No
No HSE detected Disable all
interrupt sources
D
Generate system
USB cable
Yes reset Reconfigure system
detected
clock to 60 MHz
Reconfigure system
clock to 48 MHz and
Configure CAN
USB clock to 48 MHz
Execute
Execute DFU BL_CAN_Loop for
bootloader using USB CAN2
interrupts
MS30874V1
T
● Read protect commands correspond to Level 1 protection.
● Read unprotect commands correspond to Level 0 protection.
● A mass erase command on the STM32F427xx/437xx takes longer than on other
STM32 devices due to their memory density. Make sure that the timeout used by your
AF
host interface to wait for an acknowledge event after sending a Mass erase command is
sufficient.
● Voltage range configuration
The voltage range can be updated on the fly by the bootloader software. The voltage
range is set to its default value at each bootloader software startup (after a system
reset or jump to the bootloader code). The bootloader software allows modifying this
parameter through a virtual memory location. This memory location is not physical but
R
can be read and written using usual bootloader read/write operations according to the
protocol in use (USART,CAN or DFU). This memory location contains 4 bytes which
are described in Table 40. It can be accessed by 1, 2, 3 or 4 bytes. However, the
reserved bytes should remain at their default values (0xFF), otherwise the request will
be NACKed.
D
T
NACKed.
Reserved.
0xFF: default value.
0xFFFF0002 1 byte
AF
Other: all other values are not supported and will be
NACKed.
Reserved.
0xFF: default value.
0xFFFF0003 1 byte
Other: all other values are not supported and will be
NACKed.
If the application is loaded into the Flash memory at an address different to 0x08000000,
R
then the vector table has to be relocated to start from the address where the application is
loaded.
D
The bootloader protocol’s command set and sequences for each serial peripheral (USART,
CAN and USB) are the same for all STM32 devices. Some parameters, however, are
device-dependent. For a few commands, the value of some parameters may depend on the
device used. These parameters are listed below:
● PID (product ID), which changes with the device
● Valid memory addresses (RAM, Flash memory, System memory, option byte area)
accepted by the bootloader when the Read Memory, Go and Write Memory commands
are accepted.
● Size of the Flash memory sector used when executing the Write Protect command.
The table below shows the values of these parameters for each STM32 device bootloader in
production.
T
Product Flash
STM32 Flash Option byte System
Device (device) RAM memory sector
family memory area memory
ID size
AF
0x20000200 0x08000000 4 KB
0x1FFFF800 - 0x1FFFF000 -
Low-density 0x412 up to up to (4 pages of
0x1FFFF80F 0x1FFFF800
0x20002800 0x08008000 1 KB each)
0x20000200 0x08000000 4 KB
Medium- 0x1FFFF800 - 0x1FFFF000 -
0x410 up to up to (4 pages of
density 0x1FFFF80F 0x1FFFF800
0x20005000 0x08020000 1 KB each)
0x20000200 0x08000000 4 KB
0x1FFFF800 - 0x1FFFF000 -
R
4 KB (16
Medium- 0x20000800 0x08000000
pages of 0x1FF80000 - 0x1FF00000 -
density 0x416 up to up to
256 bytes 0x1FF80010 0x1FF01000
ultralow power 0x20004000 0x08020000
each)
4 KB
0x20001000 0x08000000
High-density (16 pages 0x1FF80000- 0x1FF00000-
L1 0x436 up to up to
ultralow power of 256 bytes 0x1FF80020 0x1FF02000
0x2000C000 0x08060000
each)
4 KB
Medium- 0x20001000 0x08000000
(16 pages 0x1FF80000 - 0x1FF00000 -
density plus 0x427 up to up to
of 256 bytes 0x1FF80020 0x1FF02000
ultralow power 0x20008000 0x08040000
each)
T
12 sectors
0x20002000 0x08000000
(4x16 KB, 0x1FFFC000- 0x1FFF0000 -
F2 STM32F2xxxx 0x411 up to up to
1x64 KB, 0x1FFFC00F 0x1FFF77FF
0x20020000 0x08100000
7x128 KB)
AF
0x20000800 0x08000000 4 KB
0x1FFFF800 - 0x1FFFEC00 -
STM32F051xx 0x440 up to up to (4 pages of
0x1FFFF80B 0x1FFFF800
0x20002000 0x08010000 1 KB each)
F0
0x20000800 0x08000000 4 KB
0x1FFFF800 - 0x1FFFEC00 -
STM32F050xx 0x440 up to up to (4 pages of
0x1FFFF80B 0x1FFFF800
0x20002000 0x08010000 1 KB each)
12 sectors
0x20002000 0x08000000
R
0x419 up to up to
437xx 2x64 KB, 0x1FFEC000- 0x1FFF77FF
0x20030000 0x08200000
14x128 KB) 0x1FFEC00F
0x20001400 0x08000000
127 pages 0x1FFFF800 - 0x1FFFD800 -
STM32F37xxx 0x432 up to up to
(2 KB each) 0x1FFFF80F 0x1FFFF7FF
0x20008000 0x08040000
0x20001400 0x08000000
127 pages 0x1FFFF800 - 0x1FFFD800 -
STM32F30xxx 0x422 up to up to
(2 KB each) 0x1FFFF80F 0x1FFFF7FF
0x2000A000 0x08040000
F3
0x20001000 0x08000000
127 pages 0x1FFFF800 - 0x1FFFD800 -
STM32F38xxx 0x432 up to up to
(2 KB each) 0x1FFFF80F 0x1FFFF7FF
0x20008000 0x08040000
0x20001400 0x08000000
127 pages 0x1FFFF800 - 0x1FFFD800 -
STM32F31xxx 0x422 up to up to
(2 KB each) 0x1FFFF80F 0x1FFFF7FF
0x2000A000 0x08040000
This section presents the main startup timings of the bootloader firmware depending on
products. They can be used to set up the connection timeout, that is how long the host waits
before synchronization with the bootloader is established.
Three types of timings will be described herein:
● Hardware-dependent timings relative to product and directly extracted from the product
datasheet.
● Communication-dependent timings relative to the baudrate and data traffic on the bus.
These timings depend only on the communication interface configuration and on the
host behavior.
● Bootloader software-dependent timings relative to bootloader software operations.
All the timings described in his section are expressed in milliseconds (ms) except when
otherwise specified.
After sending the synchronization data (0x7F), this timing corresponds to the time
during which the host waits before receiving the first acknowledge response (meaning
that the bootloader is ready to receive and execute host commands). This timing will be
referred to as B throughout this section.
D
A B
Reset Pin
state
0
Bootloader
execution time
a b c d e f g f
Bootloader
HSI Device PLL PLL Bootloader Device Device Ready to receive
ON Stabilized Set Locked Ready to receive receives Sends and execute
synchronization 0x7F byte 0x79 byte commands
byte (0x7F ) (ACK)
T
Period of time that Bootloader device firmware needs
HSI oscillator startup time (refer e
Period of Time that host should wait after sending the b to configure peripherals
to product datasheet)
synchronization byte (0x7F) and before receiving the acknowledge
B byte (0x79). After this period the Bootloader device is ready f Period of 1 byte sending through USART (depends on baudrate)
Period of time that Bootloader
to receive host commands. c device firmware needs to configure
peripherals and start operations g USART peripheral configuration time.
AF
x These timings are product dependent. For more information refer to product datasheet.
x These timings are communication dependent. Their values depend on the communication baudrate.
MS19032V1
The timing values for each product are listed in Table 43, Table 44, Table 45, Table 46,
Table 47, Table 48, Table 49, Table 50, and Table 51.
Table 43. USART bootloader timings for low/medium/high-density and value line
devices
R
Table 45.
T
USART bootloader timings for connectivity line devices (PA9 pin low)
AF
Time Description Min Max Unit
For connectivity line devices, PA9 pin (USB_VBUS) is used to detect the USB host
connection. The initialization of USB peripheral is performed only if PA9 is high at detection
phase which means that a host is connected to the port and delivering 5 V on the USB bus.
When PA9 level is high at detection phase, more time is required to initialize and shutdown
the USB peripheral.
To minimize bootloader detection time for connectivity line devices when PA9 pin is not
used, keep PA9 state low during detection phase from the moment the device is reset till a
device ACK is sent.
Table 46. USART bootloader timings for connectivity line devices (PA9 high)
Time Description Min Max Unit
Table 47.
T
USART bootloader timings for medium-density ultralow power devices
AF
Time Description Min Max Unit
Table 48. USART bootloader timings for high-density ultralow power devices
Time Description Min Max Unit
Table 49.
Time Description
T
USART bootloader timings for STM32F2xxxx devices
Min Max Unit
AF
a Reset temporization 0.5 3.0 ms
Table 51.
T
USART bootloader timings for STM32F051xx devices
AF
Time Description Min Max Unit
a
b
Reset Temporization
T
HSI oscillator startup time
1.5
0.001
4.5
0.002
ms
ms
AF
c Bootloader firmware operations 0.015 - ms
1. This Timing replace «d» and «e» timing when external clock (HSE) is not present.
T
B Time = (2 x f) + g 0.15845 15.0022 ms
1. This Timing replace «d» and «e» timing when external clock (HSE) is not present.
AF
Table 56. USART bootloader timings for STM32F38xxx devices
Time Description Min Max Unit
Table 58. USART bootloader timings for STM32F427xx and STM32F437xx devices
Time Description Min Max Unit
● Timing B
When the connection sequence has started, this timing corresponds to the time
required by the device to establish a correct connection with the host (meaning that the
bootloader is ready to receive and execute host commands). This timing includes
D
enumerations and DFU components configuration (e.g. internal Flash memory). This
timing will be referred to as B throughout this section.
For connectivity line devices, if the external HSE crystal frequency is different from 25 MHz
(14.7456 MHz or 8 MHz), the device performs several unsuccessful enumerations (with
connect – disconnect sequences) before being able to establish a correct connection with
the host. This is due to the HSE automatic detection mechanism based on SOF detection.
A and B timings are composed of different sub-timings as described in Figure 18. Refer to
Table 43, Table 44, Table 45, Table 46, Table 47, Table 48, Table 49, Table 50, and Table 51
for the values of timing A (identical to USART bootloader), and to Table 59, Table 60,
Table 61, and Table 62 for the values of timing B.
Note: For USB interface, only minimum timings are provided since the connection timing depends
on environment and host configuration (number of nodes (hubs), host speed, traffic on the
USB bus, host loading …).
A B
Reset Pin
state
0
Bootloader
execution time
USB initialization and
a b c d e USB protocol operations
Locked time.
Bootloader
HSI Device PLL PLL Bootloader Ready to receive
ON Stabilized Set Ready to connect and execute
commands
T
Period of time that Bootloader device firmware needs
HSI oscillator startup time (refer e
Period of Time that host should wait between starting connection b to configure peripherals
to product datasheet)
Sequence and establishment of correct connection.
B After this period the Bootloader device is ready
Period of time that Bootloader
to receive host commands. c device firmware needs to configure
peripherals and start operations
AF
x These timings are product dependent. For more information refer to product datasheet.
x These timings are communication dependent. Their values depend on the communication baudrate.
MS19033V1
a Reset temporization 1 1 1 ms
R
Bootloader firmware
c 0.025 0.025 0.025 ms
operations
D
Bootloader firmware
e 523 523 523 ms
operations
524.3
A Time = a + b + c + d + e 524.376 524.376 ms
76
Table 60. USB minimum timings for high-density ultralow power devices
Time Description Min Unit
T
establishment
A Time = a + b + c + d + e 84.5872 ms
B Connection establishment 54 ms
D
T
a Reset temporization 1.5 ms
b HSI oscillator startup time 0.001 ms
c Bootloader firmware operations 0.015 ms
AF
d PLL Lock time 0.2 ms
c + d(1) Bootloader firmware operations (if HSE not present)
e Bootloader firmware operations 43.2 ms
A Time = a + b + c + d + e 44.916 ms
B Connection establishment 560 ms
R
T
HSI internal oscillator.
AF
R
D
T
AF
R
D
Note: For I2C communication, a timeout mechanism is implemented and it must be respected to
execute bootloader commands correctly. This timeout is implemented between two I2C
frame in the same command (eg: for Write memory command a timeout is inserted between
command sending frame and address memory sending frame). Also the same timeout
period is inserted between two successive data reception or transmission in the same I2C
frame. If the timeout period is elapsed a system reset is generated to avoid bootloader
crash. Please refer to the following tables to get the I2C timeout value of each product.
In erase memory command and read-out unprotect command, the duration of page erasing
should be taken into consideration when implementing the host side. After sending the code
of pages to be erased, the host should wait until the bootloader device performs page
erasing to complete the remaining steps of erase command.
T
Time Description Min Unit
- I2C Timeout 10 ms
D
21 Revision history
T
Notion of “permanent” (Permanent Write Unprotect/Readout
Protect/Unprotect) removed from document. Small text changes.
Bootloader version upgraded to 2.0.
Small text changes. RAM and System memory added to Table : The
AF
system clock is derived from the embedded internal high-speed RC,
no external quartz is required for the bootloader code..
Section 1.6: Using the bootloader on page 8 removed.
Erase modified, Note 3 modified and Note 1 added in Table 3:
Bootloader commands on page 9.
Byte 3: on page 11 modified.
Byte 2: on page 13 modified.
Byte 2:, Bytes 3-4: and Byte 5: on page 15 modified, Note 3
R
modified.
Byte 8: on page 18 modified.
Notes added to Section 2.5: Go command on page 18.
26-May-2008 3 Figure 11: Go command: device side on page 20 modified.
D
T
Figure 11: Go command: device side modified.
Figure 13: Write Memory command: device side modified.
Note added and bytes 3 and 4 sent by the host modified in
Section 2.7: Erase Memory command.
AF
Note added to Section 2.8: Write Protect command.
Application note restructured. Value line and connectivity line device
09-Mar-2010 6 bootloader added (Replaces AN2662).
Introduction changed. Glossary added.
Related documents: added XL-density line datasheets and
programming manual.
Glossary: added XL-density line devices.
R
device bootloader.
Table 42: added information for XL-density line devices.
Added information for high-density value line devices in Table 3 and
08-Oct-2010 8
Table 42.
14-Oct-2010 9 Removed references to obsolete devices.
26-Nov-2010 10 Added information on ultralow power devices.
Added information related to STM32F205/215xx and
13-Apr-2011 11 STM32F207/217xx devices.
Added Section 20: Bootloader timing characteristics
Updated:
– Table 12: STM32L15xxx medium-density bootloader versions
– Table 16: STM32F2xxxx configuration in System memory boot
06-Jun-2011 12
mode
– Table 18: STM32F2xxxx bootloader V2.x versions
– Table 21: STM32F2xxxx bootloader V3.x versions
T
Added bootloader V2.2 in Section 5.4.1: How to identify
STM32F105xx/107xx bootloader versions.
Added note related to DFU interface below Table 14: STM32L1xxxx
high-density configuration in System memory boot mode. Added
AF
V4.2 bootloader know limitations and updated description, and
added V4.5 bootloader in Table 15: STM32L1xxxx high-density
bootloader versions.
30-Jul-2012 14 Added note related to DFU interface below Table 19: STM32F2xxxx
configuration in System memory boot mode. Added V3.2 bootloader
know limitations, and added V3.3 bootloader in Table 21:
STM32F2xxxx bootloader V3.x versions. Updated STM32F2xx and
STM32F4xx system memory end address in Table 22:
STM32F40xxx/41xxx configuration in System memory boot mode.
R
../...
(Continued)
Added Table 48: USART bootloader timings for high-density ultralow
power devices, and Table 51: USART bootloader timings for
30-Jul-2012 14
STM32F051xx devices.
Added Table 60: USB minimum timings for high-density ultralow
power devices.
Updated Section 1: Related documents and Section 2: Glossary.
Updated generic product names throughout the document (see
Glossary.)
Added the following new sections:
– Section 12: STM32L151xx and STM32L152xx medium-density
plus ultralow power device bootloader.
– Section 13: STM32F050x4 and STM32F050x6 device bootloader.
– Section 14: STM32F372xx and STM32F373xx device bootloader.
T
– Section 15: STM32F302xx and STM32F303xx device bootloader.
– Section 16: STM32F383xx device bootloader.
– Section 17: STM32F313xx device bootloader.
AF
– Section 18: STM32F427xx and STM32F437xx device bootloader.
23-Jan-2013 15 – Section 20.3: I2C bootloader timing characteristics.
Added Table 52 to Table 58 (USART bootloader timings).
Replaced Figure 1 to Figure 9, and Figures 12, 13 and 19.
Modified Tables 3, 4, 9, 11, 16, 21, 22, 24 to 27, 29, 31, 33, 35, 37,
39 and 42.
Removed “X = 6: one USART is used” in Section 3.3: Bootloader
identification.
R
Information in this document is provided solely in connection with ST products. STMicroelectronics NV and its subsidiaries (“ST”) reserve the
right to make changes, corrections, modifications or improvements, to this document, and the products and services described herein at any
T
time, without notice.
All ST products are sold pursuant to ST’s terms and conditions of sale.
Purchasers are solely responsible for the choice, selection and use of the ST products and services described herein, and ST assumes no
liability whatsoever relating to the choice, selection or use of the ST products and services described herein.
AF
No license, express or implied, by estoppel or otherwise, to any intellectual property rights is granted under this document. If any part of this
document refers to any third party products or services it shall not be deemed a license grant by ST for the use of such third party products
or services, or any intellectual property contained therein or considered as a warranty covering the use in any manner whatsoever of such
third party products or services or any intellectual property contained therein.
UNLESS OTHERWISE SET FORTH IN ST’S TERMS AND CONDITIONS OF SALE ST DISCLAIMS ANY EXPRESS OR IMPLIED
WARRANTY WITH RESPECT TO THE USE AND/OR SALE OF ST PRODUCTS INCLUDING WITHOUT LIMITATION IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE (AND THEIR EQUIVALENTS UNDER THE LAWS
R
OF ANY JURISDICTION), OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.
UNLESS EXPRESSLY APPROVED IN WRITING BY TWO AUTHORIZED ST REPRESENTATIVES, ST PRODUCTS ARE NOT
RECOMMENDED, AUTHORIZED OR WARRANTED FOR USE IN MILITARY, AIR CRAFT, SPACE, LIFE SAVING, OR LIFE SUSTAINING
APPLICATIONS, NOR IN PRODUCTS OR SYSTEMS WHERE FAILURE OR MALFUNCTION MAY RESULT IN PERSONAL INJURY,
DEATH, OR SEVERE PROPERTY OR ENVIRONMENTAL DAMAGE. ST PRODUCTS WHICH ARE NOT SPECIFIED AS "AUTOMOTIVE
D
Resale of ST products with provisions different from the statements and/or technical features set forth in this document shall immediately void
any warranty granted by ST for the ST product or service described herein and shall not create or extend in any manner whatsoever, any
liability of ST.
Information in this document supersedes and replaces all information previously supplied.
The ST logo is a registered trademark of STMicroelectronics. All other names are the property of their respective owners.