The STM32 Series is a popular family of Cortex-M devices by STMicroelectronics. The following article contains information which applies to all members of the product family (e.g. readout protection). Information which is more specific to the respective sub-family(e.g. QSPI programming) is provided in family specific articles.
A list of all ST devices supported by SEGGER can be found here. For further information regarding the STM32 product family, please refer to the website and documentation by STMicroelectronics.
- 1 Device specific connect
- 2 MCU Security
- 3 Option bytes
Device specific connect
To provide the best debugging experience for the most common setups, a device specific connect is implemented for the STM32 devices.
The STM32 devices come with multiple debug registers (DBG / DBGMCU). Some of these registers are written by J-Link during connect, to provide a good debugging experiance:
- Enabling watchdog timer freeze on debug halt.
- Enabling debugging during Sleep, Standby & Stop modes.
On connect, the device security is checked. If security is set (and recoverable) the user is asked if they want security to be lifted. If the user agrees, security is lifted by J-Link (if possible).
Connect under reset
In case that J-Link fails to connect to the device (usually caused by a low-power state of the MCU), J-Link will try to connect to the device under reset to make debugging possible.
Allow opt bytes device selection
The "allow opt. bytes" device selection is only available for STM32F1 series devices. For later devices, memory mapped programming of the option bytes is not feasible as for some series, the option bytes become valid immediately which would cause immediate connection loss to a device (in case readout protection is enabled) before the option byte programming can be verified.
The STM32 series devices provide option bytes which allow "permanent" configuration as well as readout protection for the device. In order to enable or disable readout protection, a sequence of multiple read / write accesses to special function registers of the STM32 MCU has to be performed. The sequence is different for each sub-family of the STM32 device series and is described in the respective reference manual of the device. A list of example J-Link commander files and J-Flash projects which enable or disable the readout protection of an STM32 device is provided below. Please note that the provided files serves as an example / proof of concept. A user may alter them in order to suit their specific use case, e.g. using smaller timeouts, programming other values, etc.
Disabling readout protection
J-Link Commander and J-Flash
J-Link Commander and J-Flash automatically detect secured STM32 devices and ask the user if it should be unlocked. Further information regarding this can be found here: Secured_ST_device_detected
Flasher standalone mode
In order to unlock a STM32 device in stand-alone mode, the unlock sequence needs to be configured in the init steps of the J-Flash project (see examples in the table below).
Restoring factory defaults
The standalone software tool STM32 Unlock can be used to reset the Option Bytes of a STM32 device to factory default settings. STM32 Unlock is part of the J-Link software & documentation pack.
Enabling readout protection
All provided J-Link Commander command files and J-Flash projects set the read out protection to level 1 (ROP/RDP == Level 1). In order to set ROP/RDP Level 2, the value "0xBB" needs to be changed to "0xCC" where indicated in the command file / Exit steps of the J-Flash project. Please note that ROP/RDP Level 2 is permanent and can neither be reverted by SEGGER nor by ST.
- For further information regarding native support in J-Flash and why native support is no longer implemented for new devices, please refer to this article: MCU_Security_Options
Most STM32 devices come with option bytes that can be modified to influence the device behavior, e.g. to set security (see MCU Security).
- J-Link supports direct, memory-mapped option byte programming for most STM32 devices. Please note that usually, all option bytes have to be written in one go.
- The option bytes can be reset to factory default using the STM32 Utility (unless device security does not allow to recover the MCU).